| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/omnibox/chrome_omnibox_client.h" | 5 #include "chrome/browser/ui/omnibox/chrome_omnibox_client.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 // highly or if kAllowPrefetchNonDefaultMatch field trial is enabled, we'll | 52 // highly or if kAllowPrefetchNonDefaultMatch field trial is enabled, we'll |
| 53 // return it. | 53 // return it. |
| 54 // | 54 // |
| 55 // If the kAllowPrefetchNonDefaultMatch field trial is enabled we return the | 55 // If the kAllowPrefetchNonDefaultMatch field trial is enabled we return the |
| 56 // prefetch suggestion even if it is not the default match. Otherwise we only | 56 // prefetch suggestion even if it is not the default match. Otherwise we only |
| 57 // care about matches that are the default or the second entry in the dropdown | 57 // care about matches that are the default or the second entry in the dropdown |
| 58 // (which can happen for non-default matches when a top verbatim match is | 58 // (which can happen for non-default matches when a top verbatim match is |
| 59 // shown); for other matches, we think the likelihood of the user selecting | 59 // shown); for other matches, we think the likelihood of the user selecting |
| 60 // them is low enough that prefetching isn't worth doing. | 60 // them is low enough that prefetching isn't worth doing. |
| 61 const AutocompleteMatch* GetMatchToPrefetch(const AutocompleteResult& result) { | 61 const AutocompleteMatch* GetMatchToPrefetch(const AutocompleteResult& result) { |
| 62 if (chrome::ShouldAllowPrefetchNonDefaultMatch()) { | 62 if (search::ShouldAllowPrefetchNonDefaultMatch()) { |
| 63 const AutocompleteResult::const_iterator prefetch_match = std::find_if( | 63 const AutocompleteResult::const_iterator prefetch_match = std::find_if( |
| 64 result.begin(), result.end(), SearchProvider::ShouldPrefetch); | 64 result.begin(), result.end(), SearchProvider::ShouldPrefetch); |
| 65 return prefetch_match != result.end() ? &(*prefetch_match) : NULL; | 65 return prefetch_match != result.end() ? &(*prefetch_match) : NULL; |
| 66 } | 66 } |
| 67 | 67 |
| 68 // If the default match should be prefetched, do that. | 68 // If the default match should be prefetched, do that. |
| 69 const auto default_match = result.default_match(); | 69 const auto default_match = result.default_match(); |
| 70 if ((default_match != result.end()) && | 70 if ((default_match != result.end()) && |
| 71 SearchProvider::ShouldPrefetch(*default_match)) | 71 SearchProvider::ShouldPrefetch(*default_match)) |
| 72 return &(*default_match); | 72 return &(*default_match); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 | 129 |
| 130 bool ChromeOmniboxClient::CurrentPageExists() const { | 130 bool ChromeOmniboxClient::CurrentPageExists() const { |
| 131 return (controller_->GetWebContents() != NULL); | 131 return (controller_->GetWebContents() != NULL); |
| 132 } | 132 } |
| 133 | 133 |
| 134 const GURL& ChromeOmniboxClient::GetURL() const { | 134 const GURL& ChromeOmniboxClient::GetURL() const { |
| 135 return controller_->GetWebContents()->GetVisibleURL(); | 135 return controller_->GetWebContents()->GetVisibleURL(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 bool ChromeOmniboxClient::IsInstantNTP() const { | 138 bool ChromeOmniboxClient::IsInstantNTP() const { |
| 139 return chrome::IsInstantNTP(controller_->GetWebContents()); | 139 return search::IsInstantNTP(controller_->GetWebContents()); |
| 140 } | 140 } |
| 141 | 141 |
| 142 bool ChromeOmniboxClient::IsSearchResultsPage() const { | 142 bool ChromeOmniboxClient::IsSearchResultsPage() const { |
| 143 Profile* profile = Profile::FromBrowserContext( | 143 Profile* profile = Profile::FromBrowserContext( |
| 144 controller_->GetWebContents()->GetBrowserContext()); | 144 controller_->GetWebContents()->GetBrowserContext()); |
| 145 return TemplateURLServiceFactory::GetForProfile(profile)-> | 145 return TemplateURLServiceFactory::GetForProfile(profile)-> |
| 146 IsSearchResultsPageFromDefaultSearchProvider(GetURL()); | 146 IsSearchResultsPageFromDefaultSearchProvider(GetURL()); |
| 147 } | 147 } |
| 148 | 148 |
| 149 bool ChromeOmniboxClient::IsLoading() const { | 149 bool ChromeOmniboxClient::IsLoading() const { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 if (!controller_->GetWebContents()) | 215 if (!controller_->GetWebContents()) |
| 216 return; | 216 return; |
| 217 SearchTabHelper::FromWebContents( | 217 SearchTabHelper::FromWebContents( |
| 218 controller_->GetWebContents())->OmniboxFocusChanged(state, reason); | 218 controller_->GetWebContents())->OmniboxFocusChanged(state, reason); |
| 219 } | 219 } |
| 220 | 220 |
| 221 void ChromeOmniboxClient::OnResultChanged( | 221 void ChromeOmniboxClient::OnResultChanged( |
| 222 const AutocompleteResult& result, | 222 const AutocompleteResult& result, |
| 223 bool default_match_changed, | 223 bool default_match_changed, |
| 224 const base::Callback<void(const SkBitmap& bitmap)>& on_bitmap_fetched) { | 224 const base::Callback<void(const SkBitmap& bitmap)>& on_bitmap_fetched) { |
| 225 if (chrome::IsInstantExtendedAPIEnabled() && | 225 if (search::IsInstantExtendedAPIEnabled() && |
| 226 ((default_match_changed && result.default_match() != result.end()) || | 226 ((default_match_changed && result.default_match() != result.end()) || |
| 227 (chrome::ShouldAllowPrefetchNonDefaultMatch() && !result.empty()))) { | 227 (search::ShouldAllowPrefetchNonDefaultMatch() && !result.empty()))) { |
| 228 InstantSuggestion prefetch_suggestion; | 228 InstantSuggestion prefetch_suggestion; |
| 229 const AutocompleteMatch* match_to_prefetch = GetMatchToPrefetch(result); | 229 const AutocompleteMatch* match_to_prefetch = GetMatchToPrefetch(result); |
| 230 if (match_to_prefetch) { | 230 if (match_to_prefetch) { |
| 231 prefetch_suggestion.text = match_to_prefetch->contents; | 231 prefetch_suggestion.text = match_to_prefetch->contents; |
| 232 prefetch_suggestion.metadata = | 232 prefetch_suggestion.metadata = |
| 233 SearchProvider::GetSuggestMetadata(*match_to_prefetch); | 233 SearchProvider::GetSuggestMetadata(*match_to_prefetch); |
| 234 } | 234 } |
| 235 // Send the prefetch suggestion unconditionally to the InstantPage. If | 235 // Send the prefetch suggestion unconditionally to the InstantPage. If |
| 236 // there is no suggestion to prefetch, we need to send a blank query to | 236 // there is no suggestion to prefetch, we need to send a blank query to |
| 237 // clear the prefetched results. | 237 // clear the prefetched results. |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 match.destination_url, | 305 match.destination_url, |
| 306 predictors::AutocompleteActionPredictor::IsPreconnectable(match)); | 306 predictors::AutocompleteActionPredictor::IsPreconnectable(match)); |
| 307 } | 307 } |
| 308 // We could prefetch the alternate nav URL, if any, but because there | 308 // We could prefetch the alternate nav URL, if any, but because there |
| 309 // can be many of these as a user types an initial series of characters, | 309 // can be many of these as a user types an initial series of characters, |
| 310 // the OS DNS cache could suffer eviction problems for minimal gain. | 310 // the OS DNS cache could suffer eviction problems for minimal gain. |
| 311 } | 311 } |
| 312 | 312 |
| 313 void ChromeOmniboxClient::SetSuggestionToPrefetch( | 313 void ChromeOmniboxClient::SetSuggestionToPrefetch( |
| 314 const InstantSuggestion& suggestion) { | 314 const InstantSuggestion& suggestion) { |
| 315 DCHECK(chrome::IsInstantExtendedAPIEnabled()); | 315 DCHECK(search::IsInstantExtendedAPIEnabled()); |
| 316 content::WebContents* web_contents = controller_->GetWebContents(); | 316 content::WebContents* web_contents = controller_->GetWebContents(); |
| 317 if (web_contents && | 317 if (web_contents && |
| 318 SearchTabHelper::FromWebContents(web_contents)->IsSearchResultsPage()) { | 318 SearchTabHelper::FromWebContents(web_contents)->IsSearchResultsPage()) { |
| 319 if (chrome::ShouldPrefetchSearchResultsOnSRP()) { | 319 if (search::ShouldPrefetchSearchResultsOnSRP()) { |
| 320 SearchTabHelper::FromWebContents(web_contents)-> | 320 SearchTabHelper::FromWebContents(web_contents)-> |
| 321 SetSuggestionToPrefetch(suggestion); | 321 SetSuggestionToPrefetch(suggestion); |
| 322 } | 322 } |
| 323 } else { | 323 } else { |
| 324 InstantSearchPrerenderer* prerenderer = | 324 InstantSearchPrerenderer* prerenderer = |
| 325 InstantSearchPrerenderer::GetForProfile(profile_); | 325 InstantSearchPrerenderer::GetForProfile(profile_); |
| 326 if (prerenderer) | 326 if (prerenderer) |
| 327 prerenderer->Prerender(suggestion); | 327 prerenderer->Prerender(suggestion); |
| 328 } | 328 } |
| 329 } | 329 } |
| 330 | 330 |
| 331 void ChromeOmniboxClient::OnBitmapFetched(const BitmapFetchedCallback& callback, | 331 void ChromeOmniboxClient::OnBitmapFetched(const BitmapFetchedCallback& callback, |
| 332 const SkBitmap& bitmap) { | 332 const SkBitmap& bitmap) { |
| 333 request_id_ = BitmapFetcherService::REQUEST_ID_INVALID; | 333 request_id_ = BitmapFetcherService::REQUEST_ID_INVALID; |
| 334 callback.Run(bitmap); | 334 callback.Run(bitmap); |
| 335 } | 335 } |
| OLD | NEW |