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
|
// 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/enterprise/webstore/chrome_web_store_navigation_throttle.h"
#include "chrome/browser/policy/dm_token_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "components/enterprise/browser/controller/browser_dm_token_storage.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "extensions/common/extension_urls.h"
#include "net/http/http_request_headers.h"
namespace enterprise_webstore {
char kDeviceIdHeader[] = "X-Client-Device-Id";
char kDmTokenHeader[] = "X-Browser-Dm-Token";
ChromeWebStoreNavigationThrottle::ChromeWebStoreNavigationThrottle(
content::NavigationThrottleRegistry& registry)
: content::NavigationThrottle(registry) {}
ChromeWebStoreNavigationThrottle::~ChromeWebStoreNavigationThrottle() = default;
content::NavigationThrottle::ThrottleCheckResult
ChromeWebStoreNavigationThrottle::WillStartRequest() {
return MaybeAppendHeaders();
}
content::NavigationThrottle::ThrottleCheckResult
ChromeWebStoreNavigationThrottle::WillRedirectRequest() {
return MaybeAppendHeaders();
}
content::NavigationThrottle::ThrottleCheckResult
ChromeWebStoreNavigationThrottle::MaybeAppendHeaders() {
if (!navigation_handle()->GetURL().DomainIs(
extension_urls::GetNewWebstoreLaunchURL().host())) {
return content::NavigationThrottle::PROCEED;
}
content::WebContents* web_contents = navigation_handle()->GetWebContents();
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
if (!profile->IsRegularProfile()) {
return content::NavigationThrottle::PROCEED;
}
std::optional<policy::DMToken> optional_dm_token = policy::GetDMToken();
if (!optional_dm_token || !optional_dm_token->is_valid()) {
return content::NavigationThrottle::PROCEED;
}
navigation_handle()->SetRequestHeader(kDmTokenHeader,
optional_dm_token->value());
navigation_handle()->SetRequestHeader(
kDeviceIdHeader,
policy::BrowserDMTokenStorage::Get()->RetrieveClientId());
return content::NavigationThrottle::PROCEED;
}
const char* ChromeWebStoreNavigationThrottle::GetNameForLogging() {
return "ChromeWebStoreNavigationThrottle";
}
} // namespace enterprise_webstore
|