OLD | NEW |
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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 TemplateURLService* template_url_service = | 163 TemplateURLService* template_url_service = |
164 TemplateURLServiceFactory::GetForProfile(profile); | 164 TemplateURLServiceFactory::GetForProfile(profile); |
165 if (template_url_service) | 165 if (template_url_service) |
166 return template_url_service->GetDefaultSearchProvider(); | 166 return template_url_service->GetDefaultSearchProvider(); |
167 } | 167 } |
168 return NULL; | 168 return NULL; |
169 } | 169 } |
170 | 170 |
171 GURL TemplateURLRefToGURL(const TemplateURLRef& ref, | 171 GURL TemplateURLRefToGURL(const TemplateURLRef& ref, |
172 const SearchTermsData& search_terms_data, | 172 const SearchTermsData& search_terms_data, |
173 int start_margin, | |
174 bool append_extra_query_params, | 173 bool append_extra_query_params, |
175 bool force_instant_results) { | 174 bool force_instant_results) { |
176 TemplateURLRef::SearchTermsArgs search_terms_args = | 175 TemplateURLRef::SearchTermsArgs search_terms_args = |
177 TemplateURLRef::SearchTermsArgs(base::string16()); | 176 TemplateURLRef::SearchTermsArgs(base::string16()); |
178 search_terms_args.omnibox_start_margin = start_margin; | |
179 search_terms_args.append_extra_query_params = append_extra_query_params; | 177 search_terms_args.append_extra_query_params = append_extra_query_params; |
180 search_terms_args.force_instant_results = force_instant_results; | 178 search_terms_args.force_instant_results = force_instant_results; |
181 return GURL(ref.ReplaceSearchTerms(search_terms_args, search_terms_data)); | 179 return GURL(ref.ReplaceSearchTerms(search_terms_args, search_terms_data)); |
182 } | 180 } |
183 | 181 |
184 bool MatchesAnySearchURL(const GURL& url, | 182 bool MatchesAnySearchURL(const GURL& url, |
185 TemplateURL* template_url, | 183 TemplateURL* template_url, |
186 const SearchTermsData& search_terms_data) { | 184 const SearchTermsData& search_terms_data) { |
187 GURL search_url = | 185 GURL search_url = TemplateURLRefToGURL(template_url->url_ref(), |
188 TemplateURLRefToGURL(template_url->url_ref(), search_terms_data, | 186 search_terms_data, false, false); |
189 kDisableStartMargin, false, false); | |
190 if (search_url.is_valid() && | 187 if (search_url.is_valid() && |
191 search::MatchesOriginAndPath(url, search_url)) | 188 search::MatchesOriginAndPath(url, search_url)) |
192 return true; | 189 return true; |
193 | 190 |
194 // "URLCount() - 1" because we already tested url_ref above. | 191 // "URLCount() - 1" because we already tested url_ref above. |
195 for (size_t i = 0; i < template_url->URLCount() - 1; ++i) { | 192 for (size_t i = 0; i < template_url->URLCount() - 1; ++i) { |
196 TemplateURLRef ref(template_url, i); | 193 TemplateURLRef ref(template_url, i); |
197 search_url = TemplateURLRefToGURL(ref, search_terms_data, | 194 search_url = TemplateURLRefToGURL(ref, search_terms_data, false, false); |
198 kDisableStartMargin, false, false); | |
199 if (search_url.is_valid() && | 195 if (search_url.is_valid() && |
200 search::MatchesOriginAndPath(url, search_url)) | 196 search::MatchesOriginAndPath(url, search_url)) |
201 return true; | 197 return true; |
202 } | 198 } |
203 | 199 |
204 return false; | 200 return false; |
205 } | 201 } |
206 | 202 |
207 | 203 |
208 | 204 |
(...skipping 22 matching lines...) Expand all Loading... |
231 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); | 227 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); |
232 if (!template_url) | 228 if (!template_url) |
233 return false; | 229 return false; |
234 | 230 |
235 if (!IsSuitableURLForInstant(url, template_url)) | 231 if (!IsSuitableURLForInstant(url, template_url)) |
236 return false; | 232 return false; |
237 | 233 |
238 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref(); | 234 const TemplateURLRef& instant_url_ref = template_url->instant_url_ref(); |
239 UIThreadSearchTermsData search_terms_data(profile); | 235 UIThreadSearchTermsData search_terms_data(profile); |
240 const GURL instant_url = TemplateURLRefToGURL( | 236 const GURL instant_url = TemplateURLRefToGURL( |
241 instant_url_ref, search_terms_data, kDisableStartMargin, false, false); | 237 instant_url_ref, search_terms_data, false, false); |
242 if (!instant_url.is_valid()) | 238 if (!instant_url.is_valid()) |
243 return false; | 239 return false; |
244 | 240 |
245 if (search::MatchesOriginAndPath(url, instant_url)) | 241 if (search::MatchesOriginAndPath(url, instant_url)) |
246 return true; | 242 return true; |
247 | 243 |
248 return IsQueryExtractionEnabled() && | 244 return IsQueryExtractionEnabled() && |
249 MatchesAnySearchURL(url, template_url, search_terms_data); | 245 MatchesAnySearchURL(url, template_url, search_terms_data); |
250 } | 246 } |
251 | 247 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 : url(url), state(state) {} | 310 : url(url), state(state) {} |
315 | 311 |
316 static NewTabURLDetails ForProfile(Profile* profile) { | 312 static NewTabURLDetails ForProfile(Profile* profile) { |
317 const GURL local_url(chrome::kChromeSearchLocalNtpUrl); | 313 const GURL local_url(chrome::kChromeSearchLocalNtpUrl); |
318 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); | 314 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); |
319 if (!profile || !template_url) | 315 if (!profile || !template_url) |
320 return NewTabURLDetails(local_url, NEW_TAB_URL_BAD); | 316 return NewTabURLDetails(local_url, NEW_TAB_URL_BAD); |
321 | 317 |
322 GURL search_provider_url = TemplateURLRefToGURL( | 318 GURL search_provider_url = TemplateURLRefToGURL( |
323 template_url->new_tab_url_ref(), UIThreadSearchTermsData(profile), | 319 template_url->new_tab_url_ref(), UIThreadSearchTermsData(profile), |
324 kDisableStartMargin, false, false); | 320 false, false); |
325 NewTabURLState state = IsValidNewTabURL(profile, search_provider_url); | 321 NewTabURLState state = IsValidNewTabURL(profile, search_provider_url); |
326 switch (state) { | 322 switch (state) { |
327 case NEW_TAB_URL_VALID: | 323 case NEW_TAB_URL_VALID: |
328 // We can use the search provider's page. | 324 // We can use the search provider's page. |
329 return NewTabURLDetails(search_provider_url, state); | 325 return NewTabURLDetails(search_provider_url, state); |
330 case NEW_TAB_URL_INCOGNITO: | 326 case NEW_TAB_URL_INCOGNITO: |
331 // Incognito has its own New Tab. | 327 // Incognito has its own New Tab. |
332 return NewTabURLDetails(GURL(), state); | 328 return NewTabURLDetails(GURL(), state); |
333 default: | 329 default: |
334 // Use the local New Tab otherwise. | 330 // Use the local New Tab otherwise. |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 GURL new_tab_url(GetNewTabPageURL(profile)); | 516 GURL new_tab_url(GetNewTabPageURL(profile)); |
521 return new_tab_url.is_valid() && | 517 return new_tab_url.is_valid() && |
522 search::MatchesOriginAndPath(entry->GetURL(), new_tab_url); | 518 search::MatchesOriginAndPath(entry->GetURL(), new_tab_url); |
523 } | 519 } |
524 | 520 |
525 bool IsSuggestPrefEnabled(Profile* profile) { | 521 bool IsSuggestPrefEnabled(Profile* profile) { |
526 return profile && !profile->IsOffTheRecord() && profile->GetPrefs() && | 522 return profile && !profile->IsOffTheRecord() && profile->GetPrefs() && |
527 profile->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled); | 523 profile->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled); |
528 } | 524 } |
529 | 525 |
530 GURL GetInstantURL(Profile* profile, int start_margin, | 526 GURL GetInstantURL(Profile* profile, bool force_instant_results) { |
531 bool force_instant_results) { | |
532 if (!IsInstantExtendedAPIEnabled() || !IsSuggestPrefEnabled(profile)) | 527 if (!IsInstantExtendedAPIEnabled() || !IsSuggestPrefEnabled(profile)) |
533 return GURL(); | 528 return GURL(); |
534 | 529 |
535 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); | 530 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); |
536 if (!template_url) | 531 if (!template_url) |
537 return GURL(); | 532 return GURL(); |
538 | 533 |
539 GURL instant_url = TemplateURLRefToGURL( | 534 GURL instant_url = TemplateURLRefToGURL( |
540 template_url->instant_url_ref(), UIThreadSearchTermsData(profile), | 535 template_url->instant_url_ref(), UIThreadSearchTermsData(profile), |
541 start_margin, true, force_instant_results); | 536 true, force_instant_results); |
542 if (!instant_url.is_valid() || | 537 if (!instant_url.is_valid() || |
543 !template_url->HasSearchTermsReplacementKey(instant_url)) | 538 !template_url->HasSearchTermsReplacementKey(instant_url)) |
544 return GURL(); | 539 return GURL(); |
545 | 540 |
546 // Extended mode requires HTTPS. Force it unless the base URL was overridden | 541 // Extended mode requires HTTPS. Force it unless the base URL was overridden |
547 // on the command line, in which case we allow HTTP (see comments on | 542 // on the command line, in which case we allow HTTP (see comments on |
548 // IsSuitableURLForInstant()). | 543 // IsSuitableURLForInstant()). |
549 if (!instant_url.SchemeIsSecure() && | 544 if (!instant_url.SchemeIsSecure() && |
550 !google_util::StartsWithCommandLineGoogleBaseURL(instant_url)) { | 545 !google_util::StartsWithCommandLineGoogleBaseURL(instant_url)) { |
551 GURL::Replacements replacements; | 546 GURL::Replacements replacements; |
(...skipping 19 matching lines...) Expand all Loading... |
571 | 566 |
572 // Returns URLs associated with the default search engine for |profile|. | 567 // Returns URLs associated with the default search engine for |profile|. |
573 std::vector<GURL> GetSearchURLs(Profile* profile) { | 568 std::vector<GURL> GetSearchURLs(Profile* profile) { |
574 std::vector<GURL> result; | 569 std::vector<GURL> result; |
575 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); | 570 TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile); |
576 if (!template_url) | 571 if (!template_url) |
577 return result; | 572 return result; |
578 for (size_t i = 0; i < template_url->URLCount(); ++i) { | 573 for (size_t i = 0; i < template_url->URLCount(); ++i) { |
579 TemplateURLRef ref(template_url, i); | 574 TemplateURLRef ref(template_url, i); |
580 result.push_back(TemplateURLRefToGURL(ref, UIThreadSearchTermsData(profile), | 575 result.push_back(TemplateURLRefToGURL(ref, UIThreadSearchTermsData(profile), |
581 kDisableStartMargin, false, false)); | 576 false, false)); |
582 } | 577 } |
583 return result; | 578 return result; |
584 } | 579 } |
585 | 580 |
586 GURL GetNewTabPageURL(Profile* profile) { | 581 GURL GetNewTabPageURL(Profile* profile) { |
587 return NewTabURLDetails::ForProfile(profile).url; | 582 return NewTabURLDetails::ForProfile(profile).url; |
588 } | 583 } |
589 | 584 |
590 GURL GetSearchResultPrefetchBaseURL(Profile* profile) { | 585 GURL GetSearchResultPrefetchBaseURL(Profile* profile) { |
591 return ShouldPrefetchSearchResults() ? | 586 return ShouldPrefetchSearchResults() ? GetInstantURL(profile, true) : GURL(); |
592 GetInstantURL(profile, kDisableStartMargin, true) : GURL(); | |
593 } | 587 } |
594 | 588 |
595 bool ShouldPrefetchSearchResults() { | 589 bool ShouldPrefetchSearchResults() { |
596 if (!IsInstantExtendedAPIEnabled()) | 590 if (!IsInstantExtendedAPIEnabled()) |
597 return false; | 591 return false; |
598 | 592 |
599 if (CommandLine::ForCurrentProcess()->HasSwitch( | 593 if (CommandLine::ForCurrentProcess()->HasSwitch( |
600 switches::kPrefetchSearchResults)) { | 594 switches::kPrefetchSearchResults)) { |
601 return true; | 595 return true; |
602 } | 596 } |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
859 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags); | 853 return !!GetUInt64ValueForFlagWithDefault(flag, default_value ? 1 : 0, flags); |
860 } | 854 } |
861 | 855 |
862 bool ShouldUseAltInstantURL() { | 856 bool ShouldUseAltInstantURL() { |
863 FieldTrialFlags flags; | 857 FieldTrialFlags flags; |
864 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( | 858 return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( |
865 kUseAltInstantURL, false, flags); | 859 kUseAltInstantURL, false, flags); |
866 } | 860 } |
867 | 861 |
868 } // namespace chrome | 862 } // namespace chrome |
OLD | NEW |