Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Side by Side Diff: chrome/browser/search/search.cc

Issue 17303003: InstantExtended: hook up InstantTab in incognito. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/search/search.h" 5 #include "chrome/browser/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/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 state = INSTANT_EXTENDED_OPT_IN_LOCAL; 142 state = INSTANT_EXTENDED_OPT_IN_LOCAL;
143 } else if (command_line->HasSwitch(switches::kEnableInstantExtendedAPI)) { 143 } else if (command_line->HasSwitch(switches::kEnableInstantExtendedAPI)) {
144 state = INSTANT_EXTENDED_OPT_IN; 144 state = INSTANT_EXTENDED_OPT_IN;
145 } 145 }
146 146
147 UMA_HISTOGRAM_ENUMERATION("InstantExtended.OptInState", state, 147 UMA_HISTOGRAM_ENUMERATION("InstantExtended.OptInState", state,
148 INSTANT_EXTENDED_OPT_IN_STATE_ENUM_COUNT); 148 INSTANT_EXTENDED_OPT_IN_STATE_ENUM_COUNT);
149 } 149 }
150 } 150 }
151 151
152 // Helper for EmbeddedSearchPageVersion. Does not check if in incognito mode.
153 uint64 EmbeddedSearchPageVersionHelper() {
154 // No server-side changes if the local-only Instant Extended is enabled.
155 if (IsLocalOnlyInstantExtendedAPIEnabled())
156 return kEmbeddedPageVersionDisabled;
157
158 // Check the command-line/about:flags setting first, which should have
159 // precedence and allows the trial to not be reported (if it's never queried).
160 const CommandLine* command_line = CommandLine::ForCurrentProcess();
161 if (command_line->HasSwitch(switches::kDisableInstantExtendedAPI))
162 return kEmbeddedPageVersionDisabled;
163 if (command_line->HasSwitch(switches::kEnableInstantExtendedAPI)) {
164 // The user has set the about:flags switch to Enabled - give the default
165 // UI version.
166 return kEmbeddedPageVersionDefault;
167 }
168
169 FieldTrialFlags flags;
170 if (GetFieldTrialInfo(
171 base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
172 &flags, NULL)) {
173 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName,
174 kEmbeddedPageVersionDefault,
175 flags);
176 }
177 return kEmbeddedPageVersionDisabled;
178 }
179
180 // Returns true if |contents| is rendered inside the Instant process for 152 // Returns true if |contents| is rendered inside the Instant process for
181 // |profile|. 153 // |profile|.
182 bool IsRenderedInInstantProcess(const content::WebContents* contents, 154 bool IsRenderedInInstantProcess(const content::WebContents* contents,
183 Profile* profile) { 155 Profile* profile) {
184 const content::RenderProcessHost* process_host = 156 const content::RenderProcessHost* process_host =
185 contents->GetRenderProcessHost(); 157 contents->GetRenderProcessHost();
186 if (!process_host) 158 if (!process_host)
187 return false; 159 return false;
188 160
189 const InstantService* instant_service = 161 const InstantService* instant_service =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 return true; 199 return true;
228 200
229 if (extended_api_enabled && MatchesAnySearchURL(effective_url, template_url)) 201 if (extended_api_enabled && MatchesAnySearchURL(effective_url, template_url))
230 return true; 202 return true;
231 203
232 return false; 204 return false;
233 } 205 }
234 206
235 string16 GetSearchTermsImpl(const content::WebContents* contents, 207 string16 GetSearchTermsImpl(const content::WebContents* contents,
236 const content::NavigationEntry* entry) { 208 const content::NavigationEntry* entry) {
209 if (!IsQueryExtractionEnabled())
210 return string16();
211
237 // For security reasons, don't extract search terms if the page is not being 212 // For security reasons, don't extract search terms if the page is not being
238 // rendered in the privileged Instant renderer process. This is to protect 213 // rendered in the privileged Instant renderer process. This is to protect
239 // against a malicious page somehow scripting the search results page and 214 // against a malicious page somehow scripting the search results page and
240 // faking search terms in the URL. Random pages can't get into the Instant 215 // faking search terms in the URL. Random pages can't get into the Instant
241 // renderer and scripting doesn't work cross-process, so if the page is in 216 // renderer and scripting doesn't work cross-process, so if the page is in
242 // the Instant process, we know it isn't being exploited. 217 // the Instant process, we know it isn't being exploited.
243 // Since iOS and Android doesn't use the instant framework, these checks are 218 // Since iOS and Android doesn't use the instant framework, these checks are
244 // disabled for the two platforms. 219 // disabled for the two platforms.
245 Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); 220 Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
246
247 if (!IsQueryExtractionEnabled(profile))
248 return string16();
249
250 #if !defined(OS_IOS) && !defined(OS_ANDROID) 221 #if !defined(OS_IOS) && !defined(OS_ANDROID)
251 if (!IsRenderedInInstantProcess(contents, profile) && 222 if (!IsRenderedInInstantProcess(contents, profile) &&
252 (contents->GetController().GetLastCommittedEntry() == entry || 223 (contents->GetController().GetLastCommittedEntry() == entry ||
253 !ShouldAssignURLToInstantRenderer(entry->GetURL(), profile))) 224 !ShouldAssignURLToInstantRenderer(entry->GetURL(), profile)))
254 return string16(); 225 return string16();
255 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) 226 #endif // !defined(OS_IOS) && !defined(OS_ANDROID)
256 // Check to see if search terms have already been extracted. 227 // Check to see if search terms have already been extracted.
257 string16 search_terms = GetSearchTermsFromNavigationEntry(entry); 228 string16 search_terms = GetSearchTermsFromNavigationEntry(entry);
258 if (!search_terms.empty()) 229 if (!search_terms.empty())
259 return search_terms; 230 return search_terms;
260 231
261 // Otherwise, extract from the URL. 232 // Otherwise, extract from the URL.
262 return GetSearchTermsFromURL(profile, entry->GetVirtualURL()); 233 return GetSearchTermsFromURL(profile, entry->GetVirtualURL());
263 } 234 }
264 235
265 } // namespace 236 } // namespace
266 237
267 // Negative start-margin values prevent the "es_sm" parameter from being used. 238 // Negative start-margin values prevent the "es_sm" parameter from being used.
268 const int kDisableStartMargin = -1; 239 const int kDisableStartMargin = -1;
269 240
270 bool IsInstantExtendedAPIEnabled() { 241 bool IsInstantExtendedAPIEnabled() {
271 #if defined(OS_IOS) || defined(OS_ANDROID) 242 #if defined(OS_IOS) || defined(OS_ANDROID)
272 return false; 243 return false;
273 #else 244 #else
274 // TODO(dougw): Switch to EmbeddedSearchPageVersion after the proper 245 // On desktop, query extraction is part of Instant extended, so if one is
275 // solution to Issue 232065 has been implemented. 246 // enabled, the other is too.
276 return EmbeddedSearchPageVersionHelper() || 247 return IsQueryExtractionEnabled() || IsLocalOnlyInstantExtendedAPIEnabled();
277 IsLocalOnlyInstantExtendedAPIEnabled();
278 #endif // defined(OS_IOS) || defined(OS_ANDROID) 248 #endif // defined(OS_IOS) || defined(OS_ANDROID)
279 } 249 }
280 250
281 // Determine what embedded search page version to request from the user's 251 // Determine what embedded search page version to request from the user's
282 // default search provider. If 0, the embedded search UI should not be enabled. 252 // default search provider. If 0, the embedded search UI should not be enabled.
283 uint64 EmbeddedSearchPageVersion(Profile* profile) { 253 uint64 EmbeddedSearchPageVersion() {
284 // Disable for incognito. Temporary fix for Issue 232065. 254 // No server-side changes if the local-only Instant Extended is enabled.
285 #if !defined(OS_IOS) && !defined(OS_ANDROID) 255 if (IsLocalOnlyInstantExtendedAPIEnabled())
286 if (!profile || profile->IsOffTheRecord())
287 return kEmbeddedPageVersionDisabled; 256 return kEmbeddedPageVersionDisabled;
288 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) 257
289 return EmbeddedSearchPageVersionHelper(); 258 // Check the command-line/about:flags setting first, which should have
259 // precedence and allows the trial to not be reported (if it's never queried).
260 const CommandLine* command_line = CommandLine::ForCurrentProcess();
261 if (command_line->HasSwitch(switches::kDisableInstantExtendedAPI))
262 return kEmbeddedPageVersionDisabled;
263 if (command_line->HasSwitch(switches::kEnableInstantExtendedAPI)) {
264 // The user has set the about:flags switch to Enabled - give the default
265 // UI version.
266 return kEmbeddedPageVersionDefault;
267 }
268
269 FieldTrialFlags flags;
270 if (GetFieldTrialInfo(
271 base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
272 &flags, NULL)) {
273 return GetUInt64ValueForFlagWithDefault(kEmbeddedPageVersionFlagName,
274 kEmbeddedPageVersionDefault,
275 flags);
276 }
277 return kEmbeddedPageVersionDisabled;
290 } 278 }
291 279
292 bool IsQueryExtractionEnabled(Profile* profile) { 280 bool IsQueryExtractionEnabled() {
293 return EmbeddedSearchPageVersion(profile) != kEmbeddedPageVersionDisabled; 281 return EmbeddedSearchPageVersion() != kEmbeddedPageVersionDisabled;
294 } 282 }
295 283
296 bool IsLocalOnlyInstantExtendedAPIEnabled() { 284 bool IsLocalOnlyInstantExtendedAPIEnabled() {
297 RecordInstantExtendedOptInState(); 285 RecordInstantExtendedOptInState();
298 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 286 const CommandLine* command_line = CommandLine::ForCurrentProcess();
299 if (command_line->HasSwitch(switches::kDisableLocalOnlyInstantExtendedAPI) || 287 if (command_line->HasSwitch(switches::kDisableLocalOnlyInstantExtendedAPI) ||
300 command_line->HasSwitch(switches::kDisableInstantExtendedAPI)) { 288 command_line->HasSwitch(switches::kDisableInstantExtendedAPI)) {
301 return false; 289 return false;
302 } 290 }
303 if (command_line->HasSwitch(switches::kEnableLocalOnlyInstantExtendedAPI)) 291 if (command_line->HasSwitch(switches::kEnableLocalOnlyInstantExtendedAPI))
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 for (size_t i = 0; i < items_b.size(); ++i) { 742 for (size_t i = 0; i < items_b.size(); ++i) {
755 if (items_b[i].url != items_a[i].url || 743 if (items_b[i].url != items_a[i].url ||
756 items_b[i].title != items_a[i].title) { 744 items_b[i].title != items_a[i].title) {
757 return false; 745 return false;
758 } 746 }
759 } 747 }
760 return true; 748 return true;
761 } 749 }
762 750
763 } // namespace chrome 751 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698