Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(518)

Side by Side Diff: components/autocomplete/search_suggestion_parser.h

Issue 443043003: Rename components/autocomplete to components/omnibox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef COMPONENTS_AUTOCOMPLETE_SEARCH_SUGGESTION_PARSER_H_
6 #define COMPONENTS_AUTOCOMPLETE_SEARCH_SUGGESTION_PARSER_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/strings/string16.h"
13 #include "components/autocomplete/autocomplete_match.h"
14 #include "components/autocomplete/autocomplete_match_type.h"
15 #include "url/gurl.h"
16
17 class AutocompleteInput;
18 class AutocompleteSchemeClassifier;
19
20 namespace base {
21 class DictionaryValue;
22 class Value;
23 }
24
25 namespace net {
26 class URLFetcher;
27 }
28
29 class SearchSuggestionParser {
30 public:
31 // The Result classes are intermediate representations of AutocompleteMatches,
32 // simply containing relevance-ranked search and navigation suggestions.
33 // They may be cached to provide some synchronous matches while requests for
34 // new suggestions from updated input are in flight.
35 // TODO(msw) Extend these classes to generate their corresponding matches and
36 // other requisite data, in order to consolidate and simplify the
37 // highly fragmented SearchProvider logic for each Result type.
38 class Result {
39 public:
40 Result(bool from_keyword_provider,
41 int relevance,
42 bool relevance_from_server,
43 AutocompleteMatchType::Type type,
44 const std::string& deletion_url);
45 virtual ~Result();
46
47 bool from_keyword_provider() const { return from_keyword_provider_; }
48
49 const base::string16& match_contents() const { return match_contents_; }
50 const ACMatchClassifications& match_contents_class() const {
51 return match_contents_class_;
52 }
53
54 AutocompleteMatchType::Type type() const { return type_; }
55 int relevance() const { return relevance_; }
56 void set_relevance(int relevance) { relevance_ = relevance; }
57
58 bool relevance_from_server() const { return relevance_from_server_; }
59 void set_relevance_from_server(bool relevance_from_server) {
60 relevance_from_server_ = relevance_from_server;
61 }
62
63 const std::string& deletion_url() const { return deletion_url_; }
64
65 // Returns the default relevance value for this result (which may
66 // be left over from a previous omnibox input) given the current
67 // input and whether the current input caused a keyword provider
68 // to be active.
69 virtual int CalculateRelevance(const AutocompleteInput& input,
70 bool keyword_provider_requested) const = 0;
71
72 protected:
73 // The contents to be displayed and its style info.
74 base::string16 match_contents_;
75 ACMatchClassifications match_contents_class_;
76
77 // True if the result came from the keyword provider.
78 bool from_keyword_provider_;
79
80 AutocompleteMatchType::Type type_;
81
82 // The relevance score.
83 int relevance_;
84
85 private:
86 // Whether this result's relevance score was fully or partly calculated
87 // based on server information, and thus is assumed to be more accurate.
88 // This is ultimately used in
89 // SearchProvider::ConvertResultsToAutocompleteMatches(), see comments
90 // there.
91 bool relevance_from_server_;
92
93 // Optional deletion URL provided with suggestions. Fetching this URL
94 // should result in some reasonable deletion behaviour on the server,
95 // e.g. deleting this term out of a user's server-side search history.
96 std::string deletion_url_;
97 };
98
99 class SuggestResult : public Result {
100 public:
101 SuggestResult(const base::string16& suggestion,
102 AutocompleteMatchType::Type type,
103 const base::string16& match_contents,
104 const base::string16& match_contents_prefix,
105 const base::string16& annotation,
106 const base::string16& answer_contents,
107 const base::string16& answer_type,
108 const std::string& suggest_query_params,
109 const std::string& deletion_url,
110 bool from_keyword_provider,
111 int relevance,
112 bool relevance_from_server,
113 bool should_prefetch,
114 const base::string16& input_text);
115 virtual ~SuggestResult();
116
117 const base::string16& suggestion() const { return suggestion_; }
118 const base::string16& match_contents_prefix() const {
119 return match_contents_prefix_;
120 }
121 const base::string16& annotation() const { return annotation_; }
122 const std::string& suggest_query_params() const {
123 return suggest_query_params_;
124 }
125
126 const base::string16& answer_contents() const { return answer_contents_; }
127 const base::string16& answer_type() const { return answer_type_; }
128
129 bool should_prefetch() const { return should_prefetch_; }
130
131 // Fills in |match_contents_class_| to reflect how |match_contents_| should
132 // be displayed and bolded against the current |input_text|. If
133 // |allow_bolding_all| is false and |match_contents_class_| would have all
134 // of |match_contents_| bolded, do nothing.
135 void ClassifyMatchContents(const bool allow_bolding_all,
136 const base::string16& input_text);
137
138 // Result:
139 virtual int CalculateRelevance(
140 const AutocompleteInput& input,
141 bool keyword_provider_requested) const OVERRIDE;
142
143 private:
144 // The search terms to be used for this suggestion.
145 base::string16 suggestion_;
146
147 // The contents to be displayed as prefix of match contents.
148 // Used for postfix suggestions to display a leading ellipsis (or some
149 // equivalent character) to indicate omitted text.
150 // Only used to pass this information to about:omnibox's "Additional Info".
151 base::string16 match_contents_prefix_;
152
153 // Optional annotation for the |match_contents_| for disambiguation.
154 // This may be displayed in the autocomplete match contents, but is defined
155 // separately to facilitate different formatting.
156 base::string16 annotation_;
157
158 // Optional additional parameters to be added to the search URL.
159 std::string suggest_query_params_;
160
161 // Optional formatted Answers result.
162 base::string16 answer_contents_;
163
164 // Type of optional formatted Answers result.
165 base::string16 answer_type_;
166
167 // Should this result be prefetched?
168 bool should_prefetch_;
169 };
170
171 class NavigationResult : public Result {
172 public:
173 NavigationResult(const AutocompleteSchemeClassifier& scheme_classifier,
174 const GURL& url,
175 AutocompleteMatchType::Type type,
176 const base::string16& description,
177 const std::string& deletion_url,
178 bool from_keyword_provider,
179 int relevance,
180 bool relevance_from_server,
181 const base::string16& input_text,
182 const std::string& languages);
183 virtual ~NavigationResult();
184
185 const GURL& url() const { return url_; }
186 const base::string16& description() const { return description_; }
187 const base::string16& formatted_url() const { return formatted_url_; }
188
189 // Fills in |match_contents_| and |match_contents_class_| to reflect how
190 // the URL should be displayed and bolded against the current |input_text|
191 // and user |languages|. If |allow_bolding_nothing| is false and
192 // |match_contents_class_| would result in an entirely unbolded
193 // |match_contents_|, do nothing.
194 void CalculateAndClassifyMatchContents(const bool allow_bolding_nothing,
195 const base::string16& input_text,
196 const std::string& languages);
197
198 // Result:
199 virtual int CalculateRelevance(
200 const AutocompleteInput& input,
201 bool keyword_provider_requested) const OVERRIDE;
202
203 private:
204 // The suggested url for navigation.
205 GURL url_;
206
207 // The properly formatted ("fixed up") URL string with equivalent meaning
208 // to the one in |url_|.
209 base::string16 formatted_url_;
210
211 // The suggested navigational result description; generally the site name.
212 base::string16 description_;
213 };
214
215 typedef std::vector<SuggestResult> SuggestResults;
216 typedef std::vector<NavigationResult> NavigationResults;
217
218 // A simple structure bundling most of the information (including
219 // both SuggestResults and NavigationResults) returned by a call to
220 // the suggest server.
221 //
222 // This has to be declared after the typedefs since it relies on some of them.
223 struct Results {
224 Results();
225 ~Results();
226
227 // Clears |suggest_results| and |navigation_results| and resets
228 // |verbatim_relevance| to -1 (implies unset).
229 void Clear();
230
231 // Returns whether any of the results (including verbatim) have
232 // server-provided scores.
233 bool HasServerProvidedScores() const;
234
235 // Query suggestions sorted by relevance score.
236 SuggestResults suggest_results;
237
238 // Navigational suggestions sorted by relevance score.
239 NavigationResults navigation_results;
240
241 // The server supplied verbatim relevance scores. Negative values
242 // indicate that there is no suggested score; a value of 0
243 // suppresses the verbatim result.
244 int verbatim_relevance;
245
246 // The JSON metadata associated with this server response.
247 std::string metadata;
248
249 // If the active suggest field trial (if any) has triggered.
250 bool field_trial_triggered;
251
252 // If the relevance values of the results are from the server.
253 bool relevances_from_server;
254
255 // URLs of any images in Answers results.
256 std::vector<GURL> answers_image_urls;
257
258 private:
259 DISALLOW_COPY_AND_ASSIGN(Results);
260 };
261
262 // Extracts JSON data fetched by |source| and converts it to UTF-8.
263 static std::string ExtractJsonData(const net::URLFetcher* source);
264
265 // Parses JSON response received from the provider, stripping XSSI
266 // protection if needed. Returns the parsed data if successful, NULL
267 // otherwise.
268 static scoped_ptr<base::Value> DeserializeJsonData(std::string json_data);
269
270 // Parses results from the suggest server and updates the appropriate suggest
271 // and navigation result lists in |results|. |is_keyword_result| indicates
272 // whether the response was received from the keyword provider.
273 // Returns whether the appropriate result list members were updated.
274 static bool ParseSuggestResults(
275 const base::Value& root_val,
276 const AutocompleteInput& input,
277 const AutocompleteSchemeClassifier& scheme_classifier,
278 int default_result_relevance,
279 const std::string& languages,
280 bool is_keyword_result,
281 Results* results);
282
283 private:
284 // Gets URLs of any images in Answers results.
285 static void GetAnswersImageURLs(const base::DictionaryValue* answer_json,
286 std::vector<GURL>* urls);
287
288 DISALLOW_COPY_AND_ASSIGN(SearchSuggestionParser);
289 };
290
291 #endif // COMPONENTS_AUTOCOMPLETE_SEARCH_SUGGESTION_PARSER_H_
OLDNEW
« no previous file with comments | « components/autocomplete/autocomplete_scheme_classifier.h ('k') | components/autocomplete/search_suggestion_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698