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

Side by Side Diff: chrome/browser/autocomplete/search_provider.cc

Issue 12386019: Instant: Use only one hidden WebContents per profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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/autocomplete/search_provider.h" 5 #include "chrome/browser/autocomplete/search_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 19 matching lines...) Expand all
30 #include "chrome/browser/history/history_service.h" 30 #include "chrome/browser/history/history_service.h"
31 #include "chrome/browser/history/history_service_factory.h" 31 #include "chrome/browser/history/history_service_factory.h"
32 #include "chrome/browser/history/in_memory_database.h" 32 #include "chrome/browser/history/in_memory_database.h"
33 #include "chrome/browser/metrics/variations/variations_http_header_provider.h" 33 #include "chrome/browser/metrics/variations/variations_http_header_provider.h"
34 #include "chrome/browser/net/url_fixer_upper.h" 34 #include "chrome/browser/net/url_fixer_upper.h"
35 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
36 #include "chrome/browser/search_engines/search_engine_type.h" 36 #include "chrome/browser/search_engines/search_engine_type.h"
37 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" 37 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
38 #include "chrome/browser/search_engines/template_url_service.h" 38 #include "chrome/browser/search_engines/template_url_service.h"
39 #include "chrome/browser/search_engines/template_url_service_factory.h" 39 #include "chrome/browser/search_engines/template_url_service_factory.h"
40 #include "chrome/browser/ui/browser_instant_controller.h"
41 #include "chrome/browser/ui/search/search.h" 40 #include "chrome/browser/ui/search/search.h"
42 #include "chrome/common/pref_names.h" 41 #include "chrome/common/pref_names.h"
43 #include "chrome/common/url_constants.h" 42 #include "chrome/common/url_constants.h"
44 #include "googleurl/src/url_util.h" 43 #include "googleurl/src/url_util.h"
45 #include "grit/generated_resources.h" 44 #include "grit/generated_resources.h"
46 #include "net/base/escape.h" 45 #include "net/base/escape.h"
47 #include "net/base/load_flags.h" 46 #include "net/base/load_flags.h"
48 #include "net/base/net_util.h" 47 #include "net/base/net_util.h"
49 #include "net/http/http_request_headers.h" 48 #include "net/http/http_request_headers.h"
50 #include "net/http/http_response_headers.h" 49 #include "net/http/http_response_headers.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 if (((i->type == AutocompleteMatch::SEARCH_HISTORY) || 166 if (((i->type == AutocompleteMatch::SEARCH_HISTORY) ||
168 (i->type == AutocompleteMatch::SEARCH_SUGGEST)) && 167 (i->type == AutocompleteMatch::SEARCH_SUGGEST)) &&
169 (i->fill_into_edit == text)) { 168 (i->fill_into_edit == text)) {
170 i = matches_.erase(i); 169 i = matches_.erase(i);
171 results_updated = true; 170 results_updated = true;
172 } else { 171 } else {
173 ++i; 172 ++i;
174 } 173 }
175 } 174 }
176 175
177 // Add the new instant suggest result. 176 // Add the new Instant suggest result.
178 if (suggestion.type == INSTANT_SUGGESTION_SEARCH) { 177 if (!suggestion.is_url) {
179 // Instant has a query suggestion. Rank it higher than SEARCH_WHAT_YOU_TYPED 178 // Instant has a query suggestion. Rank it higher than SEARCH_WHAT_YOU_TYPED
180 // so that it gets autocompleted. 179 // so that it gets autocompleted.
181 const int verbatim_relevance = GetVerbatimRelevance(); 180 const int verbatim_relevance = GetVerbatimRelevance();
182 int did_not_accept_default_suggestion = default_suggest_results_.empty() ? 181 int did_not_accept_default_suggestion = default_suggest_results_.empty() ?
183 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE : 182 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE :
184 TemplateURLRef::NO_SUGGESTION_CHOSEN; 183 TemplateURLRef::NO_SUGGESTION_CHOSEN;
185 MatchMap match_map; 184 MatchMap match_map;
186 AddMatchToMap(text, adjusted_input_text, verbatim_relevance + 1, 185 AddMatchToMap(text, adjusted_input_text, verbatim_relevance + 1,
187 AutocompleteMatch::SEARCH_SUGGEST, 186 AutocompleteMatch::SEARCH_SUGGEST,
188 did_not_accept_default_suggestion, false, &match_map); 187 did_not_accept_default_suggestion, false, &match_map);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 ACMatchClassification(0, ACMatchClassification::NONE)); 275 ACMatchClassification(0, ACMatchClassification::NONE));
277 match.keyword = providers_.default_provider(); 276 match.keyword = providers_.default_provider();
278 matches_.push_back(match); 277 matches_.push_back(match);
279 } 278 }
280 Stop(false); 279 Stop(false);
281 return; 280 return;
282 } 281 }
283 282
284 input_ = input; 283 input_ = input;
285 284
286 // Don't run the normal provider flow when the Instant Extended API is 285 // When Instant is enabled in the extended mode, the embedded page will handle
287 // enabled. (When the Extended API is enabled, the embedded page will handle 286 // all search suggestions itself, so don't run the normal provider flow.
288 // all search suggestions itself.) 287 // TODO(dcblack): Once we are done refactoring the omnibox so we don't need to
289 // TODO(dcblack): once we are done refactoring the omnibox so we don't need to
290 // use FinalizeInstantQuery anymore, we can take out this check and remove 288 // use FinalizeInstantQuery anymore, we can take out this check and remove
291 // this provider from kInstantExtendedOmniboxProviders. 289 // this provider from kInstantExtendedOmniboxProviders.
292 if (!chrome::search::IsInstantExtendedAPIEnabled(profile_)) { 290 if (!chrome::search::IsInstantExtendedAPIEnabled(profile_) ||
291 !chrome::search::IsInstantEnabled(profile_)) {
293 DoHistoryQuery(minimal_changes); 292 DoHistoryQuery(minimal_changes);
294 StartOrStopSuggestQuery(minimal_changes); 293 StartOrStopSuggestQuery(minimal_changes);
295 } 294 }
296 UpdateMatches(); 295 UpdateMatches();
297 } 296 }
298 297
299 SearchProvider::Result::Result(int relevance) : relevance_(relevance) {} 298 SearchProvider::Result::Result(int relevance) : relevance_(relevance) {}
300 SearchProvider::Result::~Result() {} 299 SearchProvider::Result::~Result() {}
301 300
302 SearchProvider::SuggestResult::SuggestResult(const string16& suggestion, 301 SearchProvider::SuggestResult::SuggestResult(const string16& suggestion,
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 } 705 }
707 706
708 // 5th element: Optional key-value pairs from the Suggest server. 707 // 5th element: Optional key-value pairs from the Suggest server.
709 ListValue* types = NULL; 708 ListValue* types = NULL;
710 ListValue* relevances = NULL; 709 ListValue* relevances = NULL;
711 DictionaryValue* extras = NULL; 710 DictionaryValue* extras = NULL;
712 if (root_list->GetDictionary(4, &extras)) { 711 if (root_list->GetDictionary(4, &extras)) {
713 extras->GetList("google:suggesttype", &types); 712 extras->GetList("google:suggesttype", &types);
714 713
715 // Only accept relevance suggestions if Instant is disabled. 714 // Only accept relevance suggestions if Instant is disabled.
716 if (!is_keyword && 715 if (!is_keyword && !chrome::search::IsInstantEnabled(profile_)) {
717 !chrome::BrowserInstantController::IsInstantEnabled(profile_)) {
718 // Discard this list if its size does not match that of the suggestions. 716 // Discard this list if its size does not match that of the suggestions.
719 if (extras->GetList("google:suggestrelevance", &relevances) && 717 if (extras->GetList("google:suggestrelevance", &relevances) &&
720 relevances->GetSize() != results->GetSize()) 718 relevances->GetSize() != results->GetSize())
721 relevances = NULL; 719 relevances = NULL;
722 720
723 extras->GetInteger("google:verbatimrelevance", &verbatim_relevance_); 721 extras->GetInteger("google:verbatimrelevance", &verbatim_relevance_);
724 } 722 }
725 723
726 // Check if the active suggest field trial (if any) has triggered either 724 // Check if the active suggest field trial (if any) has triggered either
727 // for the default provider or keyword provider. 725 // for the default provider or keyword provider.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 if (keyword_url && !keyword_url->IsExtensionKeyword()) { 805 if (keyword_url && !keyword_url->IsExtensionKeyword()) {
808 AddMatchToMap(keyword_input_.text(), keyword_input_.text(), 806 AddMatchToMap(keyword_input_.text(), keyword_input_.text(),
809 CalculateRelevanceForKeywordVerbatim( 807 CalculateRelevanceForKeywordVerbatim(
810 input_.type(), input_.prefer_keyword()), 808 input_.type(), input_.prefer_keyword()),
811 AutocompleteMatch::SEARCH_OTHER_ENGINE, 809 AutocompleteMatch::SEARCH_OTHER_ENGINE,
812 did_not_accept_keyword_suggestion, true, &map); 810 did_not_accept_keyword_suggestion, true, &map);
813 } 811 }
814 } 812 }
815 const size_t verbatim_matches_size = map.size(); 813 const size_t verbatim_matches_size = map.size();
816 if (!default_provider_suggestion_.text.empty() && 814 if (!default_provider_suggestion_.text.empty() &&
817 default_provider_suggestion_.type == INSTANT_SUGGESTION_SEARCH && 815 !default_provider_suggestion_.is_url &&
818 !input_.prevent_inline_autocomplete()) 816 !input_.prevent_inline_autocomplete())
819 AddMatchToMap(input_.text() + default_provider_suggestion_.text, 817 AddMatchToMap(input_.text() + default_provider_suggestion_.text,
820 input_.text(), verbatim_relevance + 1, 818 input_.text(), verbatim_relevance + 1,
821 AutocompleteMatch::SEARCH_SUGGEST, 819 AutocompleteMatch::SEARCH_SUGGEST,
822 did_not_accept_default_suggestion, false, &map); 820 did_not_accept_default_suggestion, false, &map);
823 821
824 AddHistoryResultsToMap(keyword_history_results_, true, 822 AddHistoryResultsToMap(keyword_history_results_, true,
825 did_not_accept_keyword_suggestion, &map); 823 did_not_accept_keyword_suggestion, &map);
826 AddHistoryResultsToMap(default_history_results_, false, 824 AddHistoryResultsToMap(default_history_results_, false,
827 did_not_accept_default_suggestion, &map); 825 did_not_accept_default_suggestion, &map);
828 826
829 AddSuggestResultsToMap(keyword_suggest_results_, true, &map); 827 AddSuggestResultsToMap(keyword_suggest_results_, true, &map);
830 AddSuggestResultsToMap(default_suggest_results_, false, &map); 828 AddSuggestResultsToMap(default_suggest_results_, false, &map);
831 829
832 // Now add the most relevant matches from the map to |matches_|. 830 // Now add the most relevant matches from the map to |matches_|.
833 matches_.clear(); 831 matches_.clear();
834 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i) 832 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i)
835 matches_.push_back(i->second); 833 matches_.push_back(i->second);
836 834
837 if (!default_provider_suggestion_.text.empty() && 835 if (!default_provider_suggestion_.text.empty() &&
838 default_provider_suggestion_.type == INSTANT_SUGGESTION_URL && 836 default_provider_suggestion_.is_url &&
839 !input_.prevent_inline_autocomplete()) { 837 !input_.prevent_inline_autocomplete()) {
840 // See comment in FinalizeInstantQuery() for why we don't use 838 // See comment in FinalizeInstantQuery() for why we don't use
841 // |verbatim_relevance| here. 839 // |verbatim_relevance| here.
842 matches_.push_back(NavigationToMatch( 840 matches_.push_back(NavigationToMatch(
843 NavigationResult(GURL(UTF16ToUTF8(default_provider_suggestion_.text)), 841 NavigationResult(GURL(UTF16ToUTF8(default_provider_suggestion_.text)),
844 string16(), 842 string16(),
845 kNonURLVerbatimRelevance + 1), 843 kNonURLVerbatimRelevance + 1),
846 false)); 844 false));
847 } 845 }
848 AddNavigationResultsToMatches(keyword_navigation_results_, true); 846 AddNavigationResultsToMatches(keyword_navigation_results_, true);
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 &match.contents_class); 1338 &match.contents_class);
1341 1339
1342 match.description = navigation.description(); 1340 match.description = navigation.description();
1343 AutocompleteMatch::ClassifyMatchInString(input, match.description, 1341 AutocompleteMatch::ClassifyMatchInString(input, match.description,
1344 ACMatchClassification::NONE, &match.description_class); 1342 ACMatchClassification::NONE, &match.description_class);
1345 return match; 1343 return match;
1346 } 1344 }
1347 1345
1348 void SearchProvider::UpdateDone() { 1346 void SearchProvider::UpdateDone() {
1349 // We're done when the timer isn't running, there are no suggest queries 1347 // We're done when the timer isn't running, there are no suggest queries
1350 // pending, and we're not waiting on instant. 1348 // pending, and we're not waiting on Instant.
1351 done_ = (!timer_.IsRunning() && (suggest_results_pending_ == 0) && 1349 done_ = (!timer_.IsRunning() && (suggest_results_pending_ == 0) &&
1352 (instant_finalized_ || 1350 (instant_finalized_ || !chrome::search::IsInstantEnabled(profile_)));
1353 (!chrome::BrowserInstantController::IsInstantEnabled(profile_) &&
1354 !chrome::search::IsInstantExtendedAPIEnabled(profile_))));
1355 } 1351 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698