Index: components/omnibox/search_provider.cc |
diff --git a/components/omnibox/search_provider.cc b/components/omnibox/search_provider.cc |
index a9cd7b7fe3eef8168757e0ea582ee84243161d40..4cd192fa4b5f29bc663ff286d0cc575dae457156 100644 |
--- a/components/omnibox/search_provider.cc |
+++ b/components/omnibox/search_provider.cc |
@@ -116,9 +116,6 @@ class SearchProvider::CompareScoredResults { |
// SearchProvider ------------------------------------------------------------- |
-// static |
-int SearchProvider::kMinimumTimeBetweenSuggestQueriesMs = 100; |
- |
SearchProvider::SearchProvider( |
AutocompleteProviderListener* listener, |
TemplateURLService* template_url_service, |
@@ -579,6 +576,21 @@ void SearchProvider::DoHistoryQuery(bool minimal_changes) { |
} |
} |
+base::TimeDelta SearchProvider::GetSuggestQueryDelay() const { |
+ bool from_last_keystroke; |
+ int polling_delay_ms; |
+ OmniboxFieldTrial::GetSuggestPollingStrategy(&from_last_keystroke, |
+ &polling_delay_ms); |
+ |
+ base::TimeDelta delay(base::TimeDelta::FromMilliseconds(polling_delay_ms)); |
+ if (from_last_keystroke) |
+ return delay; |
+ |
+ base::TimeDelta time_since_last_suggest_request = |
+ base::TimeTicks::Now() - time_suggest_request_sent_; |
+ return std::max(base::TimeDelta(), delay - time_since_last_suggest_request); |
+} |
+ |
void SearchProvider::StartOrStopSuggestQuery(bool minimal_changes) { |
if (!IsQuerySuitableForSuggest()) { |
StopSuggest(); |
@@ -586,6 +598,9 @@ void SearchProvider::StartOrStopSuggestQuery(bool minimal_changes) { |
return; |
} |
+ if (OmniboxFieldTrial::DisableResultsCaching()) |
+ ClearAllResults(); |
+ |
// For the minimal_changes case, if we finished the previous query and still |
// have its results, or are allowed to keep running it, just do that, rather |
// than starting a new query. |
@@ -612,16 +627,16 @@ void SearchProvider::StartOrStopSuggestQuery(bool minimal_changes) { |
if (!input_.want_asynchronous_matches()) |
return; |
- // To avoid flooding the suggest server, don't send a query until at |
- // least 100 ms since the last query. |
- base::TimeTicks next_suggest_time(time_suggest_request_sent_ + |
- base::TimeDelta::FromMilliseconds(kMinimumTimeBetweenSuggestQueriesMs)); |
- base::TimeTicks now(base::TimeTicks::Now()); |
- if (now >= next_suggest_time) { |
+ // Kick off a timer that will start the URL fetch if it completes before |
+ // the user types another character. Requests may be delayed to avoid |
+ // flooding the server with requests that are likely to be thrown away later |
+ // anyway. |
+ const base::TimeDelta delay = GetSuggestQueryDelay(); |
+ if (delay <= base::TimeDelta()) { |
Run(); |
return; |
} |
- timer_.Start(FROM_HERE, next_suggest_time - now, this, &SearchProvider::Run); |
+ timer_.Start(FROM_HERE, delay, this, &SearchProvider::Run); |
} |
bool SearchProvider::IsQuerySuitableForSuggest() const { |