| Index: chrome/browser/autocomplete/history_url_provider.cc
|
| ===================================================================
|
| --- chrome/browser/autocomplete/history_url_provider.cc (revision 31214)
|
| +++ chrome/browser/autocomplete/history_url_provider.cc (working copy)
|
| @@ -68,9 +68,8 @@
|
| DCHECK(done_);
|
|
|
| // Delete the match from the history DB.
|
| - HistoryService* history_service =
|
| - profile_ ? profile_->GetHistoryService(Profile::EXPLICIT_ACCESS) :
|
| - history_service_;
|
| + HistoryService* const history_service =
|
| + profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
|
| GURL selected_url(match.destination_url);
|
| if (!history_service || !selected_url.is_valid()) {
|
| NOTREACHED() << "Can't delete requested URL";
|
| @@ -628,16 +627,17 @@
|
| matches_.push_back(SuggestExactInput(input, trim_http));
|
|
|
| // We'll need the history service to run both passes, so try to obtain it.
|
| - HistoryService* const history_service = profile_ ?
|
| - profile_->GetHistoryService(Profile::EXPLICIT_ACCESS) : history_service_;
|
| + HistoryService* const history_service =
|
| + profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
|
| if (!history_service)
|
| return;
|
|
|
| // Create the data structure for the autocomplete passes. We'll save this off
|
| // onto the |params_| member for later deletion below if we need to run pass
|
| // 2.
|
| - const std::wstring& languages = profile_ ?
|
| - profile_->GetPrefs()->GetString(prefs::kAcceptLanguages) : std::wstring();
|
| + std::wstring languages(languages_);
|
| + if (languages.empty() && profile_)
|
| + languages = profile_->GetPrefs()->GetString(prefs::kAcceptLanguages);
|
| scoped_ptr<HistoryURLProviderParams> params(
|
| new HistoryURLProviderParams(input, trim_http, languages));
|
|
|
| @@ -826,28 +826,47 @@
|
| !!info.visit_count(), AutocompleteMatch::HISTORY_URL);
|
| match.destination_url = info.url();
|
| DCHECK(match.destination_url.is_valid());
|
| + size_t inline_autocomplete_offset =
|
| + history_match.input_location + params->input.text().length();
|
| match.fill_into_edit = net::FormatUrl(info.url(),
|
| - match_type == WHAT_YOU_TYPED ? std::wstring() : params->languages);
|
| - if (!params->input.prevent_inline_autocomplete()) {
|
| - match.inline_autocomplete_offset =
|
| - history_match.input_location + params->input.text().length();
|
| - }
|
| + match_type == WHAT_YOU_TYPED ? std::wstring() : params->languages, true,
|
| + UnescapeRule::SPACES, NULL, NULL, &inline_autocomplete_offset);
|
| size_t offset = 0;
|
| if (params->trim_http && !history_match.match_in_scheme) {
|
| offset = TrimHttpPrefix(&match.fill_into_edit);
|
| - if (match.inline_autocomplete_offset != std::wstring::npos) {
|
| - DCHECK(match.inline_autocomplete_offset >= offset);
|
| - match.inline_autocomplete_offset -= offset;
|
| + if (inline_autocomplete_offset != std::wstring::npos) {
|
| + DCHECK(inline_autocomplete_offset >= offset);
|
| + inline_autocomplete_offset -= offset;
|
| }
|
| }
|
| + if (!params->input.prevent_inline_autocomplete())
|
| + match.inline_autocomplete_offset = inline_autocomplete_offset;
|
| DCHECK((match.inline_autocomplete_offset == std::wstring::npos) ||
|
| (match.inline_autocomplete_offset <= match.fill_into_edit.length()));
|
|
|
| - match.contents = match.fill_into_edit;
|
| - AutocompleteMatch::ClassifyLocationInString(
|
| - history_match.input_location - offset, params->input.text().length(),
|
| - match.contents.length(), ACMatchClassification::URL,
|
| - &match.contents_class);
|
| + size_t match_start = history_match.input_location;
|
| + match.contents = net::FormatUrl(info.url(),
|
| + match_type == WHAT_YOU_TYPED ? std::wstring() : params->languages, true,
|
| + UnescapeRule::SPACES, NULL, NULL, &match_start);
|
| + if (offset) {
|
| + TrimHttpPrefix(&match.contents);
|
| + if (match_start != std::wstring::npos) {
|
| + DCHECK(match_start >= offset);
|
| + match_start -= offset;
|
| + }
|
| + }
|
| + if ((match_start != std::wstring::npos) &&
|
| + (inline_autocomplete_offset != std::wstring::npos) &&
|
| + (inline_autocomplete_offset != match_start)) {
|
| + DCHECK(inline_autocomplete_offset > match_start);
|
| + AutocompleteMatch::ClassifyLocationInString(match_start,
|
| + inline_autocomplete_offset - match_start, match.contents.length(),
|
| + ACMatchClassification::URL, &match.contents_class);
|
| + } else {
|
| + AutocompleteMatch::ClassifyLocationInString(std::wstring::npos, 0,
|
| + match.contents.length(), ACMatchClassification::URL,
|
| + &match.contents_class);
|
| + }
|
| match.description = info.title();
|
| AutocompleteMatch::ClassifyMatchInString(params->input.text(), info.title(),
|
| ACMatchClassification::NONE,
|
|
|