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/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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 } | 202 } |
203 | 203 |
204 | 204 |
205 // SearchProvider::SuggestResult ---------------------------------------------- | 205 // SearchProvider::SuggestResult ---------------------------------------------- |
206 | 206 |
207 SearchProvider::SuggestResult::SuggestResult( | 207 SearchProvider::SuggestResult::SuggestResult( |
208 const string16& suggestion, | 208 const string16& suggestion, |
209 const string16& match_contents, | 209 const string16& match_contents, |
210 const string16& annotation, | 210 const string16& annotation, |
211 const std::string& suggest_query_params, | 211 const std::string& suggest_query_params, |
| 212 const std::string& xsrf_token, |
212 bool from_keyword_provider, | 213 bool from_keyword_provider, |
213 int relevance, | 214 int relevance, |
214 bool relevance_from_server, | 215 bool relevance_from_server, |
215 bool should_prefetch) | 216 bool should_prefetch) |
216 : Result(from_keyword_provider, relevance, relevance_from_server), | 217 : Result(from_keyword_provider, relevance, relevance_from_server), |
217 suggestion_(suggestion), | 218 suggestion_(suggestion), |
218 match_contents_(match_contents), | 219 match_contents_(match_contents), |
219 annotation_(annotation), | 220 annotation_(annotation), |
220 suggest_query_params_(suggest_query_params), | 221 suggest_query_params_(suggest_query_params), |
| 222 xsrf_token_(xsrf_token), |
221 should_prefetch_(should_prefetch) { | 223 should_prefetch_(should_prefetch) { |
222 } | 224 } |
223 | 225 |
224 SearchProvider::SuggestResult::~SuggestResult() { | 226 SearchProvider::SuggestResult::~SuggestResult() { |
225 } | 227 } |
226 | 228 |
227 bool SearchProvider::SuggestResult::IsInlineable(const string16& input) const { | 229 bool SearchProvider::SuggestResult::IsInlineable(const string16& input) const { |
228 return StartsWith(suggestion_, input, false); | 230 return StartsWith(suggestion_, input, false); |
229 } | 231 } |
230 | 232 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 const AutocompleteInput& input, | 347 const AutocompleteInput& input, |
346 const string16& input_text, | 348 const string16& input_text, |
347 int relevance, | 349 int relevance, |
348 AutocompleteMatch::Type type, | 350 AutocompleteMatch::Type type, |
349 bool is_keyword, | 351 bool is_keyword, |
350 const string16& match_contents, | 352 const string16& match_contents, |
351 const string16& annotation, | 353 const string16& annotation, |
352 const TemplateURL* template_url, | 354 const TemplateURL* template_url, |
353 const string16& query_string, | 355 const string16& query_string, |
354 const std::string& suggest_query_params, | 356 const std::string& suggest_query_params, |
| 357 const std::string& xsrf_token, |
355 int accepted_suggestion, | 358 int accepted_suggestion, |
356 int omnibox_start_margin, | 359 int omnibox_start_margin, |
357 bool append_extra_query_params) { | 360 bool append_extra_query_params) { |
358 AutocompleteMatch match(autocomplete_provider, relevance, false, type); | 361 AutocompleteMatch match(autocomplete_provider, relevance, false, type); |
359 | 362 |
360 if (!template_url) | 363 if (!template_url) |
361 return match; | 364 return match; |
362 match.keyword = template_url->keyword(); | 365 match.keyword = template_url->keyword(); |
363 | 366 |
364 SetAndClassifyMatchContents( | 367 SetAndClassifyMatchContents( |
(...skipping 18 matching lines...) Expand all Loading... |
383 const TemplateURLRef& search_url = template_url->url_ref(); | 386 const TemplateURLRef& search_url = template_url->url_ref(); |
384 DCHECK(search_url.SupportsReplacement()); | 387 DCHECK(search_url.SupportsReplacement()); |
385 match.search_terms_args.reset( | 388 match.search_terms_args.reset( |
386 new TemplateURLRef::SearchTermsArgs(query_string)); | 389 new TemplateURLRef::SearchTermsArgs(query_string)); |
387 match.search_terms_args->original_query = input_text; | 390 match.search_terms_args->original_query = input_text; |
388 match.search_terms_args->accepted_suggestion = accepted_suggestion; | 391 match.search_terms_args->accepted_suggestion = accepted_suggestion; |
389 match.search_terms_args->omnibox_start_margin = omnibox_start_margin; | 392 match.search_terms_args->omnibox_start_margin = omnibox_start_margin; |
390 match.search_terms_args->suggest_query_params = suggest_query_params; | 393 match.search_terms_args->suggest_query_params = suggest_query_params; |
391 match.search_terms_args->append_extra_query_params = | 394 match.search_terms_args->append_extra_query_params = |
392 append_extra_query_params; | 395 append_extra_query_params; |
| 396 match.search_terms_args->xsrf_token = xsrf_token; |
393 // This is the destination URL sans assisted query stats. This must be set | 397 // This is the destination URL sans assisted query stats. This must be set |
394 // so the AutocompleteController can properly de-dupe; the controller will | 398 // so the AutocompleteController can properly de-dupe; the controller will |
395 // eventually overwrite it before it reaches the user. | 399 // eventually overwrite it before it reaches the user. |
396 match.destination_url = | 400 match.destination_url = |
397 GURL(search_url.ReplaceSearchTerms(*match.search_terms_args.get())); | 401 GURL(search_url.ReplaceSearchTerms(*match.search_terms_args.get())); |
398 | 402 |
399 // Search results don't look like URLs. | 403 // Search results don't look like URLs. |
400 match.transition = is_keyword ? | 404 match.transition = is_keyword ? |
401 content::PAGE_TRANSITION_KEYWORD : content::PAGE_TRANSITION_GENERATED; | 405 content::PAGE_TRANSITION_KEYWORD : content::PAGE_TRANSITION_GENERATED; |
402 | 406 |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 results->navigation_results.push_back(NavigationResult( | 1039 results->navigation_results.push_back(NavigationResult( |
1036 *this, url, title, is_keyword, relevance, true)); | 1040 *this, url, title, is_keyword, relevance, true)); |
1037 } | 1041 } |
1038 } else { | 1042 } else { |
1039 bool should_prefetch = static_cast<int>(index) == prefetch_index; | 1043 bool should_prefetch = static_cast<int>(index) == prefetch_index; |
1040 DictionaryValue* suggestion_detail = NULL; | 1044 DictionaryValue* suggestion_detail = NULL; |
1041 string16 match_contents = suggestion; | 1045 string16 match_contents = suggestion; |
1042 string16 disambiguating_query; | 1046 string16 disambiguating_query; |
1043 string16 annotation; | 1047 string16 annotation; |
1044 std::string suggest_query_params; | 1048 std::string suggest_query_params; |
| 1049 std::string xsrf_token; |
1045 if (suggestion_details && (type == "ENTITY") && | 1050 if (suggestion_details && (type == "ENTITY") && |
1046 suggestion_details->GetDictionary(index, &suggestion_detail) && | 1051 suggestion_details->GetDictionary(index, &suggestion_detail) && |
1047 suggestion_detail) { | 1052 suggestion_detail) { |
1048 suggestion_detail->GetString("a", &annotation); | 1053 suggestion_detail->GetString("a", &annotation); |
1049 if (suggestion_detail->GetString("dq", &disambiguating_query) && | 1054 if (suggestion_detail->GetString("dq", &disambiguating_query) && |
1050 !disambiguating_query.empty()) | 1055 !disambiguating_query.empty()) |
1051 suggestion = disambiguating_query; | 1056 suggestion = disambiguating_query; |
1052 suggestion_detail->GetString("q", &suggest_query_params); | 1057 suggestion_detail->GetString("q", &suggest_query_params); |
| 1058 } else if (suggestion_details && (type == "PERSONALIZED_QUERY") && |
| 1059 suggestion_details->GetDictionary(index, &suggestion_detail) && |
| 1060 suggestion_detail) { |
| 1061 suggestion_detail->GetString("x", &xsrf_token); |
1053 } | 1062 } |
1054 // TODO(kochi): Improve calculator suggestion presentation. | 1063 // TODO(kochi): Improve calculator suggestion presentation. |
1055 results->suggest_results.push_back(SuggestResult( | 1064 results->suggest_results.push_back(SuggestResult( |
1056 suggestion, match_contents, annotation, suggest_query_params, | 1065 suggestion, match_contents, annotation, suggest_query_params, |
1057 is_keyword, relevance, true, should_prefetch)); | 1066 xsrf_token, is_keyword, relevance, true, should_prefetch)); |
1058 } | 1067 } |
1059 } | 1068 } |
1060 | 1069 |
1061 // Apply calculated relevance scores if a valid list was not provided. | 1070 // Apply calculated relevance scores if a valid list was not provided. |
1062 if (relevances == NULL) { | 1071 if (relevances == NULL) { |
1063 ApplyCalculatedSuggestRelevance(&results->suggest_results); | 1072 ApplyCalculatedSuggestRelevance(&results->suggest_results); |
1064 ApplyCalculatedNavigationRelevance(&results->navigation_results); | 1073 ApplyCalculatedNavigationRelevance(&results->navigation_results); |
1065 } | 1074 } |
1066 // Keep the result lists sorted. | 1075 // Keep the result lists sorted. |
1067 const CompareScoredResults comparator = CompareScoredResults(); | 1076 const CompareScoredResults comparator = CompareScoredResults(); |
(...skipping 29 matching lines...) Expand all Loading... |
1097 relevance_from_server, | 1106 relevance_from_server, |
1098 false, | 1107 false, |
1099 std::string(), | 1108 std::string(), |
1100 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, | 1109 AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED, |
1101 false, | 1110 false, |
1102 input_.text(), | 1111 input_.text(), |
1103 string16(), | 1112 string16(), |
1104 input_.text(), | 1113 input_.text(), |
1105 did_not_accept_default_suggestion, | 1114 did_not_accept_default_suggestion, |
1106 std::string(), | 1115 std::string(), |
| 1116 std::string(), |
1107 &map); | 1117 &map); |
1108 } | 1118 } |
1109 if (!keyword_input_.text().empty()) { | 1119 if (!keyword_input_.text().empty()) { |
1110 const TemplateURL* keyword_url = providers_.GetKeywordProviderURL(); | 1120 const TemplateURL* keyword_url = providers_.GetKeywordProviderURL(); |
1111 // We only create the verbatim search query match for a keyword | 1121 // We only create the verbatim search query match for a keyword |
1112 // if it's not an extension keyword. Extension keywords are handled | 1122 // if it's not an extension keyword. Extension keywords are handled |
1113 // in KeywordProvider::Start(). (Extensions are complicated...) | 1123 // in KeywordProvider::Start(). (Extensions are complicated...) |
1114 // Note: in this provider, SEARCH_OTHER_ENGINE must correspond | 1124 // Note: in this provider, SEARCH_OTHER_ENGINE must correspond |
1115 // to the keyword verbatim search query. Do not create other matches | 1125 // to the keyword verbatim search query. Do not create other matches |
1116 // of type SEARCH_OTHER_ENGINE. | 1126 // of type SEARCH_OTHER_ENGINE. |
1117 if (keyword_url && | 1127 if (keyword_url && |
1118 (keyword_url->GetType() != TemplateURL::OMNIBOX_API_EXTENSION)) { | 1128 (keyword_url->GetType() != TemplateURL::OMNIBOX_API_EXTENSION)) { |
1119 bool keyword_relevance_from_server; | 1129 bool keyword_relevance_from_server; |
1120 const int keyword_verbatim_relevance = | 1130 const int keyword_verbatim_relevance = |
1121 GetKeywordVerbatimRelevance(&keyword_relevance_from_server); | 1131 GetKeywordVerbatimRelevance(&keyword_relevance_from_server); |
1122 if (keyword_verbatim_relevance > 0) { | 1132 if (keyword_verbatim_relevance > 0) { |
1123 AddMatchToMap(keyword_input_.text(), | 1133 AddMatchToMap(keyword_input_.text(), |
1124 keyword_verbatim_relevance, | 1134 keyword_verbatim_relevance, |
1125 keyword_relevance_from_server, | 1135 keyword_relevance_from_server, |
1126 false, | 1136 false, |
1127 std::string(), | 1137 std::string(), |
1128 AutocompleteMatchType::SEARCH_OTHER_ENGINE, | 1138 AutocompleteMatchType::SEARCH_OTHER_ENGINE, |
1129 true, | 1139 true, |
1130 keyword_input_.text(), | 1140 keyword_input_.text(), |
1131 string16(), | 1141 string16(), |
1132 keyword_input_.text(), | 1142 keyword_input_.text(), |
1133 did_not_accept_keyword_suggestion, | 1143 did_not_accept_keyword_suggestion, |
1134 std::string(), | 1144 std::string(), |
| 1145 std::string(), |
1135 &map); | 1146 &map); |
1136 } | 1147 } |
1137 } | 1148 } |
1138 } | 1149 } |
1139 AddHistoryResultsToMap(keyword_history_results_, true, | 1150 AddHistoryResultsToMap(keyword_history_results_, true, |
1140 did_not_accept_keyword_suggestion, &map); | 1151 did_not_accept_keyword_suggestion, &map); |
1141 AddHistoryResultsToMap(default_history_results_, false, | 1152 AddHistoryResultsToMap(default_history_results_, false, |
1142 did_not_accept_default_suggestion, &map); | 1153 did_not_accept_default_suggestion, &map); |
1143 | 1154 |
1144 AddSuggestResultsToMap(keyword_results_.suggest_results, | 1155 AddSuggestResultsToMap(keyword_results_.suggest_results, |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 false, | 1384 false, |
1374 false, | 1385 false, |
1375 std::string(), | 1386 std::string(), |
1376 AutocompleteMatchType::SEARCH_HISTORY, | 1387 AutocompleteMatchType::SEARCH_HISTORY, |
1377 is_keyword, | 1388 is_keyword, |
1378 i->suggestion(), | 1389 i->suggestion(), |
1379 string16(), | 1390 string16(), |
1380 i->suggestion(), | 1391 i->suggestion(), |
1381 did_not_accept_suggestion, | 1392 did_not_accept_suggestion, |
1382 std::string(), | 1393 std::string(), |
| 1394 std::string(), |
1383 map); | 1395 map); |
1384 } | 1396 } |
1385 UMA_HISTOGRAM_TIMES("Omnibox.SearchProvider.AddHistoryResultsTime", | 1397 UMA_HISTOGRAM_TIMES("Omnibox.SearchProvider.AddHistoryResultsTime", |
1386 base::TimeTicks::Now() - start_time); | 1398 base::TimeTicks::Now() - start_time); |
1387 } | 1399 } |
1388 | 1400 |
1389 SearchProvider::SuggestResults SearchProvider::ScoreHistoryResults( | 1401 SearchProvider::SuggestResults SearchProvider::ScoreHistoryResults( |
1390 const HistoryResults& results, | 1402 const HistoryResults& results, |
1391 bool base_prevent_inline_autocomplete, | 1403 bool base_prevent_inline_autocomplete, |
1392 bool input_multiple_words, | 1404 bool input_multiple_words, |
(...skipping 30 matching lines...) Expand all Loading... |
1423 classifier->Classify(i->term, false, false, &match, NULL); | 1435 classifier->Classify(i->term, false, false, &match, NULL); |
1424 prevent_inline_autocomplete = | 1436 prevent_inline_autocomplete = |
1425 !AutocompleteMatch::IsSearchType(match.type); | 1437 !AutocompleteMatch::IsSearchType(match.type); |
1426 } | 1438 } |
1427 | 1439 |
1428 int relevance = CalculateRelevanceForHistory( | 1440 int relevance = CalculateRelevanceForHistory( |
1429 i->time, is_keyword, !prevent_inline_autocomplete, | 1441 i->time, is_keyword, !prevent_inline_autocomplete, |
1430 prevent_search_history_inlining); | 1442 prevent_search_history_inlining); |
1431 scored_results.push_back( | 1443 scored_results.push_back( |
1432 SuggestResult(i->term, string16(), string16(), std::string(), | 1444 SuggestResult(i->term, string16(), string16(), std::string(), |
1433 is_keyword, relevance, false, false)); | 1445 std::string(), is_keyword, relevance, false, false)); |
1434 } | 1446 } |
1435 | 1447 |
1436 // History returns results sorted for us. However, we may have docked some | 1448 // History returns results sorted for us. However, we may have docked some |
1437 // results' scores, so things are no longer in order. Do a stable sort to get | 1449 // results' scores, so things are no longer in order. Do a stable sort to get |
1438 // things back in order without otherwise disturbing results with equal | 1450 // things back in order without otherwise disturbing results with equal |
1439 // scores, then force the scores to be unique, so that the order in which | 1451 // scores, then force the scores to be unique, so that the order in which |
1440 // they're shown is deterministic. | 1452 // they're shown is deterministic. |
1441 std::stable_sort(scored_results.begin(), scored_results.end(), | 1453 std::stable_sort(scored_results.begin(), scored_results.end(), |
1442 CompareScoredResults()); | 1454 CompareScoredResults()); |
1443 int last_relevance = 0; | 1455 int last_relevance = 0; |
(...skipping 18 matching lines...) Expand all Loading... |
1462 results[i].relevance_from_server(), | 1474 results[i].relevance_from_server(), |
1463 results[i].should_prefetch(), | 1475 results[i].should_prefetch(), |
1464 metadata, | 1476 metadata, |
1465 AutocompleteMatchType::SEARCH_SUGGEST, | 1477 AutocompleteMatchType::SEARCH_SUGGEST, |
1466 is_keyword, | 1478 is_keyword, |
1467 results[i].match_contents(), | 1479 results[i].match_contents(), |
1468 results[i].annotation(), | 1480 results[i].annotation(), |
1469 results[i].suggestion(), | 1481 results[i].suggestion(), |
1470 i, | 1482 i, |
1471 results[i].suggest_query_params(), | 1483 results[i].suggest_query_params(), |
| 1484 results[i].xsrf_token(), |
1472 map); | 1485 map); |
1473 } | 1486 } |
1474 } | 1487 } |
1475 | 1488 |
1476 int SearchProvider::GetVerbatimRelevance(bool* relevance_from_server) const { | 1489 int SearchProvider::GetVerbatimRelevance(bool* relevance_from_server) const { |
1477 // Use the suggested verbatim relevance score if it is non-negative (valid), | 1490 // Use the suggested verbatim relevance score if it is non-negative (valid), |
1478 // if inline autocomplete isn't prevented (always show verbatim on backspace), | 1491 // if inline autocomplete isn't prevented (always show verbatim on backspace), |
1479 // and if it won't suppress verbatim, leaving no default provider matches. | 1492 // and if it won't suppress verbatim, leaving no default provider matches. |
1480 // Otherwise, if the default provider returned no matches and was still able | 1493 // Otherwise, if the default provider returned no matches and was still able |
1481 // to suppress verbatim, the user would have no search/nav matches and may be | 1494 // to suppress verbatim, the user would have no search/nav matches and may be |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1586 bool relevance_from_server, | 1599 bool relevance_from_server, |
1587 bool should_prefetch, | 1600 bool should_prefetch, |
1588 const std::string& metadata, | 1601 const std::string& metadata, |
1589 AutocompleteMatch::Type type, | 1602 AutocompleteMatch::Type type, |
1590 bool is_keyword, | 1603 bool is_keyword, |
1591 const string16& match_contents, | 1604 const string16& match_contents, |
1592 const string16& annotation, | 1605 const string16& annotation, |
1593 const string16& query_string, | 1606 const string16& query_string, |
1594 int accepted_suggestion, | 1607 int accepted_suggestion, |
1595 const std::string& suggest_query_params, | 1608 const std::string& suggest_query_params, |
| 1609 const std::string& xsrf_token, |
1596 MatchMap* map) { | 1610 MatchMap* map) { |
1597 // On non-mobile, ask the instant controller for the appropriate start margin. | 1611 // On non-mobile, ask the instant controller for the appropriate start margin. |
1598 // On mobile the start margin is unused, so leave the value as default there. | 1612 // On mobile the start margin is unused, so leave the value as default there. |
1599 int omnibox_start_margin = chrome::kDisableStartMargin; | 1613 int omnibox_start_margin = chrome::kDisableStartMargin; |
1600 #if !defined(OS_ANDROID) && !defined(IOS) | 1614 #if !defined(OS_ANDROID) && !defined(IOS) |
1601 if (chrome::IsInstantExtendedAPIEnabled()) { | 1615 if (chrome::IsInstantExtendedAPIEnabled()) { |
1602 Browser* browser = | 1616 Browser* browser = |
1603 chrome::FindBrowserWithProfile(profile_, chrome::GetActiveDesktop()); | 1617 chrome::FindBrowserWithProfile(profile_, chrome::GetActiveDesktop()); |
1604 if (browser && browser->instant_controller() && | 1618 if (browser && browser->instant_controller() && |
1605 browser->instant_controller()->instant()) { | 1619 browser->instant_controller()->instant()) { |
1606 omnibox_start_margin = | 1620 omnibox_start_margin = |
1607 browser->instant_controller()->instant()->omnibox_bounds().x(); | 1621 browser->instant_controller()->instant()->omnibox_bounds().x(); |
1608 } | 1622 } |
1609 } | 1623 } |
1610 #endif // !defined(OS_ANDROID) && !defined(IOS) | 1624 #endif // !defined(OS_ANDROID) && !defined(IOS) |
1611 | 1625 |
1612 const TemplateURL* template_url = is_keyword ? | 1626 const TemplateURL* template_url = is_keyword ? |
1613 providers_.GetKeywordProviderURL() : providers_.GetDefaultProviderURL(); | 1627 providers_.GetKeywordProviderURL() : providers_.GetDefaultProviderURL(); |
1614 AutocompleteMatch match = CreateSearchSuggestion( | 1628 AutocompleteMatch match = CreateSearchSuggestion( |
1615 this, input_, input_text, relevance, type, is_keyword, match_contents, | 1629 this, input_, input_text, relevance, type, is_keyword, match_contents, |
1616 annotation, template_url, query_string, suggest_query_params, | 1630 annotation, template_url, query_string, suggest_query_params, |
1617 accepted_suggestion, omnibox_start_margin, | 1631 xsrf_token, accepted_suggestion, omnibox_start_margin, |
1618 !is_keyword || providers_.default_provider().empty()); | 1632 !is_keyword || providers_.default_provider().empty()); |
1619 if (!match.destination_url.is_valid()) | 1633 if (!match.destination_url.is_valid()) |
1620 return; | 1634 return; |
1621 match.search_terms_args->bookmark_bar_pinned = | 1635 match.search_terms_args->bookmark_bar_pinned = |
1622 profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); | 1636 profile_->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar); |
1623 match.RecordAdditionalInfo(kRelevanceFromServerKey, | 1637 match.RecordAdditionalInfo(kRelevanceFromServerKey, |
1624 relevance_from_server ? kTrue : kFalse); | 1638 relevance_from_server ? kTrue : kFalse); |
1625 match.RecordAdditionalInfo(kShouldPrefetchKey, | 1639 match.RecordAdditionalInfo(kShouldPrefetchKey, |
1626 should_prefetch ? kTrue : kFalse); | 1640 should_prefetch ? kTrue : kFalse); |
1627 | 1641 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1779 it->set_relevance(max_query_relevance); | 1793 it->set_relevance(max_query_relevance); |
1780 it->set_relevance_from_server(relevance_from_server); | 1794 it->set_relevance_from_server(relevance_from_server); |
1781 } | 1795 } |
1782 } | 1796 } |
1783 | 1797 |
1784 void SearchProvider::UpdateDone() { | 1798 void SearchProvider::UpdateDone() { |
1785 // We're done when the timer isn't running, there are no suggest queries | 1799 // We're done when the timer isn't running, there are no suggest queries |
1786 // pending, and we're not waiting on Instant. | 1800 // pending, and we're not waiting on Instant. |
1787 done_ = !timer_.IsRunning() && (suggest_results_pending_ == 0); | 1801 done_ = !timer_.IsRunning() && (suggest_results_pending_ == 0); |
1788 } | 1802 } |
OLD | NEW |