diff options
-rw-r--r-- | chrome/browser/search/search.cc | 57 | ||||
-rw-r--r-- | chrome/browser/search/search.h | 14 | ||||
-rw-r--r-- | chrome/browser/search/search_unittest.cc | 100 |
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()); } |