Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/search/search.h" | 5 #include "chrome/browser/ui/search/search.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/metrics/field_trial.h" | 8 #include "base/metrics/field_trial.h" |
| 9 #include "base/string_split.h" | 9 #include "base/string_split.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 // Configuration options for Embedded Search. | 24 // Configuration options for Embedded Search. |
| 25 // InstantExtended field trials are named in such a way that we can parse out | 25 // InstantExtended field trials are named in such a way that we can parse out |
| 26 // the experiment configuration from the trial's group name in order to give | 26 // the experiment configuration from the trial's group name in order to give |
| 27 // us maximum flexability in running experiments. | 27 // us maximum flexability in running experiments. |
| 28 // Field trial groups should be named things like "Group7 espv:2 instant:1". | 28 // Field trial groups should be named things like "Group7 espv:2 instant:1". |
| 29 // The first token is always GroupN for some integer N, followed by a | 29 // The first token is always GroupN for some integer N, followed by a |
| 30 // space-delimited list of key:value pairs which correspond to these flags: | 30 // space-delimited list of key:value pairs which correspond to these flags: |
| 31 const char kEmbeddedPageVersionFlagName[] = "espv"; | 31 const char kEmbeddedPageVersionFlagName[] = "espv"; |
| 32 | |
| 33 #if defined(OS_IOS) || defined(OS_ANDROID) | |
| 34 const int kEmbeddedPageVersionDefault = 1; | |
| 35 #else | |
| 32 const int kEmbeddedPageVersionDefault = 2; | 36 const int kEmbeddedPageVersionDefault = 2; |
| 37 #endif | |
| 33 | 38 |
| 34 const char kInstantExtendedActivationName[] = "instant"; | 39 const char kInstantExtendedActivationName[] = "instant"; |
| 35 const chrome::search::InstantExtendedDefault kInstantExtendedActivationDefault = | 40 const chrome::search::InstantExtendedDefault kInstantExtendedActivationDefault = |
| 36 chrome::search::INSTANT_DEFAULT_ON; | 41 chrome::search::INSTANT_DEFAULT_ON; |
| 37 | 42 |
| 38 // Constants for the field trial name and group prefix. | 43 // Constants for the field trial name and group prefix. |
| 39 const char kInstantExtendedFieldTrialName[] = "InstantExtended"; | 44 const char kInstantExtendedFieldTrialName[] = "InstantExtended"; |
| 40 const char kGroupNumberPrefix[] = "Group"; | 45 const char kGroupNumberPrefix[] = "Group"; |
| 41 | 46 |
| 42 // If the field trial's group name ends with this string its configuration will | 47 // If the field trial's group name ends with this string its configuration will |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 return kInstantExtendedActivationDefault; | 142 return kInstantExtendedActivationDefault; |
| 138 } | 143 } |
| 139 | 144 |
| 140 bool IsInstantExtendedAPIEnabled(const Profile* profile) { | 145 bool IsInstantExtendedAPIEnabled(const Profile* profile) { |
| 141 return EmbeddedSearchPageVersion(profile) != 0; | 146 return EmbeddedSearchPageVersion(profile) != 0; |
| 142 } | 147 } |
| 143 | 148 |
| 144 // Determine what embedded search page version to request from the user's | 149 // Determine what embedded search page version to request from the user's |
| 145 // default search provider. If 0, the embedded search UI should not be enabled. | 150 // default search provider. If 0, the embedded search UI should not be enabled. |
| 146 uint64 EmbeddedSearchPageVersion(const Profile* profile) { | 151 uint64 EmbeddedSearchPageVersion(const Profile* profile) { |
| 152 #if defined(OS_IOS) || defined(OS_ANDROID) | |
| 153 const CommandLine* cl = CommandLine::ForCurrentProcess(); | |
| 154 if (cl->HasSwitch(switches::kEnableQueryExtraction)); | |
|
sreeram
2013/03/01 22:36:44
Trailing semicolon oops.
Peter Kasting
2013/03/01 22:42:49
Do we need to use a distinct command-line flag fro
| |
| 155 return kEmbeddedPageVersionDefault; | |
| 156 #else | |
| 147 if (!profile || profile->IsOffTheRecord()) | 157 if (!profile || profile->IsOffTheRecord()) |
| 148 return 0; | 158 return 0; |
| 149 | 159 |
| 150 FieldTrialFlags flags; | 160 FieldTrialFlags flags; |
| 151 if (GetFieldTrialInfo( | 161 if (GetFieldTrialInfo( |
| 152 base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName), | 162 base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName), |
| 153 &flags, NULL)) { | 163 &flags, NULL)) { |
| 154 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName, | 164 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName, |
| 155 kEmbeddedPageVersionDefault, | 165 kEmbeddedPageVersionDefault, |
| 156 flags); | 166 flags); |
| 157 } | 167 } |
| 158 | 168 |
| 159 const CommandLine* cl = CommandLine::ForCurrentProcess(); | 169 const CommandLine* cl = CommandLine::ForCurrentProcess(); |
| 160 if (cl->HasSwitch(switches::kEnableInstantExtendedAPI)) { | 170 if (cl->HasSwitch(switches::kEnableInstantExtendedAPI)) { |
| 161 // The user has manually flipped the about:flags switch - give the default | 171 // The user has manually flipped the about:flags switch - give the default |
| 162 // UI version. | 172 // UI version. |
| 163 return kEmbeddedPageVersionDefault; | 173 return kEmbeddedPageVersionDefault; |
| 164 } | 174 } |
| 165 | 175 #endif // defined(OS_IOS) || defined(OS_ANDROID) |
|
sreeram
2013/03/01 22:36:44
Two spaces before "//".
| |
| 166 return 0; | 176 return 0; |
| 167 } | 177 } |
| 168 | 178 |
| 169 bool IsQueryExtractionEnabled(const Profile* profile) { | 179 bool IsQueryExtractionEnabled(const Profile* profile) { |
| 170 #if defined(OS_IOS) | |
| 171 const CommandLine* cl = CommandLine::ForCurrentProcess(); | |
| 172 return cl->HasSwitch(switches::kEnableQueryExtraction); | |
| 173 #else | |
| 174 // On desktop, query extraction is controlled by the instant-extended-api | 180 // On desktop, query extraction is controlled by the instant-extended-api |
| 175 // flag. | 181 // flag. For iOS and Android, the below function returns true if the |
| 182 // enable-query-extraction flag is present. | |
| 176 return IsInstantExtendedAPIEnabled(profile); | 183 return IsInstantExtendedAPIEnabled(profile); |
| 177 #endif | |
| 178 } | 184 } |
| 179 | 185 |
| 180 string16 GetSearchTermsFromNavigationEntry( | 186 string16 GetSearchTermsFromNavigationEntry( |
| 181 const content::NavigationEntry* entry) { | 187 const content::NavigationEntry* entry) { |
| 182 string16 search_terms; | 188 string16 search_terms; |
| 183 if (entry) | 189 if (entry) |
| 184 entry->GetExtraData(kInstantExtendedSearchTermsKey, &search_terms); | 190 entry->GetExtraData(kInstantExtendedSearchTermsKey, &search_terms); |
| 185 return search_terms; | 191 return search_terms; |
| 186 } | 192 } |
| 187 | 193 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 255 IsInstantExtendedAPIEnabled(profile), | 261 IsInstantExtendedAPIEnabled(profile), |
| 256 template_url); | 262 template_url); |
| 257 } | 263 } |
| 258 | 264 |
| 259 void EnableInstantExtendedAPIForTesting() { | 265 void EnableInstantExtendedAPIForTesting() { |
| 260 CommandLine* cl = CommandLine::ForCurrentProcess(); | 266 CommandLine* cl = CommandLine::ForCurrentProcess(); |
| 261 cl->AppendSwitch(switches::kEnableInstantExtendedAPI); | 267 cl->AppendSwitch(switches::kEnableInstantExtendedAPI); |
| 262 } | 268 } |
| 263 | 269 |
| 264 void EnableQueryExtractionForTesting() { | 270 void EnableQueryExtractionForTesting() { |
| 265 #if defined(OS_IOS) | 271 #if defined(OS_IOS) || defined(OS_ANDROID) |
| 266 CommandLine* cl = CommandLine::ForCurrentProcess(); | 272 CommandLine* cl = CommandLine::ForCurrentProcess(); |
| 267 cl->AppendSwitch(switches::kEnableQueryExtraction); | 273 cl->AppendSwitch(switches::kEnableQueryExtraction); |
| 268 #else | 274 #else |
| 269 EnableInstantExtendedAPIForTesting(); | 275 EnableInstantExtendedAPIForTesting(); |
| 270 #endif | 276 #endif |
| 271 } | 277 } |
| 272 | 278 |
| 273 bool ShouldAssignURLToInstantRendererImpl(const GURL& url, | 279 bool ShouldAssignURLToInstantRendererImpl(const GURL& url, |
| 274 bool extended_api_enabled, | 280 bool extended_api_enabled, |
| 275 TemplateURL* template_url) { | 281 TemplateURL* template_url) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 365 // Given a FieldTrialFlags object, returns the boolean value of the provided | 371 // Given a FieldTrialFlags object, returns the boolean value of the provided |
| 366 // flag. | 372 // flag. |
| 367 bool GetBoolValueForFlagWithDefault(const std::string& flag, | 373 bool GetBoolValueForFlagWithDefault(const std::string& flag, |
| 368 bool default_value, | 374 bool default_value, |
| 369 const FieldTrialFlags& flags) { | 375 const FieldTrialFlags& flags) { |
| 370 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags); | 376 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags); |
| 371 } | 377 } |
| 372 | 378 |
| 373 } // namespace search | 379 } // namespace search |
| 374 } // namespace chrome | 380 } // namespace chrome |
| OLD | NEW |