| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/autocomplete_controller.h" | 5 #include "chrome/browser/autocomplete/autocomplete_controller.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 // the providers again. | 271 // the providers again. |
| 272 UpdateResult(false); | 272 UpdateResult(false); |
| 273 } | 273 } |
| 274 | 274 |
| 275 void AutocompleteController::OnProviderUpdate(bool updated_matches) { | 275 void AutocompleteController::OnProviderUpdate(bool updated_matches) { |
| 276 if (in_zero_suggest_) { | 276 if (in_zero_suggest_) { |
| 277 // We got ZeroSuggest results before Start(). Show only those results, | 277 // We got ZeroSuggest results before Start(). Show only those results, |
| 278 // because results from other providers are stale. | 278 // because results from other providers are stale. |
| 279 result_.Reset(); | 279 result_.Reset(); |
| 280 result_.AppendMatches(zero_suggest_provider_->matches()); | 280 result_.AppendMatches(zero_suggest_provider_->matches()); |
| 281 result_.SortAndCull(input_); | 281 result_.SortAndCull(input_, profile_); |
| 282 NotifyChanged(true); | 282 NotifyChanged(true); |
| 283 } else { | 283 } else { |
| 284 CheckIfDone(); | 284 CheckIfDone(); |
| 285 // Multiple providers may provide synchronous results, so we only update the | 285 // Multiple providers may provide synchronous results, so we only update the |
| 286 // results if we're not in Start(). | 286 // results if we're not in Start(). |
| 287 if (!in_start_ && (updated_matches || done_)) | 287 if (!in_start_ && (updated_matches || done_)) |
| 288 UpdateResult(false); | 288 UpdateResult(false); |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 | 291 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 304 | 304 |
| 305 void AutocompleteController::UpdateResult(bool is_synchronous_pass) { | 305 void AutocompleteController::UpdateResult(bool is_synchronous_pass) { |
| 306 AutocompleteResult last_result; | 306 AutocompleteResult last_result; |
| 307 last_result.Swap(&result_); | 307 last_result.Swap(&result_); |
| 308 | 308 |
| 309 for (ACProviders::const_iterator i(providers_.begin()); i != providers_.end(); | 309 for (ACProviders::const_iterator i(providers_.begin()); i != providers_.end(); |
| 310 ++i) | 310 ++i) |
| 311 result_.AppendMatches((*i)->matches()); | 311 result_.AppendMatches((*i)->matches()); |
| 312 | 312 |
| 313 // Sort the matches and trim to a small number of "best" matches. | 313 // Sort the matches and trim to a small number of "best" matches. |
| 314 result_.SortAndCull(input_); | 314 result_.SortAndCull(input_, profile_); |
| 315 | 315 |
| 316 // Need to validate before invoking CopyOldMatches as the old matches are not | 316 // Need to validate before invoking CopyOldMatches as the old matches are not |
| 317 // valid against the current input. | 317 // valid against the current input. |
| 318 #ifndef NDEBUG | 318 #ifndef NDEBUG |
| 319 result_.Validate(); | 319 result_.Validate(); |
| 320 #endif | 320 #endif |
| 321 | 321 |
| 322 if (!done_) { | 322 if (!done_) { |
| 323 // This conditional needs to match the conditional in Start that invokes | 323 // This conditional needs to match the conditional in Start that invokes |
| 324 // StartExpireTimer. | 324 // StartExpireTimer. |
| 325 result_.CopyOldMatches(input_, last_result); | 325 result_.CopyOldMatches(input_, last_result, profile_); |
| 326 } | 326 } |
| 327 | 327 |
| 328 UpdateKeywordDescriptions(&result_); | 328 UpdateKeywordDescriptions(&result_); |
| 329 UpdateAssociatedKeywords(&result_); | 329 UpdateAssociatedKeywords(&result_); |
| 330 UpdateAssistedQueryStats(&result_); | 330 UpdateAssistedQueryStats(&result_); |
| 331 | 331 |
| 332 bool notify_default_match = is_synchronous_pass; | 332 bool notify_default_match = is_synchronous_pass; |
| 333 if (!is_synchronous_pass) { | 333 if (!is_synchronous_pass) { |
| 334 const bool last_default_was_valid = | 334 const bool last_default_was_valid = |
| 335 last_result.default_match() != last_result.end(); | 335 last_result.default_match() != last_result.end(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 } else { | 402 } else { |
| 403 count++; | 403 count++; |
| 404 } | 404 } |
| 405 last_type = type; | 405 last_type = type; |
| 406 } | 406 } |
| 407 AppendAvailableAutocompletion(last_type, count, &autocompletions); | 407 AppendAvailableAutocompletion(last_type, count, &autocompletions); |
| 408 | 408 |
| 409 // Go over all matches and set AQS if the match supports it. | 409 // Go over all matches and set AQS if the match supports it. |
| 410 for (size_t index = 0; index < result->size(); ++index) { | 410 for (size_t index = 0; index < result->size(); ++index) { |
| 411 AutocompleteMatch* match = result->match_at(index); | 411 AutocompleteMatch* match = result->match_at(index); |
| 412 const TemplateURL* template_url = match->GetTemplateURL(profile_); | 412 const TemplateURL* template_url = match->GetTemplateURL(profile_, false); |
| 413 if (!template_url || !match->search_terms_args.get()) | 413 if (!template_url || !match->search_terms_args.get()) |
| 414 continue; | 414 continue; |
| 415 match->search_terms_args->assisted_query_stats = | 415 match->search_terms_args->assisted_query_stats = |
| 416 base::StringPrintf("chrome.%" PRIuS ".%s", | 416 base::StringPrintf("chrome.%" PRIuS ".%s", |
| 417 index, | 417 index, |
| 418 autocompletions.c_str()); | 418 autocompletions.c_str()); |
| 419 match->destination_url = GURL(template_url->url_ref().ReplaceSearchTerms( | 419 match->destination_url = GURL(template_url->url_ref().ReplaceSearchTerms( |
| 420 *match->search_terms_args)); | 420 *match->search_terms_args)); |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 | 423 |
| 424 void AutocompleteController::UpdateKeywordDescriptions( | 424 void AutocompleteController::UpdateKeywordDescriptions( |
| 425 AutocompleteResult* result) { | 425 AutocompleteResult* result) { |
| 426 string16 last_keyword; | 426 string16 last_keyword; |
| 427 for (AutocompleteResult::iterator i(result->begin()); i != result->end(); | 427 for (AutocompleteResult::iterator i(result->begin()); i != result->end(); |
| 428 ++i) { | 428 ++i) { |
| 429 if ((i->provider->type() == AutocompleteProvider::TYPE_KEYWORD && | 429 if ((i->provider->type() == AutocompleteProvider::TYPE_KEYWORD && |
| 430 !i->keyword.empty()) || | 430 !i->keyword.empty()) || |
| 431 (i->provider->type() == AutocompleteProvider::TYPE_SEARCH && | 431 (i->provider->type() == AutocompleteProvider::TYPE_SEARCH && |
| 432 AutocompleteMatch::IsSearchType(i->type))) { | 432 AutocompleteMatch::IsSearchType(i->type))) { |
| 433 i->description.clear(); | 433 i->description.clear(); |
| 434 i->description_class.clear(); | 434 i->description_class.clear(); |
| 435 DCHECK(!i->keyword.empty()); | 435 DCHECK(!i->keyword.empty()); |
| 436 if (i->keyword != last_keyword) { | 436 if (i->keyword != last_keyword) { |
| 437 const TemplateURL* template_url = i->GetTemplateURL(profile_); | 437 const TemplateURL* template_url = i->GetTemplateURL(profile_, false); |
| 438 if (template_url) { | 438 if (template_url) { |
| 439 i->description = l10n_util::GetStringFUTF16( | 439 i->description = l10n_util::GetStringFUTF16( |
| 440 IDS_AUTOCOMPLETE_SEARCH_DESCRIPTION, | 440 IDS_AUTOCOMPLETE_SEARCH_DESCRIPTION, |
| 441 template_url->AdjustedShortNameForLocaleDirection()); | 441 template_url->AdjustedShortNameForLocaleDirection()); |
| 442 i->description_class.push_back( | 442 i->description_class.push_back( |
| 443 ACMatchClassification(0, ACMatchClassification::DIM)); | 443 ACMatchClassification(0, ACMatchClassification::DIM)); |
| 444 } | 444 } |
| 445 last_keyword = i->keyword; | 445 last_keyword = i->keyword; |
| 446 } | 446 } |
| 447 } else { | 447 } else { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 471 } | 471 } |
| 472 done_ = true; | 472 done_ = true; |
| 473 } | 473 } |
| 474 | 474 |
| 475 void AutocompleteController::StartExpireTimer() { | 475 void AutocompleteController::StartExpireTimer() { |
| 476 if (result_.HasCopiedMatches()) | 476 if (result_.HasCopiedMatches()) |
| 477 expire_timer_.Start(FROM_HERE, | 477 expire_timer_.Start(FROM_HERE, |
| 478 base::TimeDelta::FromMilliseconds(kExpireTimeMS), | 478 base::TimeDelta::FromMilliseconds(kExpireTimeMS), |
| 479 this, &AutocompleteController::ExpireCopiedEntries); | 479 this, &AutocompleteController::ExpireCopiedEntries); |
| 480 } | 480 } |
| OLD | NEW |