| Index: chrome/browser/autocomplete/search_provider.cc | 
| diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc | 
| index f1e02da9162e21b9aee5ff4151960043caa7cd30..7f72b8f1873026b171c468de684616c19361a8b7 100644 | 
| --- a/chrome/browser/autocomplete/search_provider.cc | 
| +++ b/chrome/browser/autocomplete/search_provider.cc | 
| @@ -227,11 +227,13 @@ void SearchProvider::Start(const AutocompleteInput& input, | 
| return; | 
| } | 
|  | 
| -  keyword_input_text_.clear(); | 
| +  keyword_input_ = input; | 
| const TemplateURL* keyword_provider = | 
| -      KeywordProvider::GetSubstitutingTemplateURLForInput(profile_, input, | 
| -                                                          &keyword_input_text_); | 
| -  if (keyword_input_text_.empty()) | 
| +      KeywordProvider::GetSubstitutingTemplateURLForInput(model, | 
| +                                                          &keyword_input_); | 
| +  if (keyword_provider == NULL) | 
| +    keyword_input_.Clear(); | 
| +  else if (keyword_input_.text().empty()) | 
| keyword_provider = NULL; | 
|  | 
| const TemplateURL* default_provider = model->GetDefaultSearchProvider(); | 
| @@ -330,9 +332,9 @@ void SearchProvider::Run() { | 
| time_suggest_request_sent_ = base::TimeTicks::Now(); | 
|  | 
| default_fetcher_.reset(CreateSuggestFetcher(kDefaultProviderURLFetcherID, | 
| -      providers_.GetDefaultProviderURL(), input_.text())); | 
| +      providers_.GetDefaultProviderURL(), input_)); | 
| keyword_fetcher_.reset(CreateSuggestFetcher(kKeywordProviderURLFetcherID, | 
| -      providers_.GetKeywordProviderURL(), keyword_input_text_)); | 
| +      providers_.GetKeywordProviderURL(), keyword_input_)); | 
|  | 
| // Both the above can fail if the providers have been modified or deleted | 
| // since the query began. | 
| @@ -474,7 +476,7 @@ void SearchProvider::DoHistoryQuery(bool minimal_changes) { | 
| const TemplateURL* keyword_url = providers_.GetKeywordProviderURL(); | 
| if (keyword_url) { | 
| url_db->GetMostRecentKeywordSearchTerms(keyword_url->id(), | 
| -        keyword_input_text_, num_matches, &keyword_history_results_); | 
| +        keyword_input_.text(), num_matches, &keyword_history_results_); | 
| } | 
| } | 
|  | 
| @@ -595,11 +597,11 @@ void SearchProvider::ClearResults() { | 
| } | 
|  | 
| void SearchProvider::RemoveStaleResults() { | 
| -  // Keyword provider results should match |keyword_input_text_|, unless | 
| +  // Keyword provider results should match |keyword_input_.text()|, unless | 
| // the input was just changed to non-keyword mode; in that case, compare | 
| // against |input_.text()|. | 
| const string16& keyword_input = | 
| -      !keyword_input_text_.empty() ? keyword_input_text_ : input_.text(); | 
| +      !keyword_input_.text().empty() ? keyword_input_.text() : input_.text(); | 
| RemoveStaleSuggestResults(&keyword_suggest_results_, keyword_input); | 
| RemoveStaleSuggestResults(&default_suggest_results_, input_.text()); | 
| RemoveStaleNavigationResults(&keyword_navigation_results_, keyword_input); | 
| @@ -650,13 +652,13 @@ void SearchProvider::ApplyCalculatedNavigationRelevance(NavigationResults* list, | 
| net::URLFetcher* SearchProvider::CreateSuggestFetcher( | 
| int id, | 
| const TemplateURL* template_url, | 
| -    const string16& text) { | 
| +    const AutocompleteInput& input) { | 
| if (!template_url || template_url->suggestions_url().empty()) | 
| return NULL; | 
|  | 
| // Bail if the suggestion URL is invalid with the given replacements. | 
| -  TemplateURLRef::SearchTermsArgs search_term_args(text); | 
| -  search_term_args.cursor_position = input_.cursor_position(); | 
| +  TemplateURLRef::SearchTermsArgs search_term_args(input.text()); | 
| +  search_term_args.cursor_position = input.cursor_position(); | 
| GURL suggest_url(template_url->suggestions_url_ref().ReplaceSearchTerms( | 
| search_term_args)); | 
| if (!suggest_url.is_valid()) | 
| @@ -685,7 +687,8 @@ bool SearchProvider::ParseSuggestResults(Value* root_val, bool is_keyword) { | 
| string16 query; | 
| ListValue* root_list = NULL; | 
| ListValue* results = NULL; | 
| -  const string16& input_text = is_keyword ? keyword_input_text_ : input_.text(); | 
| +  const string16& input_text = | 
| +      is_keyword ? keyword_input_.text() : input_.text(); | 
| if (!root_val->GetAsList(&root_list) || !root_list->GetString(0, &query) || | 
| (query != input_text) || !root_list->GetList(1, &results)) | 
| return false; | 
| @@ -950,7 +953,8 @@ void SearchProvider::AddHistoryResultsToMap(const HistoryResults& results, | 
|  | 
| bool prevent_inline_autocomplete = input_.prevent_inline_autocomplete() || | 
| (input_.type() == AutocompleteInput::URL); | 
| -  const string16& input_text = is_keyword ? keyword_input_text_ : input_.text(); | 
| +  const string16& input_text = | 
| +      is_keyword ? keyword_input_.text() : input_.text(); | 
| bool input_multiple_words = HasMultipleWords(input_text); | 
|  | 
| SuggestResults scored_results; | 
| @@ -1043,7 +1047,8 @@ SearchProvider::SuggestResults SearchProvider::ScoreHistoryResults( | 
| void SearchProvider::AddSuggestResultsToMap(const SuggestResults& results, | 
| bool is_keyword, | 
| MatchMap* map) { | 
| -  const string16& input_text = is_keyword ? keyword_input_text_ : input_.text(); | 
| +  const string16& input_text = | 
| +      is_keyword ? keyword_input_.text() : input_.text(); | 
| for (size_t i = 0; i < results.size(); ++i) { | 
| AddMatchToMap(results[i].suggestion(), input_text, results[i].relevance(), | 
| AutocompleteMatch::SEARCH_SUGGEST, i, is_keyword, map); | 
| @@ -1241,7 +1246,7 @@ void SearchProvider::AddMatchToMap(const string16& query_string, | 
| AutocompleteMatch SearchProvider::NavigationToMatch( | 
| const NavigationResult& navigation, | 
| bool is_keyword) { | 
| -  const string16& input = is_keyword ? keyword_input_text_ : input_.text(); | 
| +  const string16& input = is_keyword ? keyword_input_.text() : input_.text(); | 
| AutocompleteMatch match(this, navigation.relevance(), false, | 
| AutocompleteMatch::NAVSUGGEST); | 
| match.destination_url = navigation.url(); | 
|  |