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

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

Issue 17391005: Remove Instant hooks from SearchProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Still more rebasing. Created 7 years, 5 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/auto_reset.h"
11 #include "base/callback.h" 10 #include "base/callback.h"
12 #include "base/i18n/break_iterator.h" 11 #include "base/i18n/break_iterator.h"
13 #include "base/i18n/case_conversion.h" 12 #include "base/i18n/case_conversion.h"
14 #include "base/i18n/icu_string_conversions.h" 13 #include "base/i18n/icu_string_conversions.h"
15 #include "base/json/json_string_value_serializer.h" 14 #include "base/json/json_string_value_serializer.h"
16 #include "base/message_loop.h" 15 #include "base/message_loop.h"
17 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
18 #include "base/prefs/pref_service.h" 17 #include "base/prefs/pref_service.h"
19 #include "base/strings/string16.h" 18 #include "base/strings/string16.h"
20 #include "base/strings/string_util.h" 19 #include "base/strings/string_util.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 const char SearchProvider::kRelevanceFromServerKey[] = "relevance_from_server"; 242 const char SearchProvider::kRelevanceFromServerKey[] = "relevance_from_server";
244 const char SearchProvider::kTrue[] = "true"; 243 const char SearchProvider::kTrue[] = "true";
245 const char SearchProvider::kFalse[] = "false"; 244 const char SearchProvider::kFalse[] = "false";
246 245
247 SearchProvider::SearchProvider(AutocompleteProviderListener* listener, 246 SearchProvider::SearchProvider(AutocompleteProviderListener* listener,
248 Profile* profile) 247 Profile* profile)
249 : AutocompleteProvider(listener, profile, 248 : AutocompleteProvider(listener, profile,
250 AutocompleteProvider::TYPE_SEARCH), 249 AutocompleteProvider::TYPE_SEARCH),
251 providers_(TemplateURLServiceFactory::GetForProfile(profile)), 250 providers_(TemplateURLServiceFactory::GetForProfile(profile)),
252 suggest_results_pending_(0), 251 suggest_results_pending_(0),
253 instant_finalized_(false),
254 field_trial_triggered_(false), 252 field_trial_triggered_(false),
255 field_trial_triggered_in_session_(false), 253 field_trial_triggered_in_session_(false),
256 suppress_search_suggestions_(false),
257 omnibox_start_margin_(-1) { 254 omnibox_start_margin_(-1) {
258 } 255 }
259 256
260 // static 257 // static
261 AutocompleteMatch SearchProvider::CreateSearchSuggestion( 258 AutocompleteMatch SearchProvider::CreateSearchSuggestion(
262 Profile* profile, 259 Profile* profile,
263 AutocompleteProvider* autocomplete_provider, 260 AutocompleteProvider* autocomplete_provider,
264 const AutocompleteInput& input, 261 const AutocompleteInput& input,
265 const string16& query_string, 262 const string16& query_string,
266 const string16& input_text, 263 const string16& input_text,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 new_entry.mutable_field_trial_triggered_in_session()->Add( 363 new_entry.mutable_field_trial_triggered_in_session()->Add(
367 field_trial_hashes[i]); 364 field_trial_hashes[i]);
368 } 365 }
369 } 366 }
370 } 367 }
371 368
372 void SearchProvider::ResetSession() { 369 void SearchProvider::ResetSession() {
373 field_trial_triggered_in_session_ = false; 370 field_trial_triggered_in_session_ = false;
374 } 371 }
375 372
376 void SearchProvider::FinalizeInstantQuery(const string16& input_text,
377 const InstantSuggestion& suggestion) {
378 if (done_ || instant_finalized_)
379 return;
380
381 instant_finalized_ = true;
382 UpdateDone();
383
384 if (input_text.empty()) {
385 // We only need to update the listener if we're actually done.
386 if (done_)
387 listener_->OnProviderUpdate(false);
388 return;
389 }
390
391 default_provider_suggestion_ = suggestion;
392
393 string16 adjusted_input_text(input_text);
394 AutocompleteInput::RemoveForcedQueryStringIfNecessary(input_.type(),
395 &adjusted_input_text);
396
397 const string16 text = adjusted_input_text + suggestion.text;
398 bool results_updated = false;
399 // Remove any matches that are identical to |text|. We don't use the
400 // destination_url for comparison as it varies depending upon the index passed
401 // to TemplateURL::ReplaceSearchTerms.
402 for (ACMatches::iterator i = matches_.begin(); i != matches_.end();) {
403 if (((i->type == AutocompleteMatchType::SEARCH_HISTORY) ||
404 (i->type == AutocompleteMatchType::SEARCH_SUGGEST)) &&
405 (i->fill_into_edit == text)) {
406 i = matches_.erase(i);
407 results_updated = true;
408 } else {
409 ++i;
410 }
411 }
412
413 // Add the new Instant suggest result.
414 if (suggestion.type == INSTANT_SUGGESTION_SEARCH) {
415 // Instant has a query suggestion. Rank it higher than SEARCH_WHAT_YOU_TYPED
416 // so that it gets autocompleted.
417 bool relevance_from_server;
418 const int verbatim_relevance = GetVerbatimRelevance(&relevance_from_server);
419 int did_not_accept_default_suggestion =
420 default_results_.suggest_results.empty() ?
421 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE :
422 TemplateURLRef::NO_SUGGESTION_CHOSEN;
423 MatchMap match_map;
424 AddMatchToMap(text, adjusted_input_text, verbatim_relevance + 1,
425 relevance_from_server, AutocompleteMatchType::SEARCH_SUGGEST,
426 did_not_accept_default_suggestion, false, &match_map);
427 if (!match_map.empty()) {
428 matches_.push_back(match_map.begin()->second);
429 results_updated = true;
430 }
431 } else {
432 // Instant has a URL suggestion. Rank it higher than other providers would
433 // rank URL_WHAT_YOU_TYPED so it gets autocompleted; use
434 // kNonURLVerbatimRelevance rather than |verbatim_relevance| so that the
435 // score does not change if the user keeps typing and the input changes from
436 // type UNKNOWN to URL.
437 matches_.push_back(NavigationToMatch(NavigationResult(
438 *this, GURL(UTF16ToUTF8(suggestion.text)), string16(), false,
439 kNonURLVerbatimRelevance + 1, false)));
440 results_updated = true;
441 }
442
443 if (results_updated || done_)
444 listener_->OnProviderUpdate(results_updated);
445 }
446
447 void SearchProvider::ClearInstantSuggestion() {
448 default_provider_suggestion_ = InstantSuggestion();
449 if (done_ || instant_finalized_)
450 return;
451 instant_finalized_ = true;
452 UpdateMatches();
453 listener_->OnProviderUpdate(true);
454 }
455
456 void SearchProvider::SuppressSearchSuggestions() {
457 suppress_search_suggestions_ = true;
458 }
459
460 void SearchProvider::SetOmniboxStartMargin(int omnibox_start_margin) { 373 void SearchProvider::SetOmniboxStartMargin(int omnibox_start_margin) {
461 omnibox_start_margin_ = omnibox_start_margin; 374 omnibox_start_margin_ = omnibox_start_margin;
462 } 375 }
463 376
464 bool SearchProvider::IsNonInstantSearchDone() const {
465 return !timer_.IsRunning() && (suggest_results_pending_ == 0);
466 }
467
468 SearchProvider::~SearchProvider() { 377 SearchProvider::~SearchProvider() {
469 } 378 }
470 379
471 // static 380 // static
472 void SearchProvider::RemoveStaleResults(const string16& input, 381 void SearchProvider::RemoveStaleResults(const string16& input,
473 int verbatim_relevance, 382 int verbatim_relevance,
474 SuggestResults* suggest_results, 383 SuggestResults* suggest_results,
475 NavigationResults* navigation_results) { 384 NavigationResults* navigation_results) {
476 DCHECK_GE(verbatim_relevance, 0); 385 DCHECK_GE(verbatim_relevance, 0);
477 // Keep pointers to the head of (the highest scoring elements of) 386 // Keep pointers to the head of (the highest scoring elements of)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 // differently for extension and non-extension keywords. If you 444 // differently for extension and non-extension keywords. If you
536 // make such a change, however, you should update this comment to 445 // make such a change, however, you should update this comment to
537 // describe it, so it's clear why the functions diverge. 446 // describe it, so it's clear why the functions diverge.
538 if (prefer_keyword) 447 if (prefer_keyword)
539 return 1500; 448 return 1500;
540 return (type == AutocompleteInput::QUERY) ? 1450 : 1100; 449 return (type == AutocompleteInput::QUERY) ? 1450 : 1100;
541 } 450 }
542 451
543 void SearchProvider::Start(const AutocompleteInput& input, 452 void SearchProvider::Start(const AutocompleteInput& input,
544 bool minimal_changes) { 453 bool minimal_changes) {
545 const bool suppress_search_suggestions = suppress_search_suggestions_;
546 suppress_search_suggestions_ = false;
547
548 // Do our best to load the model as early as possible. This will reduce 454 // Do our best to load the model as early as possible. This will reduce
549 // odds of having the model not ready when really needed (a non-empty input). 455 // odds of having the model not ready when really needed (a non-empty input).
550 TemplateURLService* model = providers_.template_url_service(); 456 TemplateURLService* model = providers_.template_url_service();
551 DCHECK(model); 457 DCHECK(model);
552 model->Load(); 458 model->Load();
553 459
554 matches_.clear(); 460 matches_.clear();
555 field_trial_triggered_ = false; 461 field_trial_triggered_ = false;
556 462
557 instant_finalized_ =
558 (input.matches_requested() != AutocompleteInput::ALL_MATCHES);
559
560 // Can't return search/suggest results for bogus input or without a profile. 463 // Can't return search/suggest results for bogus input or without a profile.
561 if (!profile_ || (input.type() == AutocompleteInput::INVALID)) { 464 if (!profile_ || (input.type() == AutocompleteInput::INVALID)) {
562 Stop(false); 465 Stop(false);
563 return; 466 return;
564 } 467 }
565 468
566 keyword_input_ = input; 469 keyword_input_ = input;
567 const TemplateURL* keyword_provider = 470 const TemplateURL* keyword_provider =
568 KeywordProvider::GetSubstitutingTemplateURLForInput(model, 471 KeywordProvider::GetSubstitutingTemplateURLForInput(model,
569 &keyword_input_); 472 &keyword_input_);
(...skipping 16 matching lines...) Expand all
586 } 489 }
587 490
588 // If we're still running an old query but have since changed the query text 491 // If we're still running an old query but have since changed the query text
589 // or the providers, abort the query. 492 // or the providers, abort the query.
590 string16 default_provider_keyword(default_provider ? 493 string16 default_provider_keyword(default_provider ?
591 default_provider->keyword() : string16()); 494 default_provider->keyword() : string16());
592 string16 keyword_provider_keyword(keyword_provider ? 495 string16 keyword_provider_keyword(keyword_provider ?
593 keyword_provider->keyword() : string16()); 496 keyword_provider->keyword() : string16());
594 if (!minimal_changes || 497 if (!minimal_changes ||
595 !providers_.equal(default_provider_keyword, keyword_provider_keyword)) { 498 !providers_.equal(default_provider_keyword, keyword_provider_keyword)) {
596 // If Instant has not come back with a suggestion, adjust the previous
597 // suggestion if possible. If |instant_finalized| is true, we are looking
598 // for synchronous matches only, so the suggestion is cleared.
599 if (instant_finalized_)
600 default_provider_suggestion_ = InstantSuggestion();
601 else
602 AdjustDefaultProviderSuggestion(input_.text(), input.text());
603
604 // Cancel any in-flight suggest requests. 499 // Cancel any in-flight suggest requests.
605 if (!done_) { 500 if (!done_)
606 // The Stop(false) call below clears |default_provider_suggestion_|, but
607 // in this instance we do not want to clear cached results, so we
608 // restore it.
609 base::AutoReset<InstantSuggestion> reset(&default_provider_suggestion_,
610 InstantSuggestion());
611 Stop(false); 501 Stop(false);
612 }
613 } 502 }
614 503
615 providers_.set(default_provider_keyword, keyword_provider_keyword); 504 providers_.set(default_provider_keyword, keyword_provider_keyword);
616 505
617 if (input.text().empty()) { 506 if (input.text().empty()) {
618 // User typed "?" alone. Give them a placeholder result indicating what 507 // User typed "?" alone. Give them a placeholder result indicating what
619 // this syntax does. 508 // this syntax does.
620 if (default_provider) { 509 if (default_provider) {
621 AutocompleteMatch match; 510 AutocompleteMatch match;
622 match.provider = this; 511 match.provider = this;
623 match.contents.assign(l10n_util::GetStringUTF16(IDS_EMPTY_KEYWORD_VALUE)); 512 match.contents.assign(l10n_util::GetStringUTF16(IDS_EMPTY_KEYWORD_VALUE));
624 match.contents_class.push_back( 513 match.contents_class.push_back(
625 ACMatchClassification(0, ACMatchClassification::NONE)); 514 ACMatchClassification(0, ACMatchClassification::NONE));
626 match.keyword = providers_.default_provider(); 515 match.keyword = providers_.default_provider();
627 matches_.push_back(match); 516 matches_.push_back(match);
628 } 517 }
629 Stop(false); 518 Stop(false);
630 return; 519 return;
631 } 520 }
632 521
633 input_ = input; 522 input_ = input;
634 523
635 if (!suppress_search_suggestions) { 524 DoHistoryQuery(minimal_changes);
636 DoHistoryQuery(minimal_changes); 525 StartOrStopSuggestQuery(minimal_changes);
637 StartOrStopSuggestQuery(minimal_changes);
638 }
639 UpdateMatches(); 526 UpdateMatches();
640 } 527 }
641 528
642 void SearchProvider::Stop(bool clear_cached_results) { 529 void SearchProvider::Stop(bool clear_cached_results) {
643 StopSuggest(); 530 StopSuggest();
644 done_ = true; 531 done_ = true;
645 default_provider_suggestion_ = InstantSuggestion();
646 532
647 if (clear_cached_results) 533 if (clear_cached_results)
648 ClearAllResults(); 534 ClearAllResults();
649 } 535 }
650 536
651 void SearchProvider::OnURLFetchComplete(const net::URLFetcher* source) { 537 void SearchProvider::OnURLFetchComplete(const net::URLFetcher* source) {
652 DCHECK(!done_); 538 DCHECK(!done_);
653 suggest_results_pending_--; 539 suggest_results_pending_--;
654 LogOmniboxSuggestRequest(REPLY_RECEIVED); 540 LogOmniboxSuggestRequest(REPLY_RECEIVED);
655 DCHECK_GE(suggest_results_pending_, 0); // Should never go negative. 541 DCHECK_GE(suggest_results_pending_, 0); // Should never go negative.
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 RemoveStaleResults(keyword_input_.text(), GetKeywordVerbatimRelevance(NULL), 784 RemoveStaleResults(keyword_input_.text(), GetKeywordVerbatimRelevance(NULL),
899 &keyword_results_.suggest_results, 785 &keyword_results_.suggest_results,
900 &keyword_results_.navigation_results); 786 &keyword_results_.navigation_results);
901 } else { 787 } else {
902 // User is either in keyword mode with a blank input or out of 788 // User is either in keyword mode with a blank input or out of
903 // keyword mode entirely. 789 // keyword mode entirely.
904 keyword_results_.Clear(); 790 keyword_results_.Clear();
905 } 791 }
906 } 792 }
907 793
908 void SearchProvider::AdjustDefaultProviderSuggestion(
909 const string16& previous_input,
910 const string16& current_input) {
911 if (default_provider_suggestion_.type == INSTANT_SUGGESTION_URL) {
912 // Description and relevance do not matter in the check for staleness.
913 NavigationResult result(*this, GURL(default_provider_suggestion_.text),
914 string16(), false, 100, false);
915 // If navigation suggestion is stale, clear |default_provider_suggestion_|.
916 if (!result.IsInlineable(current_input))
917 default_provider_suggestion_ = InstantSuggestion();
918 } else {
919 DCHECK(default_provider_suggestion_.type == INSTANT_SUGGESTION_SEARCH);
920 // InstantSuggestion of type SEARCH contain only the suggested text, and not
921 // the full text of the query. This looks at the current and previous input
922 // to determine if the user is typing forward, and if the new input is
923 // contained in |default_provider_suggestion_|. If so, the suggestion is
924 // adjusted and can be kept. Otherwise, it is reset.
925 if (!previous_input.empty() &&
926 StartsWith(current_input, previous_input, false)) {
927 // User is typing forward; verify if new input is part of the suggestion.
928 const string16 new_text = string16(current_input, previous_input.size());
929 if (StartsWith(default_provider_suggestion_.text, new_text, false)) {
930 // New input is a prefix to the previous suggestion, adjust the
931 // suggestion to strip the prefix.
932 default_provider_suggestion_.text.erase(0, new_text.size());
933 return;
934 }
935 }
936 // If we are here, the search suggestion is stale; reset it.
937 default_provider_suggestion_ = InstantSuggestion();
938 }
939 }
940
941 void SearchProvider::ApplyCalculatedRelevance() { 794 void SearchProvider::ApplyCalculatedRelevance() {
942 ApplyCalculatedSuggestRelevance(&keyword_results_.suggest_results); 795 ApplyCalculatedSuggestRelevance(&keyword_results_.suggest_results);
943 ApplyCalculatedSuggestRelevance(&default_results_.suggest_results); 796 ApplyCalculatedSuggestRelevance(&default_results_.suggest_results);
944 ApplyCalculatedNavigationRelevance(&keyword_results_.navigation_results); 797 ApplyCalculatedNavigationRelevance(&keyword_results_.navigation_results);
945 ApplyCalculatedNavigationRelevance(&default_results_.navigation_results); 798 ApplyCalculatedNavigationRelevance(&default_results_.navigation_results);
946 default_results_.verbatim_relevance = -1; 799 default_results_.verbatim_relevance = -1;
947 keyword_results_.verbatim_relevance = -1; 800 keyword_results_.verbatim_relevance = -1;
948 } 801 }
949 802
950 void SearchProvider::ApplyCalculatedSuggestRelevance(SuggestResults* list) { 803 void SearchProvider::ApplyCalculatedSuggestRelevance(SuggestResults* list) {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 const int keyword_verbatim_relevance = 977 const int keyword_verbatim_relevance =
1125 GetKeywordVerbatimRelevance(&keyword_relevance_from_server); 978 GetKeywordVerbatimRelevance(&keyword_relevance_from_server);
1126 if (keyword_verbatim_relevance > 0) { 979 if (keyword_verbatim_relevance > 0) {
1127 AddMatchToMap(keyword_input_.text(), keyword_input_.text(), 980 AddMatchToMap(keyword_input_.text(), keyword_input_.text(),
1128 keyword_verbatim_relevance, keyword_relevance_from_server, 981 keyword_verbatim_relevance, keyword_relevance_from_server,
1129 AutocompleteMatchType::SEARCH_OTHER_ENGINE, 982 AutocompleteMatchType::SEARCH_OTHER_ENGINE,
1130 did_not_accept_keyword_suggestion, true, &map); 983 did_not_accept_keyword_suggestion, true, &map);
1131 } 984 }
1132 } 985 }
1133 } 986 }
1134 if (!default_provider_suggestion_.text.empty() &&
1135 default_provider_suggestion_.type == INSTANT_SUGGESTION_SEARCH &&
1136 !input_.prevent_inline_autocomplete())
1137 AddMatchToMap(input_.text() + default_provider_suggestion_.text,
1138 input_.text(), verbatim_relevance + 1, relevance_from_server,
1139 AutocompleteMatchType::SEARCH_SUGGEST,
1140 did_not_accept_default_suggestion, false, &map);
1141
1142 AddHistoryResultsToMap(keyword_history_results_, true, 987 AddHistoryResultsToMap(keyword_history_results_, true,
1143 did_not_accept_keyword_suggestion, &map); 988 did_not_accept_keyword_suggestion, &map);
1144 AddHistoryResultsToMap(default_history_results_, false, 989 AddHistoryResultsToMap(default_history_results_, false,
1145 did_not_accept_default_suggestion, &map); 990 did_not_accept_default_suggestion, &map);
1146 991
1147 AddSuggestResultsToMap(keyword_results_.suggest_results, &map); 992 AddSuggestResultsToMap(keyword_results_.suggest_results, &map);
1148 AddSuggestResultsToMap(default_results_.suggest_results, &map); 993 AddSuggestResultsToMap(default_results_.suggest_results, &map);
1149 994
1150 ACMatches matches; 995 ACMatches matches;
1151 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i) 996 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i)
1152 matches.push_back(i->second); 997 matches.push_back(i->second);
1153 998
1154 if (!default_provider_suggestion_.text.empty() &&
1155 default_provider_suggestion_.type == INSTANT_SUGGESTION_URL &&
1156 !input_.prevent_inline_autocomplete()) {
1157 // See comment in FinalizeInstantQuery() for why we don't use
1158 // |verbatim_relevance| here.
1159 matches.push_back(NavigationToMatch(NavigationResult(
1160 *this, GURL(UTF16ToUTF8(default_provider_suggestion_.text)), string16(),
1161 false, kNonURLVerbatimRelevance + 1, false)));
1162 }
1163 AddNavigationResultsToMatches(keyword_results_.navigation_results, &matches); 999 AddNavigationResultsToMatches(keyword_results_.navigation_results, &matches);
1164 AddNavigationResultsToMatches(default_results_.navigation_results, &matches); 1000 AddNavigationResultsToMatches(default_results_.navigation_results, &matches);
1165 1001
1166 // Now add the most relevant matches to |matches_|. We take up to kMaxMatches 1002 // Now add the most relevant matches to |matches_|. We take up to kMaxMatches
1167 // suggest/navsuggest matches, regardless of origin. If Instant Extended is 1003 // suggest/navsuggest matches, regardless of origin. If Instant Extended is
1168 // enabled and we have server-provided (and thus hopefully more accurate) 1004 // enabled and we have server-provided (and thus hopefully more accurate)
1169 // scores for some suggestions, we allow more of those, until we reach 1005 // scores for some suggestions, we allow more of those, until we reach
1170 // AutocompleteResult::kMaxMatches total matches (that is, enough to fill the 1006 // AutocompleteResult::kMaxMatches total matches (that is, enough to fill the
1171 // whole popup). 1007 // whole popup).
1172 // 1008 //
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 return; 1502 return;
1667 max_query_relevance = std::max(max_query_relevance - 1, 0); 1503 max_query_relevance = std::max(max_query_relevance - 1, 0);
1668 it->set_relevance(max_query_relevance); 1504 it->set_relevance(max_query_relevance);
1669 it->set_relevance_from_server(relevance_from_server); 1505 it->set_relevance_from_server(relevance_from_server);
1670 } 1506 }
1671 } 1507 }
1672 1508
1673 void SearchProvider::UpdateDone() { 1509 void SearchProvider::UpdateDone() {
1674 // We're done when the timer isn't running, there are no suggest queries 1510 // We're done when the timer isn't running, there are no suggest queries
1675 // pending, and we're not waiting on Instant. 1511 // pending, and we're not waiting on Instant.
1676 done_ = IsNonInstantSearchDone() && 1512 done_ = !timer_.IsRunning() && (suggest_results_pending_ == 0);
1677 (instant_finalized_ || !chrome::IsInstantEnabled(profile_));
1678 } 1513 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/search_provider.h ('k') | chrome/browser/autocomplete/search_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698