Commit 63a9c85e authored by Pete Williamson's avatar Pete Williamson Committed by Commit Bot

[EoS] Add the "X-google-Chrome-Experiment-Tag" header when needed.

When a finch experiment sets the override country for an instance
of chrome, pass along that override country in the request headers
to the server to get the catalog.

Add logging


Add experiment flag

Change-Id: I16f94892c3fa9445af2290fd1c62d5c11be11374
Reviewed-on: https://chromium-review.googlesource.com/1258058Reviewed-by: default avatarJustin DeWitt <dewittj@chromium.org>
Commit-Queue: Peter Williamson <petewil@chromium.org>
Cr-Commit-Position: refs/heads/master@{#596259}
parent c9644c5c
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "base/version.h" #include "base/version.h"
#include "chrome/browser/android/chrome_feature_list.h" #include "chrome/browser/android/chrome_feature_list.h"
#include "chrome/browser/android/explore_sites/catalog.pb.h" #include "chrome/browser/android/explore_sites/catalog.pb.h"
#include "chrome/browser/android/explore_sites/explore_sites_feature.h"
#include "chrome/browser/android/explore_sites/explore_sites_types.h" #include "chrome/browser/android/explore_sites/explore_sites_types.h"
#include "chrome/browser/android/explore_sites/url_util.h" #include "chrome/browser/android/explore_sites/url_util.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
...@@ -67,6 +68,7 @@ std::string GetCountry() { ...@@ -67,6 +68,7 @@ std::string GetCountry() {
// proto format. // proto format.
const char kRequestContentType[] = "application/x-protobuf"; const char kRequestContentType[] = "application/x-protobuf";
const char kRequestMethod[] = "GET"; const char kRequestMethod[] = "GET";
const char kExperiment[] = "exp";
constexpr net::NetworkTrafficAnnotationTag traffic_annotation = constexpr net::NetworkTrafficAnnotationTag traffic_annotation =
net::DefineNetworkTrafficAnnotation("explore_sites", R"( net::DefineNetworkTrafficAnnotation("explore_sites", R"(
...@@ -151,6 +153,13 @@ ExploreSitesFetcher::ExploreSitesFetcher( ...@@ -151,6 +153,13 @@ ExploreSitesFetcher::ExploreSitesFetcher(
net::HttpRequestHeaders::kAcceptLanguage, accept_languages); net::HttpRequestHeaders::kAcceptLanguage, accept_languages);
} }
// Get field trial value, if any.
std::string tag = base::GetFieldTrialParamValueByFeature(
chrome::android::kExploreSites, kExperiment);
if (!tag.empty()) {
resource_request->headers.SetHeader("X-Google-Chrome-Experiment-Tag", tag);
}
url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request), url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request),
traffic_annotation); traffic_annotation);
......
...@@ -34,6 +34,8 @@ using testing::SaveArg; ...@@ -34,6 +34,8 @@ using testing::SaveArg;
namespace { namespace {
const char kAcceptLanguages[] = "en-US,en;q=0.5"; const char kAcceptLanguages[] = "en-US,en;q=0.5";
const char kCountryOverride[] = "country_override";
const char kExperimentData[] = "FooBar";
} // namespace } // namespace
namespace explore_sites { namespace explore_sites {
...@@ -51,15 +53,14 @@ class ExploreSitesFetcherTest : public testing::Test { ...@@ -51,15 +53,14 @@ class ExploreSitesFetcherTest : public testing::Test {
ExploreSitesRequestStatus RunFetcherWithData(const std::string& response_data, ExploreSitesRequestStatus RunFetcherWithData(const std::string& response_data,
std::string* data_received); std::string* data_received);
void SetUpExperimentOption(std::string country_code) { void SetUpExperimentOption(std::string option, std::string data) {
const std::string kTrialName = "trial_name"; const std::string kTrialName = "trial_name";
const std::string kGroupName = "group_name"; const std::string kGroupName = "group_name";
scoped_refptr<base::FieldTrial> trial = scoped_refptr<base::FieldTrial> trial =
base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName);
std::map<std::string, std::string> params = { std::map<std::string, std::string> params = {{option, data}};
{"country_override", country_code}};
base::AssociateFieldTrialParams(kTrialName, kGroupName, params); base::AssociateFieldTrialParams(kTrialName, kGroupName, params);
std::unique_ptr<base::FeatureList> feature_list = std::unique_ptr<base::FeatureList> feature_list =
...@@ -90,9 +91,9 @@ class ExploreSitesFetcherTest : public testing::Test { ...@@ -90,9 +91,9 @@ class ExploreSitesFetcherTest : public testing::Test {
ExploreSitesRequestStatus last_status_; ExploreSitesRequestStatus last_status_;
std::unique_ptr<std::string> last_data_; std::unique_ptr<std::string> last_data_;
base::MessageLoopForIO message_loop_; base::MessageLoopForIO message_loop_;
scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
std::unique_ptr<base::FieldTrialList> field_trial_list_; std::unique_ptr<base::FieldTrialList> field_trial_list_;
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
}; };
ExploreSitesFetcher::Callback ExploreSitesFetcherTest::StoreResult() { ExploreSitesFetcher::Callback ExploreSitesFetcherTest::StoreResult() {
...@@ -261,7 +262,7 @@ TEST_F(ExploreSitesFetcherTest, Success) { ...@@ -261,7 +262,7 @@ TEST_F(ExploreSitesFetcherTest, Success) {
} }
TEST_F(ExploreSitesFetcherTest, DefaultCountry) { TEST_F(ExploreSitesFetcherTest, DefaultCountry) {
SetUpExperimentOption("KZ"); SetUpExperimentOption(kCountryOverride, "KZ");
std::string data; std::string data;
EXPECT_EQ(ExploreSitesRequestStatus::kSuccess, EXPECT_EQ(ExploreSitesRequestStatus::kSuccess,
RunFetcherWithData("Any data.", &data)); RunFetcherWithData("Any data.", &data));
...@@ -298,6 +299,26 @@ TEST_F(ExploreSitesFetcherTest, TestHeaders) { ...@@ -298,6 +299,26 @@ TEST_F(ExploreSitesFetcherTest, TestHeaders) {
headers.GetHeader(net::HttpRequestHeaders::kAcceptLanguage, &languages); headers.GetHeader(net::HttpRequestHeaders::kAcceptLanguage, &languages);
EXPECT_TRUE(success); EXPECT_TRUE(success);
EXPECT_EQ(languages, kAcceptLanguages); EXPECT_EQ(languages, kAcceptLanguages);
// The finch header should not be set since the experiment is not on.
success = headers.HasHeader("X-Google-Chrome-Experiment-Tag");
EXPECT_FALSE(success);
}
TEST_F(ExploreSitesFetcherTest, TestFinchHeader) {
// Set up the Finch experiment.
SetUpExperimentOption("exp", kExperimentData);
std::string data;
EXPECT_EQ(ExploreSitesRequestStatus::kSuccess,
RunFetcherWithData("Any data.", &data));
net::HttpRequestHeaders headers = last_resource_request.headers;
std::string header_text;
bool success;
success = headers.GetHeader("X-Google-Chrome-Experiment-Tag", &header_text);
EXPECT_EQ(std::string(kExperimentData), header_text);
} }
} // namespace explore_sites } // namespace explore_sites
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment