Chromium Code Reviews| Index: chrome/browser/ui/search/search.cc |
| diff --git a/chrome/browser/ui/search/search.cc b/chrome/browser/ui/search/search.cc |
| index 796edb4ee64bf23013c73c455ea65b7d8c84b63d..8458803221a5ac5e99563f786c81a5fa1a1f49f1 100644 |
| --- a/chrome/browser/ui/search/search.cc |
| +++ b/chrome/browser/ui/search/search.cc |
| @@ -33,6 +33,10 @@ const bool kEnableOnThemesDefault = false; |
| const char kEmbeddedPageVersionFlagName[] = "espv"; |
| const int kEmbeddedPageVersionDefault = 1; |
| +const char kInstantExtendedActivationName[] = "instant"; |
| +const chrome::search::InstantExtendedDefault kInstantExtendedActivationDefault = |
| + chrome::search::INSTANT_USE_EXISTING; |
| + |
| // Constants for the field trial name and group prefix. |
| const char kInstantExtendedFieldTrialName[] = "InstantExtended"; |
| const char kGroupNumberPrefix[] = "Group"; |
| @@ -46,6 +50,32 @@ const char kDisablingSuffix[] = "DISABLED"; |
| namespace chrome { |
| namespace search { |
| +InstantExtendedDefault InstantExtendedDefaultFromInt64(int64 default_value) { |
| + switch (default_value) { |
| + case 0: return INSTANT_FORCE_ON; |
| + case 1: return INSTANT_USE_EXISTING; |
| + case 2: return INSTANT_FORCE_OFF; |
| + default: return INSTANT_USE_EXISTING; |
| + } |
| +} |
| + |
| +InstantExtendedDefault GetInstantExtendedDefaultSetting() { |
| + InstantExtendedDefault default_setting = INSTANT_USE_EXISTING; |
| + |
| + FieldTrialFlags flags; |
| + if (GetFieldTrialInfo( |
| + base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName), |
| + &flags, NULL)) { |
| + uint64 trial_default = GetUInt64ValueForFlagWithDefault( |
| + kInstantExtendedActivationName, |
| + kInstantExtendedActivationDefault, |
| + flags); |
| + default_setting = InstantExtendedDefaultFromInt64(trial_default); |
| + } |
| + |
| + return default_setting; |
| +} |
| + |
| // Check whether or not the Extended API should be used on the given profile. |
| bool IsInstantExtendedAPIEnabled(Profile* profile) { |
| return EmbeddedSearchPageVersion(profile) != 0; |
| @@ -63,15 +93,9 @@ uint64 EmbeddedSearchPageVersion(Profile* profile) { |
| // Check Finch field trials. |
| FieldTrialFlags flags; |
| - uint64 group_number = 0; |
| - base::FieldTrial* trial = |
| - base::FieldTrialList::Find(kInstantExtendedFieldTrialName); |
| - if (trial) { |
| - std::string group_name = trial->group_name(); |
| - GetFieldTrialInfo(group_name, &flags, &group_number); |
| - } |
| - |
| - if (group_number > 0) { |
| + if (GetFieldTrialInfo( |
| + base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName), |
| + &flags, NULL)) { |
| uint64 espv = GetUInt64ValueForFlagWithDefault( |
| kEmbeddedPageVersionFlagName, |
| kEmbeddedPageVersionDefault, |
| @@ -151,29 +175,42 @@ bool IsForcedInstantURL(const GURL& url) { |
| url.path() == instant_url.path(); |
| } |
| -// Given a field trial group name in the above format, parses out the group |
| -// number and configuration flags. Will return a group number of 0 on error. |
| -void GetFieldTrialInfo(const std::string& group_name, |
| +bool GetFieldTrialInfo(const std::string& group_name, |
| FieldTrialFlags* flags, |
| uint64* group_number) { |
| - if (!EndsWith(group_name, kDisablingSuffix, true) && |
| - StartsWithASCII(group_name, kGroupNumberPrefix, true)) { |
| - // We have a valid trial that starts with "Group" and isn't disabled. |
| - size_t first_space = group_name.find(" "); |
| - std::string group_prefix = group_name; |
| - if (first_space != std::string::npos) { |
| - // There is a flags section of the group name. Split that out and parse |
| - // it. |
| - group_prefix = group_name.substr(0, first_space); |
| - base::SplitStringIntoKeyValuePairs( |
| - group_name.substr(first_space), ':', ' ', flags); |
| - } |
| - if (!base::StringToUint64(group_prefix.substr(strlen(kGroupNumberPrefix)), |
| - group_number)) { |
| - // Could not parse group number. |
| - *group_number = 0; |
| + if (EndsWith(group_name, kDisablingSuffix, true) || |
| + !StartsWithASCII(group_name, kGroupNumberPrefix, true)) |
| + return false; |
|
MAD
2013/01/31 20:14:53
Nit: Multi-line conditions calls for {}
robertshield
2013/01/31 20:24:28
Done.
|
| + |
| + // We have a valid trial that starts with "Group" and isn't disabled. |
| + // First extract the flags. |
| + std::string group_prefix(group_name); |
| + |
| + size_t first_space = group_name.find(" "); |
| + if (first_space != std::string::npos) { |
| + // There is a flags section of the group name. Split that out and parse |
| + // it. |
| + group_prefix = group_name.substr(0, first_space); |
| + if (!base::SplitStringIntoKeyValuePairs(group_name.substr(first_space), |
| + ':', ' ', flags)) { |
| + // Failed to parse the flags section. Assume the whole group name is |
| + // invalid. |
| + return false; |
| } |
| } |
| + |
| + // Now extract the group number, making sure we get a non-zero value. |
| + uint64 temp_group_number = 0; |
| + if (!base::StringToUint64(group_prefix.substr(strlen(kGroupNumberPrefix)), |
| + &temp_group_number) || |
| + temp_group_number == 0) { |
| + return false; |
| + } |
| + |
| + if (group_number) |
| + *group_number = temp_group_number; |
| + |
| + return true; |
| } |
| // Given a FieldTrialFlags object, returns the string value of the provided |