X-Chrome-Variations refactoring.
Caveats:
(1) I had to add a lock since both AC and RDH run on different threads
(2) Because the cache is lazily initialized, it's possible that a few AC requests will run without headers
(3) SP doesn't have access to ResourceContext and in turn we can't get ProfileIOData, so we can't transmit "UMA is enabled" header
(4) I used a singleton
BUG=163999
TEST=hand tested by adding LOG(INFO) and checking headers sent on autocomplete/search requests
Also, ran tcpdump and observed transmitted headers.
Review URL: https://chromiumcodereview.appspot.com/11522009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173740 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc
index db2a9b1..5fae4b5 100644
--- a/chrome/browser/autocomplete/search_provider.cc
+++ b/chrome/browser/autocomplete/search_provider.cc
@@ -26,6 +26,7 @@
#include "chrome/browser/autocomplete/history_url_provider.h"
#include "chrome/browser/autocomplete/keyword_provider.h"
#include "chrome/browser/autocomplete/url_prefix.h"
+#include "chrome/browser/chrome_metrics_helper.h"
#include "chrome/browser/history/history.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/history/in_memory_database.h"
@@ -45,6 +46,7 @@
#include "net/base/escape.h"
#include "net/base/load_flags.h"
#include "net/base/net_util.h"
+#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/url_fetcher.h"
#include "net/url_request/url_request_status.h"
@@ -649,6 +651,11 @@
net::URLFetcher::Create(id, suggest_url, net::URLFetcher::GET, this);
fetcher->SetRequestContext(profile_->GetRequestContext());
fetcher->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
+ // Add Chrome experiment state to the request headers.
+ net::HttpRequestHeaders headers;
+ ChromeMetricsHelper::GetInstance()->AppendHeaders(
+ fetcher->GetOriginalURL(), profile_->IsOffTheRecord(), false, &headers);
+ fetcher->SetExtraRequestHeaders(headers.ToString());
fetcher->Start();
return fetcher;
}