1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/win/limited_access_features.h"
#include <inspectable.h>
#include <roapi.h>
#include <windows.foundation.h>
#include <windows.services.store.h>
#include <wrl.h>
#include <string>
#include "base/strings/strcat.h"
#include "base/win/core_winrt_util.h"
#include "base/win/hstring_reference.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
using ABI::Windows::ApplicationModel::IID_ILimitedAccessFeaturesStatics;
using ABI::Windows::ApplicationModel::ILimitedAccessFeatureRequestResult;
using ABI::Windows::ApplicationModel::ILimitedAccessFeaturesStatics;
using ABI::Windows::ApplicationModel::LimitedAccessFeatureStatus;
using ABI::Windows::ApplicationModel::LimitedAccessFeatureStatus_Available;
using ABI::Windows::ApplicationModel::
LimitedAccessFeatureStatus_AvailableWithoutToken;
using base::win::HStringReference;
using Microsoft::WRL::ComPtr;
// Microsoft provided these values. They are used to unlock and access limited
// access features.
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
const wchar_t kLimitedAccessFeatureIdentity[] = L"0qgpfzgh1edfy";
#else
const wchar_t kLimitedAccessFeatureIdentity[] = L"b06a12530me7r";
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
bool TryToUnlockLimitedAccessFeature(const std::wstring& feature,
const std::wstring& token) {
ComPtr<ILimitedAccessFeaturesStatics> limited_access_features;
ComPtr<ILimitedAccessFeatureRequestResult> limited_access_features_result;
HRESULT hr = base::win::RoGetActivationFactory(
HStringReference(
RuntimeClass_Windows_ApplicationModel_LimitedAccessFeatures)
.Get(),
IID_ILimitedAccessFeaturesStatics, &limited_access_features);
if (!SUCCEEDED(hr)) {
return false;
}
// Required to unlock feature.
const std::wstring attestation = base::StrCat(
{kLimitedAccessFeatureIdentity, L" has registered their use of ", feature,
L" with Microsoft and agrees to the terms of use."});
hr = limited_access_features->TryUnlockFeature(
HStringReference(feature.c_str()).Get(),
HStringReference(token.c_str()).Get(),
HStringReference(attestation.c_str()).Get(),
&limited_access_features_result);
if (!SUCCEEDED(hr)) {
return false;
}
LimitedAccessFeatureStatus status;
hr = limited_access_features_result->get_Status(&status);
if (!SUCCEEDED(hr)) {
return false;
}
if ((status != LimitedAccessFeatureStatus_Available) &&
(status != LimitedAccessFeatureStatus_AvailableWithoutToken)) {
return false;
}
return true;
}
|