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 |