Chromium Code Reviews| 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. |
|
Ilya Sherman
2012/04/17 20:55:39
nit: s/Off The Record/Incognito
SteveT
2012/04/19 18:38:01
Done.
|
| + // 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()) { |
|
battre
2012/04/17 20:33:02
Here we still have a threading problem. The Metric
SteveT
2012/04/17 23:26:44
Ah, yes. I see that we do something similar with t
Ilya Sherman
2012/04/17 23:33:13
I think it's probably ok to use a PrefMember, and
battre
2012/04/18 17:05:05
We could probably also put the PrefMember in Metri
SteveT
2012/04/19 18:38:01
Turns out letting the PrefMember live in ProfileIO
|
| + headers->SetHeader("X-Chrome-UMA-Enabled", "1"); |
| + } |
| +} |