OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/search/search.h" | 5 #include "components/search/search.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 |
7 #include "base/command_line.h" | 9 #include "base/command_line.h" |
8 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
9 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_split.h" | 12 #include "base/strings/string_split.h" |
11 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
12 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "build/build_config.h" |
13 #include "components/google/core/browser/google_util.h" | 16 #include "components/google/core/browser/google_util.h" |
14 #include "components/search/search_switches.h" | 17 #include "components/search/search_switches.h" |
15 #include "components/search_engines/template_url.h" | 18 #include "components/search_engines/template_url.h" |
16 #include "url/gurl.h" | 19 #include "url/gurl.h" |
17 | 20 |
18 namespace search { | 21 namespace search { |
19 | 22 |
20 namespace { | 23 namespace { |
21 | 24 |
22 // Configuration options for Embedded Search. | 25 // Configuration options for Embedded Search. |
23 // EmbeddedSearch field trials are named in such a way that we can parse out | 26 // EmbeddedSearch field trials are named in such a way that we can parse out |
24 // the experiment configuration from the trial's group name in order to give | 27 // the experiment configuration from the trial's group name in order to give |
25 // us maximum flexability in running experiments. | 28 // us maximum flexability in running experiments. |
26 // Field trial groups should be named things like "Group7 espv:2 instant:1". | 29 // Field trial groups should be named things like "Group7 espv:2 instant:1". |
27 // The first token is always GroupN for some integer N, followed by a | 30 // The first token is always GroupN for some integer N, followed by a |
28 // space-delimited list of key:value pairs which correspond to these flags: | 31 // space-delimited list of key:value pairs which correspond to these flags: |
29 const char kEmbeddedPageVersionFlagName[] = "espv"; | 32 const char kEmbeddedPageVersionFlagName[] = "espv"; |
30 | 33 |
31 #if defined(OS_IOS) | 34 #if defined(OS_IOS) |
32 const uint64 kEmbeddedPageVersionDefault = 1; | 35 const uint64_t kEmbeddedPageVersionDefault = 1; |
33 #elif defined(OS_ANDROID) | 36 #elif defined(OS_ANDROID) |
34 const uint64 kEmbeddedPageVersionDefault = 1; | 37 const uint64_t kEmbeddedPageVersionDefault = 1; |
35 // Use this variant to enable EmbeddedSearch SearchBox API in the results page. | 38 // Use this variant to enable EmbeddedSearch SearchBox API in the results page. |
36 const uint64 kEmbeddedSearchEnabledVersion = 2; | 39 const uint64_t kEmbeddedSearchEnabledVersion = 2; |
37 #else | 40 #else |
38 const uint64 kEmbeddedPageVersionDefault = 2; | 41 const uint64_t kEmbeddedPageVersionDefault = 2; |
39 #endif | 42 #endif |
40 | 43 |
41 // Constants for the field trial name and group prefix. | 44 // Constants for the field trial name and group prefix. |
42 // Note in M30 and below this field trial was named "InstantExtended" and in | 45 // Note in M30 and below this field trial was named "InstantExtended" and in |
43 // M31 was renamed to EmbeddedSearch for clarity and cleanliness. Since we | 46 // M31 was renamed to EmbeddedSearch for clarity and cleanliness. Since we |
44 // can't easilly sync up Finch configs with the pushing of this change to | 47 // can't easilly sync up Finch configs with the pushing of this change to |
45 // Dev & Canary, for now the code accepts both names. | 48 // Dev & Canary, for now the code accepts both names. |
46 // TODO(dcblack): Remove the InstantExtended name once M31 hits the Beta | 49 // TODO(dcblack): Remove the InstantExtended name once M31 hits the Beta |
47 // channel. | 50 // channel. |
48 const char kInstantExtendedFieldTrialName[] = "InstantExtended"; | 51 const char kInstantExtendedFieldTrialName[] = "InstantExtended"; |
(...skipping 27 matching lines...) Expand all Loading... |
76 return false; | 79 return false; |
77 #elif defined(OS_ANDROID) | 80 #elif defined(OS_ANDROID) |
78 return EmbeddedSearchPageVersion() == kEmbeddedSearchEnabledVersion; | 81 return EmbeddedSearchPageVersion() == kEmbeddedSearchEnabledVersion; |
79 #else | 82 #else |
80 return true; | 83 return true; |
81 #endif // defined(OS_IOS) | 84 #endif // defined(OS_IOS) |
82 } | 85 } |
83 | 86 |
84 // Determine what embedded search page version to request from the user's | 87 // Determine what embedded search page version to request from the user's |
85 // default search provider. If 0, the embedded search UI should not be enabled. | 88 // default search provider. If 0, the embedded search UI should not be enabled. |
86 uint64 EmbeddedSearchPageVersion() { | 89 uint64_t EmbeddedSearchPageVersion() { |
87 #if defined(OS_ANDROID) | 90 #if defined(OS_ANDROID) |
88 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 91 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
89 switches::kEnableEmbeddedSearchAPI)) { | 92 switches::kEnableEmbeddedSearchAPI)) { |
90 return kEmbeddedSearchEnabledVersion; | 93 return kEmbeddedSearchEnabledVersion; |
91 } | 94 } |
92 #endif | 95 #endif |
93 | 96 |
94 FieldTrialFlags flags; | 97 FieldTrialFlags flags; |
95 if (GetFieldTrialInfo(&flags)) { | 98 if (GetFieldTrialInfo(&flags)) { |
96 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName, | 99 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 const std::string& default_value, | 139 const std::string& default_value, |
137 const FieldTrialFlags& flags) { | 140 const FieldTrialFlags& flags) { |
138 FieldTrialFlags::const_iterator i; | 141 FieldTrialFlags::const_iterator i; |
139 for (i = flags.begin(); i != flags.end(); i++) { | 142 for (i = flags.begin(); i != flags.end(); i++) { |
140 if (i->first == flag) | 143 if (i->first == flag) |
141 return i->second; | 144 return i->second; |
142 } | 145 } |
143 return default_value; | 146 return default_value; |
144 } | 147 } |
145 | 148 |
146 // Given a FieldTrialFlags object, returns the uint64 value of the provided | 149 // Given a FieldTrialFlags object, returns the uint64_t value of the provided |
147 // flag. | 150 // flag. |
148 uint64 GetUInt64ValueForFlagWithDefault(const std::string& flag, | 151 uint64_t GetUInt64ValueForFlagWithDefault(const std::string& flag, |
149 uint64 default_value, | 152 uint64_t default_value, |
150 const FieldTrialFlags& flags) { | 153 const FieldTrialFlags& flags) { |
151 uint64 value; | 154 uint64_t value; |
152 std::string str_value = | 155 std::string str_value = |
153 GetStringValueForFlagWithDefault(flag, std::string(), flags); | 156 GetStringValueForFlagWithDefault(flag, std::string(), flags); |
154 if (base::StringToUint64(str_value, &value)) | 157 if (base::StringToUint64(str_value, &value)) |
155 return value; | 158 return value; |
156 return default_value; | 159 return default_value; |
157 } | 160 } |
158 | 161 |
159 // Given a FieldTrialFlags object, returns the boolean value of the provided | 162 // Given a FieldTrialFlags object, returns the boolean value of the provided |
160 // flag. | 163 // flag. |
161 bool GetBoolValueForFlagWithDefault(const std::string& flag, | 164 bool GetBoolValueForFlagWithDefault(const std::string& flag, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 } | 251 } |
249 | 252 |
250 void EnableQueryExtractionForTesting() { | 253 void EnableQueryExtractionForTesting() { |
251 #if !defined(OS_IOS) && !defined(OS_ANDROID) | 254 #if !defined(OS_IOS) && !defined(OS_ANDROID) |
252 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); | 255 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); |
253 cl->AppendSwitch(switches::kEnableQueryExtraction); | 256 cl->AppendSwitch(switches::kEnableQueryExtraction); |
254 #endif | 257 #endif |
255 } | 258 } |
256 | 259 |
257 } // namespace search | 260 } // namespace search |
OLD | NEW |