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

Side by Side Diff: components/omnibox/search_provider.cc

Issue 985503002: Omnibox - Make Omnibox Extensions Ignore Stop() Calls Due to User Idleness (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
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 "components/omnibox/search_provider.h" 5 #include "components/omnibox/search_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 TemplateURLService* model = providers_.template_url_service(); 196 TemplateURLService* model = providers_.template_url_service();
197 DCHECK(model); 197 DCHECK(model);
198 model->Load(); 198 model->Load();
199 199
200 matches_.clear(); 200 matches_.clear();
201 field_trial_triggered_ = false; 201 field_trial_triggered_ = false;
202 202
203 // Can't return search/suggest results for bogus input. 203 // Can't return search/suggest results for bogus input.
204 if (called_due_to_focus || 204 if (called_due_to_focus ||
205 input.type() == metrics::OmniboxInputType::INVALID) { 205 input.type() == metrics::OmniboxInputType::INVALID) {
206 Stop(true); 206 Stop(true, false);
207 return; 207 return;
208 } 208 }
209 209
210 keyword_input_ = input; 210 keyword_input_ = input;
211 const TemplateURL* keyword_provider = 211 const TemplateURL* keyword_provider =
212 KeywordProvider::GetSubstitutingTemplateURLForInput(model, 212 KeywordProvider::GetSubstitutingTemplateURLForInput(model,
213 &keyword_input_); 213 &keyword_input_);
214 if (keyword_provider == NULL) 214 if (keyword_provider == NULL)
215 keyword_input_.Clear(); 215 keyword_input_.Clear();
216 else if (keyword_input_.text().empty()) 216 else if (keyword_input_.text().empty())
217 keyword_provider = NULL; 217 keyword_provider = NULL;
218 218
219 const TemplateURL* default_provider = model->GetDefaultSearchProvider(); 219 const TemplateURL* default_provider = model->GetDefaultSearchProvider();
220 if (default_provider && 220 if (default_provider &&
221 !default_provider->SupportsReplacement(model->search_terms_data())) 221 !default_provider->SupportsReplacement(model->search_terms_data()))
222 default_provider = NULL; 222 default_provider = NULL;
223 223
224 if (keyword_provider == default_provider) 224 if (keyword_provider == default_provider)
225 default_provider = NULL; // No use in querying the same provider twice. 225 default_provider = NULL; // No use in querying the same provider twice.
226 226
227 if (!default_provider && !keyword_provider) { 227 if (!default_provider && !keyword_provider) {
228 // No valid providers. 228 // No valid providers.
229 Stop(true); 229 Stop(true, false);
230 return; 230 return;
231 } 231 }
232 232
233 // If we're still running an old query but have since changed the query text 233 // If we're still running an old query but have since changed the query text
234 // or the providers, abort the query. 234 // or the providers, abort the query.
235 base::string16 default_provider_keyword(default_provider ? 235 base::string16 default_provider_keyword(default_provider ?
236 default_provider->keyword() : base::string16()); 236 default_provider->keyword() : base::string16());
237 base::string16 keyword_provider_keyword(keyword_provider ? 237 base::string16 keyword_provider_keyword(keyword_provider ?
238 keyword_provider->keyword() : base::string16()); 238 keyword_provider->keyword() : base::string16());
239 if (!minimal_changes || 239 if (!minimal_changes ||
240 !providers_.equal(default_provider_keyword, keyword_provider_keyword)) { 240 !providers_.equal(default_provider_keyword, keyword_provider_keyword)) {
241 // Cancel any in-flight suggest requests. 241 // Cancel any in-flight suggest requests.
242 if (!done_) 242 if (!done_)
243 Stop(false); 243 Stop(false, false);
244 } 244 }
245 245
246 providers_.set(default_provider_keyword, keyword_provider_keyword); 246 providers_.set(default_provider_keyword, keyword_provider_keyword);
247 247
248 if (input.text().empty()) { 248 if (input.text().empty()) {
249 // User typed "?" alone. Give them a placeholder result indicating what 249 // User typed "?" alone. Give them a placeholder result indicating what
250 // this syntax does. 250 // this syntax does.
251 if (default_provider) { 251 if (default_provider) {
252 AutocompleteMatch match; 252 AutocompleteMatch match;
253 match.provider = this; 253 match.provider = this;
254 match.contents.assign(l10n_util::GetStringUTF16(IDS_EMPTY_KEYWORD_VALUE)); 254 match.contents.assign(l10n_util::GetStringUTF16(IDS_EMPTY_KEYWORD_VALUE));
255 match.contents_class.push_back( 255 match.contents_class.push_back(
256 ACMatchClassification(0, ACMatchClassification::NONE)); 256 ACMatchClassification(0, ACMatchClassification::NONE));
257 match.keyword = providers_.default_provider(); 257 match.keyword = providers_.default_provider();
258 match.allowed_to_be_default_match = true; 258 match.allowed_to_be_default_match = true;
259 matches_.push_back(match); 259 matches_.push_back(match);
260 } 260 }
261 Stop(true); 261 Stop(true, false);
262 return; 262 return;
263 } 263 }
264 264
265 input_ = input; 265 input_ = input;
266 266
267 DoHistoryQuery(minimal_changes); 267 DoHistoryQuery(minimal_changes);
268 // Answers needs scored history results before any suggest query has been 268 // Answers needs scored history results before any suggest query has been
269 // started, since the query for answer-bearing results needs additional 269 // started, since the query for answer-bearing results needs additional
270 // prefetch information based on the highest-scored local history result. 270 // prefetch information based on the highest-scored local history result.
271 if (OmniboxFieldTrial::EnableAnswersInSuggest()) { 271 if (OmniboxFieldTrial::EnableAnswersInSuggest()) {
272 ScoreHistoryResults(raw_default_history_results_, 272 ScoreHistoryResults(raw_default_history_results_,
273 false, 273 false,
274 &transformed_default_history_results_); 274 &transformed_default_history_results_);
275 ScoreHistoryResults(raw_keyword_history_results_, 275 ScoreHistoryResults(raw_keyword_history_results_,
276 true, 276 true,
277 &transformed_keyword_history_results_); 277 &transformed_keyword_history_results_);
278 prefetch_data_ = FindAnswersPrefetchData(); 278 prefetch_data_ = FindAnswersPrefetchData();
279 279
280 // Raw results are not needed any more. 280 // Raw results are not needed any more.
281 raw_default_history_results_.clear(); 281 raw_default_history_results_.clear();
282 raw_keyword_history_results_.clear(); 282 raw_keyword_history_results_.clear();
283 } 283 }
284 284
285 StartOrStopSuggestQuery(minimal_changes); 285 StartOrStopSuggestQuery(minimal_changes);
286 UpdateMatches(); 286 UpdateMatches();
287 } 287 }
288 288
289 void SearchProvider::Stop(bool clear_cached_results) { 289 void SearchProvider::Stop(bool clear_cached_results,
290 bool user_inactivity_timer) {
290 StopSuggest(); 291 StopSuggest();
291 done_ = true; 292 done_ = true;
292 293
293 if (clear_cached_results) 294 if (clear_cached_results)
294 ClearAllResults(); 295 ClearAllResults();
295 } 296 }
296 297
297 const TemplateURL* SearchProvider::GetTemplateURL(bool is_keyword) const { 298 const TemplateURL* SearchProvider::GetTemplateURL(bool is_keyword) const {
298 return is_keyword ? providers_.GetKeywordProviderURL() 299 return is_keyword ? providers_.GetKeywordProviderURL()
299 : providers_.GetDefaultProviderURL(); 300 : providers_.GetDefaultProviderURL();
(...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1449 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i) 1450 for (MatchMap::const_iterator i(map.begin()); i != map.end(); ++i)
1450 matches.push_back(i->second); 1451 matches.push_back(i->second);
1451 std::sort(matches.begin(), matches.end(), &AutocompleteMatch::MoreRelevant); 1452 std::sort(matches.begin(), matches.end(), &AutocompleteMatch::MoreRelevant);
1452 1453
1453 // If there is a top scoring entry, find the corresponding answer. 1454 // If there is a top scoring entry, find the corresponding answer.
1454 if (!matches.empty()) 1455 if (!matches.empty())
1455 return answers_cache_.GetTopAnswerEntry(matches[0].contents); 1456 return answers_cache_.GetTopAnswerEntry(matches[0].contents);
1456 1457
1457 return AnswersQueryData(); 1458 return AnswersQueryData();
1458 } 1459 }
OLDNEW
« components/omnibox/keyword_provider.cc ('K') | « components/omnibox/search_provider.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698