summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/search/search.cc57
-rw-r--r--chrome/browser/search/search.h14
-rw-r--r--chrome/browser/search/search_unittest.cc100
3 files changed, 116 insertions, 55 deletions
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc
index 0ec4046..2fda4aa 100644
--- a/chrome/browser/search/search.cc
+++ b/chrome/browser/search/search.cc
@@ -39,7 +39,7 @@ namespace chrome {
namespace {
// Configuration options for Embedded Search.
-// InstantExtended field trials are named in such a way that we can parse out
+// EmbeddedSearch field trials are named in such a way that we can parse out
// the experiment configuration from the trial's group name in order to give
// us maximum flexability in running experiments.
// Field trial groups should be named things like "Group7 espv:2 instant:1".
@@ -67,7 +67,14 @@ const char kPrefetchSearchResultsOnSRP[] = "prefetch_results_srp";
const char kSuppressInstantExtendedOnSRPFlagName[] = "suppress_on_srp";
// Constants for the field trial name and group prefix.
+// Note in M30 and below this field trial was named "InstantExtended" and in
+// M31 was renamed to EmbeddedSearch for clarity and cleanliness. Since we
+// can't easilly sync up Finch configs with the pushing of this change to
+// Dev & Canary, for now the code accepts both names.
+// TODO(dcblack): Remove the InstantExtended name once M31 hits the Beta
+// channel.
const char kInstantExtendedFieldTrialName[] = "InstantExtended";
+const char kEmbeddedSearchFieldTrialName[] = "EmbeddedSearch";
const char kGroupNumberPrefix[] = "Group";
// If the field trial's group name ends with this string its configuration will
@@ -287,9 +294,7 @@ uint64 EmbeddedSearchPageVersion() {
FieldTrialFlags flags;
uint64 group_num = 0;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, &group_num)) {
+ if (GetFieldTrialInfo(&flags, &group_num)) {
if (group_num == 0)
return kEmbeddedPageVersionDisabled;
return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName,
@@ -444,9 +449,7 @@ bool ShouldPreferRemoteNTPOnStartup() {
return true;
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(kUseRemoteNTPOnStartupFlagName, true,
flags);
}
@@ -455,9 +458,7 @@ bool ShouldPreferRemoteNTPOnStartup() {
bool ShouldHideTopVerbatimMatch() {
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(kHideVerbatimFlagName, false, flags);
}
return false;
@@ -465,9 +466,7 @@ bool ShouldHideTopVerbatimMatch() {
bool ShouldUseCacheableNTP() {
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(kUseCacheableNTP, false, flags);
}
return false;
@@ -480,9 +479,7 @@ bool ShouldShowInstantNTP() {
return false;
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(kShowNtpFlagName, true, flags);
}
return true;
@@ -490,9 +487,7 @@ bool ShouldShowInstantNTP() {
bool ShouldShowRecentTabsOnNTP() {
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(
kRecentTabsOnNTPFlagName, false, flags);
}
@@ -502,9 +497,7 @@ bool ShouldShowRecentTabsOnNTP() {
bool ShouldSuppressInstantExtendedOnSRP() {
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(
kSuppressInstantExtendedOnSRPFlagName, false, flags);
}
@@ -551,9 +544,7 @@ GURL GetEffectiveURLForInstant(const GURL& url, Profile* profile) {
int GetInstantLoaderStalenessTimeoutSec() {
int timeout_sec = kStalePageTimeoutDefault;
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
timeout_sec = GetUInt64ValueForFlagWithDefault(kStalePageTimeoutFlagName,
kStalePageTimeoutDefault,
flags);
@@ -647,9 +638,7 @@ bool ShouldPrefetchSearchResultsOnSRP() {
}
FieldTrialFlags flags;
- if (GetFieldTrialInfo(
- base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
- &flags, NULL)) {
+ if (GetFieldTrialInfo(&flags, NULL)) {
return GetBoolValueForFlagWithDefault(kPrefetchSearchResultsOnSRP, false,
flags);
}
@@ -666,9 +655,17 @@ void DisableInstantExtendedAPIForTesting() {
cl->AppendSwitch(switches::kDisableInstantExtendedAPI);
}
-bool GetFieldTrialInfo(const std::string& group_name,
- FieldTrialFlags* flags,
+bool GetFieldTrialInfo(FieldTrialFlags* flags,
uint64* group_number) {
+ // Get the group name. If the EmbeddedSearch trial doesn't exist, look for
+ // the older InstantExtended name.
+ std::string group_name = base::FieldTrialList::FindFullName(
+ kEmbeddedSearchFieldTrialName);
+ if (group_name.empty()) {
+ group_name = base::FieldTrialList::FindFullName(
+ kInstantExtendedFieldTrialName);
+ }
+
if (EndsWith(group_name, kDisablingSuffix, true))
return false;
diff --git a/chrome/browser/search/search.h b/chrome/browser/search/search.h
index 59ba336..ade3587 100644
--- a/chrome/browser/search/search.h
+++ b/chrome/browser/search/search.h
@@ -206,16 +206,16 @@ void DisableInstantExtendedAPIForTesting();
// Type for a collection of experiment configuration parameters.
typedef std::vector<std::pair<std::string, std::string> > FieldTrialFlags;
-// Given a field trial group name, parses out the group number and configuration
-// flags. On success, |flags| will be filled with the field trial flags. |flags|
-// must not be NULL. If not NULL, |group_number| will receive the experiment
-// group number.
-// Returns true iff |group_name| is successfully parsed and not disabled.
+// Finds the active field trial group name and parses out the group number and
+// configuration flags. On success, |flags| will be filled with the field trial
+// flags. |flags| must not be NULL. If not NULL, |group_number| will receive the
+// experiment group number.
+// Returns true iff the active field trial is successfully parsed and not
+// disabled.
// Note that |flags| may be successfully populated in some cases when false is
// returned - in these cases it should not be used.
// Exposed for testing only.
-bool GetFieldTrialInfo(const std::string& group_name,
- FieldTrialFlags* flags,
+bool GetFieldTrialInfo(FieldTrialFlags* flags,
uint64* group_number);
// Given a FieldTrialFlags object, returns the string value of the provided
diff --git a/chrome/browser/search/search_unittest.cc b/chrome/browser/search/search_unittest.cc
index 386bdf1..e3f38d9 100644
--- a/chrome/browser/search/search_unittest.cc
+++ b/chrome/browser/search/search_unittest.cc
@@ -29,53 +29,115 @@
namespace chrome {
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) {
+class EmbeddedSearchFieldTrialTest : public testing::Test {
+ protected:
+ virtual void SetUp() {
+ field_trial_list_.reset(new base::FieldTrialList(
+ new metrics::SHA1EntropyProvider("42")));
+ base::StatisticsRecorder::Initialize();
+ ResetInstantExtendedOptInStateGateForTest();
+ }
+
+ private:
+ scoped_ptr<base::FieldTrialList> field_trial_list_;
+};
+
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoEmptyAndValid) {
FieldTrialFlags flags;
uint64 group_number = 0;
- EXPECT_TRUE(GetFieldTrialInfo(std::string(), &flags, &group_number));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(0ul, group_number);
EXPECT_EQ(0ul, flags.size());
- EXPECT_TRUE(GetFieldTrialInfo("Group77", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(77ul, group_number);
EXPECT_EQ(0ul, flags.size());
}
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidThenValid) {
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidNumber) {
FieldTrialFlags flags;
uint64 group_number = 0;
- EXPECT_FALSE(GetFieldTrialInfo("Group77.2", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77.2"));
+ EXPECT_FALSE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(0ul, group_number);
EXPECT_EQ(0ul, flags.size());
+}
+
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoInvalidName) {
+ FieldTrialFlags flags;
+ uint64 group_number = 0;
- EXPECT_TRUE(GetFieldTrialInfo("Invalid77", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Invalid77"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(0ul, group_number);
EXPECT_EQ(0ul, flags.size());
+}
+
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidGroup) {
+ FieldTrialFlags flags;
+ uint64 group_number = 0;
- EXPECT_TRUE(GetFieldTrialInfo("Group77 ", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(77ul, group_number);
EXPECT_EQ(0ul, flags.size());
}
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) {
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoValidFlag) {
FieldTrialFlags flags;
uint64 group_number = 0;
EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
- EXPECT_TRUE(GetFieldTrialInfo("Group77 foo:6", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77 foo:6"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(77ul, group_number);
EXPECT_EQ(1ul, flags.size());
EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
}
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) {
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewName) {
FieldTrialFlags flags;
uint64 group_number = 0;
- EXPECT_TRUE(GetFieldTrialInfo(
- "Group77 bar:1 baz:7 cat:dogs", &flags, &group_number));
+ EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "EmbeddedSearch", "Group77 foo:6"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
+ EXPECT_EQ(77ul, group_number);
+ EXPECT_EQ(1ul, flags.size());
+ EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
+}
+
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoNewNameOverridesOld) {
+ FieldTrialFlags flags;
+ uint64 group_number = 0;
+
+ EXPECT_EQ(9999ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "EmbeddedSearch", "Group77 foo:6"));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group78 foo:5"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
+ EXPECT_EQ(77ul, group_number);
+ EXPECT_EQ(1ul, flags.size());
+ EXPECT_EQ(6ul, GetUInt64ValueForFlagWithDefault("foo", 9999, flags));
+}
+
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) {
+ FieldTrialFlags flags;
+ uint64 group_number = 0;
+
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77 bar:1 baz:7 cat:dogs"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(77ul, group_number);
EXPECT_EQ(3ul, flags.size());
EXPECT_EQ(true, GetBoolValueForFlagWithDefault("bar", false, flags));
@@ -86,22 +148,24 @@ TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoLotsOfFlags) {
GetStringValueForFlagWithDefault("moose", "default", flags));
}
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) {
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoDisabled) {
FieldTrialFlags flags;
uint64 group_number = 0;
- EXPECT_FALSE(GetFieldTrialInfo(
- "Group77 bar:1 baz:7 cat:dogs DISABLED", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Group77 bar:1 baz:7 cat:dogs DISABLED"));
+ EXPECT_FALSE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(0ul, group_number);
EXPECT_EQ(0ul, flags.size());
}
-TEST(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) {
+TEST_F(EmbeddedSearchFieldTrialTest, GetFieldTrialInfoControlFlags) {
FieldTrialFlags flags;
uint64 group_number = 0;
- EXPECT_TRUE(GetFieldTrialInfo(
- "Control77 bar:1 baz:7 cat:dogs", &flags, &group_number));
+ ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial(
+ "InstantExtended", "Control77 bar:1 baz:7 cat:dogs"));
+ EXPECT_TRUE(GetFieldTrialInfo(&flags, &group_number));
EXPECT_EQ(0ul, group_number);
EXPECT_EQ(3ul, flags.size());
}