| Index: chrome/browser/net/chrome_network_delegate.cc
|
| diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
|
| index 545d127b789df21079f0aeae4a5142900d437290..f29f82cf0f47d9ab1281c565ec9bf4dd56c414c4 100644
|
| --- a/chrome/browser/net/chrome_network_delegate.cc
|
| +++ b/chrome/browser/net/chrome_network_delegate.cc
|
| @@ -14,6 +14,8 @@
|
| #include "chrome/browser/extensions/extension_event_router_forwarder.h"
|
| #include "chrome/browser/extensions/extension_info_map.h"
|
| #include "chrome/browser/extensions/extension_process_manager.h"
|
| +#include "chrome/browser/google/google_util.h"
|
| +#include "chrome/browser/metrics/metrics_service.h"
|
| #include "chrome/browser/prefs/pref_member.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| #include "chrome/browser/task_manager/task_manager.h"
|
| @@ -111,10 +113,12 @@ ChromeNetworkDelegate::ChromeNetworkDelegate(
|
| const policy::URLBlacklistManager* url_blacklist_manager,
|
| void* profile,
|
| CookieSettings* cookie_settings,
|
| + bool is_incognito,
|
| BooleanPrefMember* enable_referrers)
|
| : event_router_(event_router),
|
| profile_(profile),
|
| cookie_settings_(cookie_settings),
|
| + is_incognito_(is_incognito),
|
| extension_info_map_(extension_info_map),
|
| enable_referrers_(enable_referrers),
|
| url_blacklist_manager_(url_blacklist_manager) {
|
| @@ -165,6 +169,10 @@ int ChromeNetworkDelegate::OnBeforeSendHeaders(
|
| net::URLRequest* request,
|
| const net::CompletionCallback& callback,
|
| net::HttpRequestHeaders* headers) {
|
| + // Attach any applicable Chrome metrics headers. This is a best-effort attempt
|
| + // where failure will not cause OnBeforeSendHeaders to back out.
|
| + AddChromeMetricsStateHeader(request, headers);
|
| +
|
| return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders(
|
| profile_, extension_info_map_.get(), request, callback, headers);
|
| }
|
| @@ -304,3 +312,25 @@ bool ChromeNetworkDelegate::CanSetCookie(
|
|
|
| return allow;
|
| }
|
| +
|
| +void ChromeNetworkDelegate::AddChromeMetricsStateHeader(
|
| + net::URLRequest* request,
|
| + net::HttpRequestHeaders* headers) {
|
| + // Note our criteria for attaching Chrome experiment headers:
|
| + // 1. We only transmit to *.google.<TLD> domains. NOTE that this use of
|
| + // google_util helpers to check this does not guarantee that the URL is
|
| + // Google-owned, only that it is of the form *.google.<TLD>. In the future
|
| + // we may choose to reinforce this check.
|
| + // 2. We must verify that we are transmitting for a profile network context
|
| + // and not the system context. We do this by checking |profile_|, as it is
|
| + // NULL when we're in the system context.
|
| + // 3. We only transmit for non Off The Record profiles.
|
| + // 4. For the X-Chrome-UMA-Enabled bit, we only set it if UMA is in fact
|
| + // enabled for this install of Chrome.
|
| + if (google_util::IsGoogleDomainUrl(request->url().spec(),
|
| + google_util::ALLOW_SUBDOMAIN) &&
|
| + profile_ && !is_incognito_ &&
|
| + MetricsServiceHelper::IsMetricsReportingEnabled()) {
|
| + headers->SetHeader("X-Chrome-UMA-Enabled", "1");
|
| + }
|
| +}
|
|
|