OLD | NEW |
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 "chrome/browser/autocomplete/search_provider.h" | 5 #include "chrome/browser/autocomplete/search_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 | 420 |
421 if (!annotation.empty()) | 421 if (!annotation.empty()) |
422 match.description = annotation; | 422 match.description = annotation; |
423 | 423 |
424 match.allowed_to_be_default_match = (input_text == match_contents); | 424 match.allowed_to_be_default_match = (input_text == match_contents); |
425 | 425 |
426 // When the user forced a query, we need to make sure all the fill_into_edit | 426 // When the user forced a query, we need to make sure all the fill_into_edit |
427 // values preserve that property. Otherwise, if the user starts editing a | 427 // values preserve that property. Otherwise, if the user starts editing a |
428 // suggestion, non-Search results will suddenly appear. | 428 // suggestion, non-Search results will suddenly appear. |
429 if (input.type() == AutocompleteInput::FORCED_QUERY) | 429 if (input.type() == AutocompleteInput::FORCED_QUERY) |
430 match.fill_into_edit.assign(ASCIIToUTF16("?")); | 430 match.fill_into_edit.assign(base::ASCIIToUTF16("?")); |
431 if (is_keyword) | 431 if (is_keyword) |
432 match.fill_into_edit.append(match.keyword + char16(' ')); | 432 match.fill_into_edit.append(match.keyword + char16(' ')); |
433 if (!input.prevent_inline_autocomplete() && | 433 if (!input.prevent_inline_autocomplete() && |
434 StartsWith(query_string, input_text, false)) { | 434 StartsWith(query_string, input_text, false)) { |
435 match.inline_autocompletion = query_string.substr(input_text.length()); | 435 match.inline_autocompletion = query_string.substr(input_text.length()); |
436 match.allowed_to_be_default_match = true; | 436 match.allowed_to_be_default_match = true; |
437 } | 437 } |
438 match.fill_into_edit.append(query_string); | 438 match.fill_into_edit.append(query_string); |
439 | 439 |
440 const TemplateURLRef& search_url = template_url->url_ref(); | 440 const TemplateURLRef& search_url = template_url->url_ref(); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 // JSON files in non-UTF-8 encodings. The actual encoding is usually | 719 // JSON files in non-UTF-8 encodings. The actual encoding is usually |
720 // specified in the Content-Type header field. | 720 // specified in the Content-Type header field. |
721 if (response_headers) { | 721 if (response_headers) { |
722 std::string charset; | 722 std::string charset; |
723 if (response_headers->GetCharset(&charset)) { | 723 if (response_headers->GetCharset(&charset)) { |
724 base::string16 data_16; | 724 base::string16 data_16; |
725 // TODO(jungshik): Switch to CodePageToUTF8 after it's added. | 725 // TODO(jungshik): Switch to CodePageToUTF8 after it's added. |
726 if (base::CodepageToUTF16(json_data, charset.c_str(), | 726 if (base::CodepageToUTF16(json_data, charset.c_str(), |
727 base::OnStringConversionError::FAIL, | 727 base::OnStringConversionError::FAIL, |
728 &data_16)) | 728 &data_16)) |
729 json_data = UTF16ToUTF8(data_16); | 729 json_data = base::UTF16ToUTF8(data_16); |
730 } | 730 } |
731 } | 731 } |
732 | 732 |
733 scoped_ptr<base::Value> data(DeserializeJsonData(json_data)); | 733 scoped_ptr<base::Value> data(DeserializeJsonData(json_data)); |
734 results_updated = data.get() && ParseSuggestResults(data.get(), is_keyword); | 734 results_updated = data.get() && ParseSuggestResults(data.get(), is_keyword); |
735 } | 735 } |
736 | 736 |
737 UpdateMatches(); | 737 UpdateMatches(); |
738 if (done_ || results_updated) | 738 if (done_ || results_updated) |
739 listener_->OnProviderUpdate(results_updated); | 739 listener_->OnProviderUpdate(results_updated); |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1166 // Google search may return empty suggestions for weird input characters, | 1166 // Google search may return empty suggestions for weird input characters, |
1167 // they make no sense at all and can cause problems in our code. | 1167 // they make no sense at all and can cause problems in our code. |
1168 if (suggestion.empty()) | 1168 if (suggestion.empty()) |
1169 continue; | 1169 continue; |
1170 | 1170 |
1171 // Apply valid suggested relevance scores; discard invalid lists. | 1171 // Apply valid suggested relevance scores; discard invalid lists. |
1172 if (relevances != NULL && !relevances->GetInteger(index, &relevance)) | 1172 if (relevances != NULL && !relevances->GetInteger(index, &relevance)) |
1173 relevances = NULL; | 1173 relevances = NULL; |
1174 if (types && types->GetString(index, &type) && (type == "NAVIGATION")) { | 1174 if (types && types->GetString(index, &type) && (type == "NAVIGATION")) { |
1175 // Do not blindly trust the URL coming from the server to be valid. | 1175 // Do not blindly trust the URL coming from the server to be valid. |
1176 GURL url(URLFixerUpper::FixupURL(UTF16ToUTF8(suggestion), std::string())); | 1176 GURL url(URLFixerUpper::FixupURL( |
| 1177 base::UTF16ToUTF8(suggestion), std::string())); |
1177 if (url.is_valid() && allow_navsuggest) { | 1178 if (url.is_valid() && allow_navsuggest) { |
1178 base::string16 title; | 1179 base::string16 title; |
1179 if (descriptions != NULL) | 1180 if (descriptions != NULL) |
1180 descriptions->GetString(index, &title); | 1181 descriptions->GetString(index, &title); |
1181 results->navigation_results.push_back(NavigationResult( | 1182 results->navigation_results.push_back(NavigationResult( |
1182 *this, url, title, is_keyword, relevance, true)); | 1183 *this, url, title, is_keyword, relevance, true)); |
1183 } | 1184 } |
1184 } else { | 1185 } else { |
1185 AutocompleteMatchType::Type match_type = GetAutocompleteMatchType(type); | 1186 AutocompleteMatchType::Type match_type = GetAutocompleteMatchType(type); |
1186 bool should_prefetch = static_cast<int>(index) == prefetch_index; | 1187 bool should_prefetch = static_cast<int>(index) == prefetch_index; |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1888 const net::FormatUrlTypes format_types = | 1889 const net::FormatUrlTypes format_types = |
1889 net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP); | 1890 net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP); |
1890 match.fill_into_edit += | 1891 match.fill_into_edit += |
1891 AutocompleteInput::FormattedStringWithEquivalentMeaning(navigation.url(), | 1892 AutocompleteInput::FormattedStringWithEquivalentMeaning(navigation.url(), |
1892 net::FormatUrl(navigation.url(), languages, format_types, | 1893 net::FormatUrl(navigation.url(), languages, format_types, |
1893 net::UnescapeRule::SPACES, NULL, NULL, | 1894 net::UnescapeRule::SPACES, NULL, NULL, |
1894 &inline_autocomplete_offset)); | 1895 &inline_autocomplete_offset)); |
1895 // Preserve the forced query '?' prefix in |match.fill_into_edit|. | 1896 // Preserve the forced query '?' prefix in |match.fill_into_edit|. |
1896 // Otherwise, user edits to a suggestion would show non-Search results. | 1897 // Otherwise, user edits to a suggestion would show non-Search results. |
1897 if (input_.type() == AutocompleteInput::FORCED_QUERY) { | 1898 if (input_.type() == AutocompleteInput::FORCED_QUERY) { |
1898 match.fill_into_edit.insert(0, ASCIIToUTF16("?")); | 1899 match.fill_into_edit.insert(0, base::ASCIIToUTF16("?")); |
1899 if (inline_autocomplete_offset != base::string16::npos) | 1900 if (inline_autocomplete_offset != base::string16::npos) |
1900 ++inline_autocomplete_offset; | 1901 ++inline_autocomplete_offset; |
1901 } | 1902 } |
1902 if (!input_.prevent_inline_autocomplete() && | 1903 if (!input_.prevent_inline_autocomplete() && |
1903 (inline_autocomplete_offset != base::string16::npos)) { | 1904 (inline_autocomplete_offset != base::string16::npos)) { |
1904 DCHECK(inline_autocomplete_offset <= match.fill_into_edit.length()); | 1905 DCHECK(inline_autocomplete_offset <= match.fill_into_edit.length()); |
1905 // A navsuggestion can only be the default match when there is no | 1906 // A navsuggestion can only be the default match when there is no |
1906 // keyword provider active, lest it appear first and break the user | 1907 // keyword provider active, lest it appear first and break the user |
1907 // out of keyword mode. | 1908 // out of keyword mode. |
1908 match.allowed_to_be_default_match = | 1909 match.allowed_to_be_default_match = |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2037 if (!OmniboxFieldTrial::InZeroSuggestFieldTrial() || | 2038 if (!OmniboxFieldTrial::InZeroSuggestFieldTrial() || |
2038 service == NULL || | 2039 service == NULL || |
2039 !service->IsSyncEnabledAndLoggedIn() || | 2040 !service->IsSyncEnabledAndLoggedIn() || |
2040 !sync_prefs.GetPreferredDataTypes(syncer::UserTypes()).Has( | 2041 !sync_prefs.GetPreferredDataTypes(syncer::UserTypes()).Has( |
2041 syncer::PROXY_TABS) || | 2042 syncer::PROXY_TABS) || |
2042 service->GetEncryptedDataTypes().Has(syncer::SESSIONS)) | 2043 service->GetEncryptedDataTypes().Has(syncer::SESSIONS)) |
2043 return false; | 2044 return false; |
2044 | 2045 |
2045 return true; | 2046 return true; |
2046 } | 2047 } |
OLD | NEW |