| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/base_search_provider.h" | 5 #include "chrome/browser/autocomplete/base_search_provider.h" |
| 6 | 6 |
| 7 #include "base/i18n/case_conversion.h" | 7 #include "base/i18n/case_conversion.h" |
| 8 #include "base/i18n/icu_string_conversions.h" | 8 #include "base/i18n/icu_string_conversions.h" |
| 9 #include "base/json/json_string_value_serializer.h" | 9 #include "base/json/json_string_value_serializer.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| 11 #include "base/prefs/pref_registry_simple.h" | 11 #include "base/prefs/pref_registry_simple.h" |
| 12 #include "base/prefs/pref_service.h" | 12 #include "base/prefs/pref_service.h" |
| 13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 15 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h" | 15 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h" |
| 16 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service.h" |
| 17 #include "chrome/browser/bitmap_fetcher/bitmap_fetcher_service_factory.h" |
| 16 #include "chrome/browser/history/history_service.h" | 18 #include "chrome/browser/history/history_service.h" |
| 17 #include "chrome/browser/history/history_service_factory.h" | 19 #include "chrome/browser/history/history_service_factory.h" |
| 18 #include "chrome/browser/omnibox/omnibox_field_trial.h" | 20 #include "chrome/browser/omnibox/omnibox_field_trial.h" |
| 19 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
| 20 #include "chrome/browser/search/instant_service.h" | 22 #include "chrome/browser/search/instant_service.h" |
| 21 #include "chrome/browser/search/instant_service_factory.h" | 23 #include "chrome/browser/search/instant_service_factory.h" |
| 22 #include "chrome/browser/search/search.h" | 24 #include "chrome/browser/search/search.h" |
| 23 #include "chrome/browser/search_engines/template_url.h" | 25 #include "chrome/browser/search_engines/template_url.h" |
| 24 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" | 26 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" |
| 25 #include "chrome/browser/search_engines/template_url_service.h" | 27 #include "chrome/browser/search_engines/template_url_service.h" |
| (...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 // Error correction for bad data from server. | 919 // Error correction for bad data from server. |
| 918 if (match_contents.empty()) | 920 if (match_contents.empty()) |
| 919 match_contents = suggestion; | 921 match_contents = suggestion; |
| 920 suggestion_detail->GetString("a", &annotation); | 922 suggestion_detail->GetString("a", &annotation); |
| 921 suggestion_detail->GetString("q", &suggest_query_params); | 923 suggestion_detail->GetString("q", &suggest_query_params); |
| 922 | 924 |
| 923 // Extract Answers, if provided. | 925 // Extract Answers, if provided. |
| 924 const base::DictionaryValue* answer_json = NULL; | 926 const base::DictionaryValue* answer_json = NULL; |
| 925 if (suggestion_detail->GetDictionary("ansa", &answer_json)) { | 927 if (suggestion_detail->GetDictionary("ansa", &answer_json)) { |
| 926 match_type = AutocompleteMatchType::SEARCH_SUGGEST_ANSWER; | 928 match_type = AutocompleteMatchType::SEARCH_SUGGEST_ANSWER; |
| 929 PrefetchAnswersImages(answer_json); |
| 927 std::string contents; | 930 std::string contents; |
| 928 base::JSONWriter::Write(answer_json, &contents); | 931 base::JSONWriter::Write(answer_json, &contents); |
| 929 answer_contents = base::UTF8ToUTF16(contents); | 932 answer_contents = base::UTF8ToUTF16(contents); |
| 930 suggestion_detail->GetString("ansb", &answer_type); | 933 suggestion_detail->GetString("ansb", &answer_type); |
| 931 } | 934 } |
| 932 } | 935 } |
| 933 } | 936 } |
| 934 | 937 |
| 935 bool should_prefetch = static_cast<int>(index) == prefetch_index; | 938 bool should_prefetch = static_cast<int>(index) == prefetch_index; |
| 936 // TODO(kochi): Improve calculator suggestion presentation. | 939 // TODO(kochi): Improve calculator suggestion presentation. |
| 937 results->suggest_results.push_back(SuggestResult( | 940 results->suggest_results.push_back(SuggestResult( |
| 938 base::CollapseWhitespace(suggestion, false), match_type, | 941 base::CollapseWhitespace(suggestion, false), match_type, |
| 939 base::CollapseWhitespace(match_contents, false), | 942 base::CollapseWhitespace(match_contents, false), |
| 940 match_contents_prefix, annotation, answer_contents, answer_type, | 943 match_contents_prefix, annotation, answer_contents, answer_type, |
| 941 suggest_query_params, deletion_url, is_keyword_result, relevance, | 944 suggest_query_params, deletion_url, is_keyword_result, relevance, |
| 942 relevances != NULL, should_prefetch, trimmed_input)); | 945 relevances != NULL, should_prefetch, trimmed_input)); |
| 943 } | 946 } |
| 944 } | 947 } |
| 945 SortResults(is_keyword_result, relevances, results); | 948 SortResults(is_keyword_result, relevances, results); |
| 946 return true; | 949 return true; |
| 947 } | 950 } |
| 948 | 951 |
| 952 void BaseSearchProvider::PrefetchAnswersImages( |
| 953 const base::DictionaryValue* answer_json) { |
| 954 DCHECK(answer_json); |
| 955 const base::ListValue* lines = NULL; |
| 956 answer_json->GetList("l", &lines); |
| 957 if (!lines || lines->GetSize() == 0) |
| 958 return; |
| 959 |
| 960 BitmapFetcherService* image_service = |
| 961 BitmapFetcherServiceFactory::GetForBrowserContext(profile_); |
| 962 DCHECK(image_service); |
| 963 |
| 964 for (size_t line = 0; line < lines->GetSize(); ++line) { |
| 965 const base::DictionaryValue* imageLine = NULL; |
| 966 lines->GetDictionary(line, &imageLine); |
| 967 if (!imageLine) |
| 968 continue; |
| 969 const base::DictionaryValue* imageData = NULL; |
| 970 imageLine->GetDictionary("i", &imageData); |
| 971 if (!imageData) |
| 972 continue; |
| 973 std::string imageUrl; |
| 974 imageData->GetString("d", &imageUrl); |
| 975 image_service->Prefetch(GURL(imageUrl)); |
| 976 } |
| 977 } |
| 978 |
| 949 void BaseSearchProvider::SortResults(bool is_keyword, | 979 void BaseSearchProvider::SortResults(bool is_keyword, |
| 950 const base::ListValue* relevances, | 980 const base::ListValue* relevances, |
| 951 Results* results) { | 981 Results* results) { |
| 952 } | 982 } |
| 953 | 983 |
| 954 bool BaseSearchProvider::StoreSuggestionResponse( | 984 bool BaseSearchProvider::StoreSuggestionResponse( |
| 955 const std::string& json_data, | 985 const std::string& json_data, |
| 956 const base::Value& parsed_data) { | 986 const base::Value& parsed_data) { |
| 957 return false; | 987 return false; |
| 958 } | 988 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 977 } | 1007 } |
| 978 | 1008 |
| 979 void BaseSearchProvider::OnDeletionComplete( | 1009 void BaseSearchProvider::OnDeletionComplete( |
| 980 bool success, SuggestionDeletionHandler* handler) { | 1010 bool success, SuggestionDeletionHandler* handler) { |
| 981 RecordDeletionResult(success); | 1011 RecordDeletionResult(success); |
| 982 SuggestionDeletionHandlers::iterator it = std::find( | 1012 SuggestionDeletionHandlers::iterator it = std::find( |
| 983 deletion_handlers_.begin(), deletion_handlers_.end(), handler); | 1013 deletion_handlers_.begin(), deletion_handlers_.end(), handler); |
| 984 DCHECK(it != deletion_handlers_.end()); | 1014 DCHECK(it != deletion_handlers_.end()); |
| 985 deletion_handlers_.erase(it); | 1015 deletion_handlers_.erase(it); |
| 986 } | 1016 } |
| OLD | NEW |