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

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

Issue 141893009: Create a new helper function to extract search terms from the URL irrespective of the availablility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 10 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 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 return false; 196 return false;
197 197
198 const InstantService* instant_service = 198 const InstantService* instant_service =
199 InstantServiceFactory::GetForProfile(profile); 199 InstantServiceFactory::GetForProfile(profile);
200 if (!instant_service) 200 if (!instant_service)
201 return false; 201 return false;
202 202
203 return instant_service->IsInstantProcess(process_host->GetID()); 203 return instant_service->IsInstantProcess(process_host->GetID());
204 } 204 }
205 205
206 // Returns true if |url| passes some basic checks that must succeed for it to be 206 // |url| should either have a secure scheme or have a non-HTTPS base URL that
207 // usable as an instant URL: 207 // the user specified using --google-base-url. (This allows testers to use
208 // (1) It contains the search terms replacement key of |template_url|, which is 208 // --google-base-url to point at non-HTTPS servers, which eases testing.)
209 // expected to be the TemplateURL* for the default search provider. 209 bool IsSuitableURLForInstantImpl(const GURL& url,
Jered 2014/02/11 23:33:28 nit: Either drop the Impl or rename this to match
kmadhusu 2014/02/12 00:24:57 Dropped the Impl.
210 // (2) Either it has a secure scheme, or else the user has manually specified a 210 const TemplateURL* template_url) {
211 // --google-base-url and it uses that base URL. (This allows testers to use
212 // --google-base-url to point at non-HTTPS servers, which eases testing.)
213 bool IsSuitableURLForInstant(const GURL& url, const TemplateURL* template_url) {
214 return template_url->HasSearchTermsReplacementKey(url) && 211 return template_url->HasSearchTermsReplacementKey(url) &&
215 (url.SchemeIsSecure() || 212 (url.SchemeIsSecure() ||
216 google_util::StartsWithCommandLineGoogleBaseURL(url)); 213 google_util::StartsWithCommandLineGoogleBaseURL(url));
217 } 214 }
218 215
219 // Returns true if |url| can be used as an Instant URL for |profile|. 216 // Returns true if |url| can be used as an Instant URL for |profile|.
220 bool IsInstantURL(const GURL& url, Profile* profile) { 217 bool IsInstantURL(const GURL& url, Profile* profile) {
221 if (!IsInstantExtendedAPIEnabled()) 218 if (!IsInstantExtendedAPIEnabled())
222 return false; 219 return false;
223 220
224 if (!url.is_valid()) 221 if (!url.is_valid())
225 return false; 222 return false;
226 223
227 const GURL new_tab_url(GetNewTabPageURL(profile)); 224 const GURL new_tab_url(GetNewTabPageURL(profile));
228 if (new_tab_url.is_valid() && 225 if (new_tab_url.is_valid() &&
229 search::MatchesOriginAndPath(url, new_tab_url)) 226 search::MatchesOriginAndPath(url, new_tab_url))
230 return true; 227 return true;
231 228
232 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); 229 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
233 if (!template_url) 230 if (!template_url)
234 return false; 231 return false;
235 232
236 if (!IsSuitableURLForInstant(url, template_url)) 233 if (!IsSuitableURLForInstantImpl(url, template_url))
237 return false; 234 return false;
238 235
239 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref(); 236 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref();
240 const GURL instant_url = 237 const GURL instant_url =
241 TemplateURLRefToGURL(instant_url_ref, kDisableStartMargin, false, false); 238 TemplateURLRefToGURL(instant_url_ref, kDisableStartMargin, false, false);
242 if (!instant_url.is_valid()) 239 if (!instant_url.is_valid())
243 return false; 240 return false;
244 241
245 if (search::MatchesOriginAndPath(url, instant_url)) 242 if (search::MatchesOriginAndPath(url, instant_url))
246 return true; 243 return true;
(...skipping 19 matching lines...) Expand all
266 if (!IsRenderedInInstantProcess(contents, profile) && 263 if (!IsRenderedInInstantProcess(contents, profile) &&
267 ((entry == contents->GetController().GetLastCommittedEntry()) || 264 ((entry == contents->GetController().GetLastCommittedEntry()) ||
268 !ShouldAssignURLToInstantRenderer(entry->GetURL(), profile))) 265 !ShouldAssignURLToInstantRenderer(entry->GetURL(), profile)))
269 return base::string16(); 266 return base::string16();
270 #endif // !defined(OS_IOS) && !defined(OS_ANDROID) 267 #endif // !defined(OS_IOS) && !defined(OS_ANDROID)
271 // Check to see if search terms have already been extracted. 268 // Check to see if search terms have already been extracted.
272 base::string16 search_terms = GetSearchTermsFromNavigationEntry(entry); 269 base::string16 search_terms = GetSearchTermsFromNavigationEntry(entry);
273 if (!search_terms.empty()) 270 if (!search_terms.empty())
274 return search_terms; 271 return search_terms;
275 272
273 if (!IsQueryExtractionAllowedForURL(profile, entry->GetVirtualURL()))
274 return base::string16();
275
276 // Otherwise, extract from the URL. 276 // Otherwise, extract from the URL.
277 return GetSearchTermsFromURL(profile, entry->GetVirtualURL()); 277 return ExtractSearchTermsFromURL(profile, entry->GetVirtualURL());
278 } 278 }
279 279
280 bool IsURLAllowedForSupervisedUser(const GURL& url, Profile* profile) { 280 bool IsURLAllowedForSupervisedUser(const GURL& url, Profile* profile) {
281 #if defined(ENABLE_MANAGED_USERS) 281 #if defined(ENABLE_MANAGED_USERS)
282 ManagedUserService* managed_user_service = 282 ManagedUserService* managed_user_service =
283 ManagedUserServiceFactory::GetForProfile(profile); 283 ManagedUserServiceFactory::GetForProfile(profile);
284 ManagedModeURLFilter* url_filter = 284 ManagedModeURLFilter* url_filter =
285 managed_user_service->GetURLFilterForUIThread(); 285 managed_user_service->GetURLFilterForUIThread();
286 if (url_filter->GetFilteringBehaviorForURL(url) == 286 if (url_filter->GetFilteringBehaviorForURL(url) ==
287 ManagedModeURLFilter::BLOCK) { 287 ManagedModeURLFilter::BLOCK) {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 374 const CommandLine* command_line = CommandLine::ForCurrentProcess();
375 if (command_line->HasSwitch(switches::kEnableQueryExtraction)) 375 if (command_line->HasSwitch(switches::kEnableQueryExtraction))
376 return true; 376 return true;
377 377
378 FieldTrialFlags flags; 378 FieldTrialFlags flags;
379 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( 379 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault(
380 kEnableQueryExtractionFlagName, false, flags); 380 kEnableQueryExtractionFlagName, false, flags);
381 #endif // defined(OS_IOS) || defined(OS_ANDROID) 381 #endif // defined(OS_IOS) || defined(OS_ANDROID)
382 } 382 }
383 383
384 base::string16 GetSearchTermsFromURL(Profile* profile, const GURL& url) { 384 base::string16 ExtractSearchTermsFromURL(Profile* profile, const GURL& url) {
385 if (url.is_valid() && url == GetSearchResultPrefetchBaseURL(profile)) { 385 if (url.is_valid() && url == GetSearchResultPrefetchBaseURL(profile)) {
386 // InstantSearchPrerenderer has the search query for the Instant search base 386 // InstantSearchPrerenderer has the search query for the Instant search base
387 // page. 387 // page.
388 InstantSearchPrerenderer* prerenderer = 388 InstantSearchPrerenderer* prerenderer =
389 InstantSearchPrerenderer::GetForProfile(profile); 389 InstantSearchPrerenderer::GetForProfile(profile);
390 DCHECK(prerenderer); 390 DCHECK(prerenderer);
391 return prerenderer->get_last_query(); 391 return prerenderer->get_last_query();
392 } 392 }
393 393
394 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
394 base::string16 search_terms; 395 base::string16 search_terms;
395 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); 396 if (template_url)
396 if (template_url && IsSuitableURLForInstant(url, template_url))
397 template_url->ExtractSearchTermsFromURL(url, &search_terms); 397 template_url->ExtractSearchTermsFromURL(url, &search_terms);
398 return search_terms; 398 return search_terms;
399 } 399 }
400 400
401 bool IsQueryExtractionAllowedForURL(Profile* profile, const GURL& url) {
402 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
403 return template_url && IsSuitableURLForInstantImpl(url, template_url);
404 }
405
401 base::string16 GetSearchTermsFromNavigationEntry( 406 base::string16 GetSearchTermsFromNavigationEntry(
402 const content::NavigationEntry* entry) { 407 const content::NavigationEntry* entry) {
403 base::string16 search_terms; 408 base::string16 search_terms;
404 if (entry) 409 if (entry)
405 entry->GetExtraData(sessions::kSearchTermsKey, &search_terms); 410 entry->GetExtraData(sessions::kSearchTermsKey, &search_terms);
406 return search_terms; 411 return search_terms;
407 } 412 }
408 413
409 base::string16 GetSearchTerms(const content::WebContents* contents) { 414 base::string16 GetSearchTerms(const content::WebContents* contents) {
410 if (!contents) 415 if (!contents)
(...skipping 29 matching lines...) Expand all
440 url.host() == chrome::kChromeSearchOnlineNtpHost); 445 url.host() == chrome::kChromeSearchOnlineNtpHost);
441 } 446 }
442 447
443 bool IsNTPURL(const GURL& url, Profile* profile) { 448 bool IsNTPURL(const GURL& url, Profile* profile) {
444 if (!url.is_valid()) 449 if (!url.is_valid())
445 return false; 450 return false;
446 451
447 if (!IsInstantExtendedAPIEnabled()) 452 if (!IsInstantExtendedAPIEnabled())
448 return url == GURL(chrome::kChromeUINewTabURL); 453 return url == GURL(chrome::kChromeUINewTabURL);
449 454
455 const base::string16 search_terms = ExtractSearchTermsFromURL(profile, url);
450 return profile && 456 return profile &&
451 ((IsInstantURL(url, profile) && 457 ((IsInstantURL(url, profile) && search_terms.empty()) ||
452 GetSearchTermsFromURL(profile, url).empty()) ||
453 url == GURL(chrome::kChromeSearchLocalNtpUrl)); 458 url == GURL(chrome::kChromeSearchLocalNtpUrl));
454 } 459 }
455 460
456 bool IsInstantNTP(const content::WebContents* contents) { 461 bool IsInstantNTP(const content::WebContents* contents) {
457 if (!contents) 462 if (!contents)
458 return false; 463 return false;
459 464
460 return NavEntryIsInstantNTP(contents, 465 return NavEntryIsInstantNTP(contents,
461 contents->GetController().GetVisibleEntry()); 466 contents->GetController().GetVisibleEntry());
462 } 467 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 499
495 GURL instant_url = 500 GURL instant_url =
496 TemplateURLRefToGURL(template_url->instant_url_ref(), start_margin, true, 501 TemplateURLRefToGURL(template_url->instant_url_ref(), start_margin, true,
497 force_instant_results); 502 force_instant_results);
498 if (!instant_url.is_valid() || 503 if (!instant_url.is_valid() ||
499 !template_url->HasSearchTermsReplacementKey(instant_url)) 504 !template_url->HasSearchTermsReplacementKey(instant_url))
500 return GURL(); 505 return GURL();
501 506
502 // Extended mode requires HTTPS. Force it unless the base URL was overridden 507 // Extended mode requires HTTPS. Force it unless the base URL was overridden
503 // on the command line, in which case we allow HTTP (see comments on 508 // on the command line, in which case we allow HTTP (see comments on
504 // IsSuitableURLForInstant()). 509 // IsSuitableURLForInstantImpl()).
505 if (!instant_url.SchemeIsSecure() && 510 if (!instant_url.SchemeIsSecure() &&
506 !google_util::StartsWithCommandLineGoogleBaseURL(instant_url)) { 511 !google_util::StartsWithCommandLineGoogleBaseURL(instant_url)) {
507 GURL::Replacements replacements; 512 GURL::Replacements replacements;
508 const std::string secure_scheme(content::kHttpsScheme); 513 const std::string secure_scheme(content::kHttpsScheme);
509 replacements.SetSchemeStr(secure_scheme); 514 replacements.SetSchemeStr(secure_scheme);
510 instant_url = instant_url.ReplaceComponents(replacements); 515 instant_url = instant_url.ReplaceComponents(replacements);
511 } 516 }
512 517
513 if (!IsURLAllowedForSupervisedUser(instant_url, profile)) 518 if (!IsURLAllowedForSupervisedUser(instant_url, profile))
514 return GURL(); 519 return GURL();
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 813
809 // Given a FieldTrialFlags object, returns the boolean value of the provided 814 // Given a FieldTrialFlags object, returns the boolean value of the provided
810 // flag. 815 // flag.
811 bool GetBoolValueForFlagWithDefault(const std::string& flag, 816 bool GetBoolValueForFlagWithDefault(const std::string& flag,
812 bool default_value, 817 bool default_value,
813 const FieldTrialFlags& flags) { 818 const FieldTrialFlags& flags) {
814 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags); 819 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags);
815 } 820 }
816 821
817 } // namespace chrome 822 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698