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

Side by Side Diff: chrome/browser/search_engines/template_url.cc

Issue 308053009: Add contextual search to the template url system (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: *sigh* another rebase! Created 6 years, 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/search_engines/template_url.h" 5 #include "chrome/browser/search_engines/template_url.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const char kGoogleAssistedQueryStatsParameter[] = "google:assistedQueryStats"; 56 const char kGoogleAssistedQueryStatsParameter[] = "google:assistedQueryStats";
57 57
58 // Host/Domain Google searches are relative to. 58 // Host/Domain Google searches are relative to.
59 const char kGoogleBaseURLParameter[] = "google:baseURL"; 59 const char kGoogleBaseURLParameter[] = "google:baseURL";
60 const char kGoogleBaseURLParameterFull[] = "{google:baseURL}"; 60 const char kGoogleBaseURLParameterFull[] = "{google:baseURL}";
61 61
62 // Like google:baseURL, but for the Search Suggest capability. 62 // Like google:baseURL, but for the Search Suggest capability.
63 const char kGoogleBaseSuggestURLParameter[] = "google:baseSuggestURL"; 63 const char kGoogleBaseSuggestURLParameter[] = "google:baseSuggestURL";
64 const char kGoogleBaseSuggestURLParameterFull[] = "{google:baseSuggestURL}"; 64 const char kGoogleBaseSuggestURLParameterFull[] = "{google:baseSuggestURL}";
65 const char kGoogleBookmarkBarPinnedParameter[] = "google:bookmarkBarPinned"; 65 const char kGoogleBookmarkBarPinnedParameter[] = "google:bookmarkBarPinned";
66 const char kGoogleContextualSearchContextData[] =
67 "google:contextualSearchContextData";
68 const char kGoogleContextualSearchVersion[] = "google:contextualSearchVersion";
66 const char kGoogleCurrentPageUrlParameter[] = "google:currentPageUrl"; 69 const char kGoogleCurrentPageUrlParameter[] = "google:currentPageUrl";
67 const char kGoogleCursorPositionParameter[] = "google:cursorPosition"; 70 const char kGoogleCursorPositionParameter[] = "google:cursorPosition";
68 const char kGoogleForceInstantResultsParameter[] = "google:forceInstantResults"; 71 const char kGoogleForceInstantResultsParameter[] = "google:forceInstantResults";
72 const char kGoogleImageSearchSource[] = "google:imageSearchSource";
73 const char kGoogleImageThumbnailParameter[] = "google:imageThumbnail";
74 const char kGoogleImageOriginalWidth[] = "google:imageOriginalWidth";
75 const char kGoogleImageOriginalHeight[] = "google:imageOriginalHeight";
76 const char kGoogleImageURLParameter[] = "google:imageURL";
69 const char kGoogleInputTypeParameter[] = "google:inputType"; 77 const char kGoogleInputTypeParameter[] = "google:inputType";
70 const char kGoogleInstantExtendedEnabledParameter[] = 78 const char kGoogleInstantExtendedEnabledParameter[] =
71 "google:instantExtendedEnabledParameter"; 79 "google:instantExtendedEnabledParameter";
72 const char kGoogleInstantExtendedEnabledKey[] = 80 const char kGoogleInstantExtendedEnabledKey[] =
73 "google:instantExtendedEnabledKey"; 81 "google:instantExtendedEnabledKey";
74 const char kGoogleInstantExtendedEnabledKeyFull[] = 82 const char kGoogleInstantExtendedEnabledKeyFull[] =
75 "{google:instantExtendedEnabledKey}"; 83 "{google:instantExtendedEnabledKey}";
76 const char kGoogleNTPIsThemedParameter[] = "google:ntpIsThemedParameter"; 84 const char kGoogleNTPIsThemedParameter[] = "google:ntpIsThemedParameter";
77 const char kGoogleOmniboxStartMarginParameter[] = 85 const char kGoogleOmniboxStartMarginParameter[] =
78 "google:omniboxStartMarginParameter"; 86 "google:omniboxStartMarginParameter";
(...skipping 10 matching lines...) Expand all
89 const char kGoogleSuggestAPIKeyParameter[] = "google:suggestAPIKeyParameter"; 97 const char kGoogleSuggestAPIKeyParameter[] = "google:suggestAPIKeyParameter";
90 const char kGoogleSuggestClient[] = "google:suggestClient"; 98 const char kGoogleSuggestClient[] = "google:suggestClient";
91 const char kGoogleSuggestRequestId[] = "google:suggestRid"; 99 const char kGoogleSuggestRequestId[] = "google:suggestRid";
92 100
93 // Same as kSearchTermsParameter, with no escaping. 101 // Same as kSearchTermsParameter, with no escaping.
94 const char kGoogleUnescapedSearchTermsParameter[] = 102 const char kGoogleUnescapedSearchTermsParameter[] =
95 "google:unescapedSearchTerms"; 103 "google:unescapedSearchTerms";
96 const char kGoogleUnescapedSearchTermsParameterFull[] = 104 const char kGoogleUnescapedSearchTermsParameterFull[] =
97 "{google:unescapedSearchTerms}"; 105 "{google:unescapedSearchTerms}";
98 106
99 const char kGoogleImageSearchSource[] = "google:imageSearchSource";
100 const char kGoogleImageThumbnailParameter[] = "google:imageThumbnail";
101 const char kGoogleImageURLParameter[] = "google:imageURL";
102 const char kGoogleImageOriginalWidth[] = "google:imageOriginalWidth";
103 const char kGoogleImageOriginalHeight[] = "google:imageOriginalHeight";
104
105 // Display value for kSearchTermsParameter. 107 // Display value for kSearchTermsParameter.
106 const char kDisplaySearchTerms[] = "%s"; 108 const char kDisplaySearchTerms[] = "%s";
107 109
108 // Display value for kGoogleUnescapedSearchTermsParameter. 110 // Display value for kGoogleUnescapedSearchTermsParameter.
109 const char kDisplayUnescapedSearchTerms[] = "%S"; 111 const char kDisplayUnescapedSearchTerms[] = "%S";
110 112
111 // Used if the count parameter is not optional. Indicates we want 10 search 113 // Used if the count parameter is not optional. Indicates we want 10 search
112 // results. 114 // results.
113 const char kDefaultCount[] = "10"; 115 const char kDefaultCount[] = "10";
114 116
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 const base::string16& search_terms) 204 const base::string16& search_terms)
203 : search_terms(search_terms), 205 : search_terms(search_terms),
204 input_type(metrics::OmniboxInputType::INVALID), 206 input_type(metrics::OmniboxInputType::INVALID),
205 accepted_suggestion(NO_SUGGESTIONS_AVAILABLE), 207 accepted_suggestion(NO_SUGGESTIONS_AVAILABLE),
206 cursor_position(base::string16::npos), 208 cursor_position(base::string16::npos),
207 omnibox_start_margin(-1), 209 omnibox_start_margin(-1),
208 page_classification(AutocompleteInput::INVALID_SPEC), 210 page_classification(AutocompleteInput::INVALID_SPEC),
209 bookmark_bar_pinned(false), 211 bookmark_bar_pinned(false),
210 append_extra_query_params(false), 212 append_extra_query_params(false),
211 force_instant_results(false), 213 force_instant_results(false),
212 from_app_list(false) { 214 from_app_list(false),
215 contextual_search_params(ContextualSearchParams()) {
213 } 216 }
214 217
215 TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() { 218 TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() {
216 } 219 }
217 220
221 TemplateURLRef::SearchTermsArgs::ContextualSearchParams::
222 ContextualSearchParams()
223 : version(-1),
224 start(base::string16::npos),
225 end(base::string16::npos) {
226 }
227
228 TemplateURLRef::SearchTermsArgs::ContextualSearchParams::
229 ContextualSearchParams(
230 const int version,
231 const size_t start,
232 const size_t end,
233 const std::string& selection,
234 const std::string& content,
235 const std::string& base_page_url,
236 const std::string& encoding)
237 : version(version),
238 start(start),
239 end(end),
240 selection(selection),
241 content(content),
242 base_page_url(base_page_url),
243 encoding(encoding) {
244 }
245
246 TemplateURLRef::SearchTermsArgs::ContextualSearchParams::
247 ~ContextualSearchParams() {
248 }
218 249
219 // TemplateURLRef ------------------------------------------------------------- 250 // TemplateURLRef -------------------------------------------------------------
220 251
221 TemplateURLRef::TemplateURLRef(TemplateURL* owner, Type type) 252 TemplateURLRef::TemplateURLRef(TemplateURL* owner, Type type)
222 : owner_(owner), 253 : owner_(owner),
223 type_(type), 254 type_(type),
224 index_in_owner_(-1), 255 index_in_owner_(-1),
225 parsed_(false), 256 parsed_(false),
226 valid_(false), 257 valid_(false),
227 supports_replacements_(false), 258 supports_replacements_(false),
(...skipping 16 matching lines...) Expand all
244 showing_search_terms_(ShowingSearchTermsOnSRP()) { 275 showing_search_terms_(ShowingSearchTermsOnSRP()) {
245 DCHECK(owner_); 276 DCHECK(owner_);
246 DCHECK_LT(index_in_owner_, owner_->URLCount()); 277 DCHECK_LT(index_in_owner_, owner_->URLCount());
247 } 278 }
248 279
249 TemplateURLRef::~TemplateURLRef() { 280 TemplateURLRef::~TemplateURLRef() {
250 } 281 }
251 282
252 std::string TemplateURLRef::GetURL() const { 283 std::string TemplateURLRef::GetURL() const {
253 switch (type_) { 284 switch (type_) {
254 case SEARCH: return owner_->url(); 285 case SEARCH: return owner_->url();
255 case SUGGEST: return owner_->suggestions_url(); 286 case SUGGEST: return owner_->suggestions_url();
256 case INSTANT: return owner_->instant_url(); 287 case INSTANT: return owner_->instant_url();
257 case IMAGE: return owner_->image_url(); 288 case IMAGE: return owner_->image_url();
258 case NEW_TAB: return owner_->new_tab_url(); 289 case NEW_TAB: return owner_->new_tab_url();
259 case INDEXED: return owner_->GetURL(index_in_owner_); 290 case CONTEXTUAL_SEARCH: return owner_->contextual_search_url();
260 default: NOTREACHED(); return std::string(); // NOLINT 291 case INDEXED: return owner_->GetURL(index_in_owner_);
292 default: NOTREACHED(); return std::string(); // NOLINT
261 } 293 }
262 } 294 }
263 295
264 std::string TemplateURLRef::GetPostParamsString() const { 296 std::string TemplateURLRef::GetPostParamsString() const {
265 switch (type_) { 297 switch (type_) {
266 case INDEXED: 298 case INDEXED:
267 case SEARCH: return owner_->search_url_post_params(); 299 case SEARCH: return owner_->search_url_post_params();
268 case SUGGEST: return owner_->suggestions_url_post_params(); 300 case SUGGEST: return owner_->suggestions_url_post_params();
269 case INSTANT: return owner_->instant_url_post_params(); 301 case INSTANT: return owner_->instant_url_post_params();
270 case NEW_TAB: return std::string(); 302 case NEW_TAB: return std::string();
271 case IMAGE: return owner_->image_url_post_params(); 303 case CONTEXTUAL_SEARCH: return std::string();
304 case IMAGE: return owner_->image_url_post_params();
272 default: NOTREACHED(); return std::string(); // NOLINT 305 default: NOTREACHED(); return std::string(); // NOLINT
273 } 306 }
274 } 307 }
275 308
276 bool TemplateURLRef::UsesPOSTMethodUsingTermsData( 309 bool TemplateURLRef::UsesPOSTMethodUsingTermsData(
277 const SearchTermsData* search_terms_data) const { 310 const SearchTermsData* search_terms_data) const {
278 if (search_terms_data) 311 if (search_terms_data)
279 ParseIfNecessaryUsingTermsData(*search_terms_data); 312 ParseIfNecessaryUsingTermsData(*search_terms_data);
280 else 313 else
281 ParseIfNecessary(); 314 ParseIfNecessary();
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 start)); 621 start));
589 } else if (parameter == kGoogleInstantExtendedEnabledParameter) { 622 } else if (parameter == kGoogleInstantExtendedEnabledParameter) {
590 replacements->push_back(Replacement(GOOGLE_INSTANT_EXTENDED_ENABLED, 623 replacements->push_back(Replacement(GOOGLE_INSTANT_EXTENDED_ENABLED,
591 start)); 624 start));
592 } else if (parameter == kGoogleInstantExtendedEnabledKey) { 625 } else if (parameter == kGoogleInstantExtendedEnabledKey) {
593 url->insert(start, google_util::kInstantExtendedAPIParam); 626 url->insert(start, google_util::kInstantExtendedAPIParam);
594 } else if (parameter == kGoogleNTPIsThemedParameter) { 627 } else if (parameter == kGoogleNTPIsThemedParameter) {
595 replacements->push_back(Replacement(GOOGLE_NTP_IS_THEMED, start)); 628 replacements->push_back(Replacement(GOOGLE_NTP_IS_THEMED, start));
596 } else if (parameter == kGoogleOmniboxStartMarginParameter) { 629 } else if (parameter == kGoogleOmniboxStartMarginParameter) {
597 replacements->push_back(Replacement(GOOGLE_OMNIBOX_START_MARGIN, start)); 630 replacements->push_back(Replacement(GOOGLE_OMNIBOX_START_MARGIN, start));
631 } else if (parameter == kGoogleContextualSearchVersion) {
632 replacements->push_back(
633 Replacement(GOOGLE_CONTEXTUAL_SEARCH_VERSION, start));
634 } else if (parameter == kGoogleContextualSearchContextData) {
635 replacements->push_back(
636 Replacement(GOOGLE_CONTEXTUAL_SEARCH_CONTEXT_DATA, start));
598 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { 637 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) {
599 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, 638 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION,
600 start)); 639 start));
601 } else if (parameter == kGooglePageClassificationParameter) { 640 } else if (parameter == kGooglePageClassificationParameter) {
602 replacements->push_back(Replacement(GOOGLE_PAGE_CLASSIFICATION, start)); 641 replacements->push_back(Replacement(GOOGLE_PAGE_CLASSIFICATION, start));
603 } else if (parameter == kGoogleRLZParameter) { 642 } else if (parameter == kGoogleRLZParameter) {
604 replacements->push_back(Replacement(GOOGLE_RLZ, start)); 643 replacements->push_back(Replacement(GOOGLE_RLZ, start));
605 } else if (parameter == kGoogleSearchClient) { 644 } else if (parameter == kGoogleSearchClient) {
606 replacements->push_back(Replacement(GOOGLE_SEARCH_CLIENT, start)); 645 replacements->push_back(Replacement(GOOGLE_SEARCH_CLIENT, start));
607 } else if (parameter == kGoogleSearchFieldtrialParameter) { 646 } else if (parameter == kGoogleSearchFieldtrialParameter) {
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 DCHECK(!i->is_post_param); 969 DCHECK(!i->is_post_param);
931 if (search_terms_args.omnibox_start_margin >= 0) { 970 if (search_terms_args.omnibox_start_margin >= 0) {
932 HandleReplacement( 971 HandleReplacement(
933 "es_sm", 972 "es_sm",
934 base::IntToString(search_terms_args.omnibox_start_margin), 973 base::IntToString(search_terms_args.omnibox_start_margin),
935 *i, 974 *i,
936 &url); 975 &url);
937 } 976 }
938 break; 977 break;
939 978
979 case GOOGLE_CONTEXTUAL_SEARCH_VERSION:
980 if (search_terms_args.contextual_search_params.version >= 0) {
981 HandleReplacement(
982 "ctxs",
983 base::IntToString(
984 search_terms_args.contextual_search_params.version),
985 *i,
986 &url);
987 }
988 break;
989
990 case GOOGLE_CONTEXTUAL_SEARCH_CONTEXT_DATA: {
991 DCHECK(!i->is_post_param);
992 std::string context_data;
993
994 const SearchTermsArgs::ContextualSearchParams& params =
995 search_terms_args.contextual_search_params;
996
997 if (params.start != std::string::npos) {
998 context_data.append("ctxs_start=" + base::IntToString(
999 params.start) + "&");
1000 }
1001
1002 if (params.end != std::string::npos) {
1003 context_data.append("ctxs_end=" + base::IntToString(
1004 params.end) + "&");
1005 }
1006
1007 if (!params.selection.empty())
1008 context_data.append("q=" + params.selection + "&");
1009
1010 if (!params.content.empty())
1011 context_data.append("ctxs_content=" + params.content + "&");
1012
1013 if (!params.base_page_url.empty())
1014 context_data.append("ctxs_url=" + params.base_page_url + "&");
1015
1016 if (!params.encoding.empty()) {
1017 context_data.append("ctxs_encoding=" + params.encoding + "&");
1018 }
1019
1020 HandleReplacement(std::string(), context_data, *i, &url);
1021 break;
1022 }
1023
940 case GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION: 1024 case GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION:
941 DCHECK(!i->is_post_param); 1025 DCHECK(!i->is_post_param);
942 if (search_terms_args.accepted_suggestion >= 0 || 1026 if (search_terms_args.accepted_suggestion >= 0 ||
943 !search_terms_args.assisted_query_stats.empty()) { 1027 !search_terms_args.assisted_query_stats.empty()) {
944 HandleReplacement( 1028 HandleReplacement(
945 "oq", base::UTF16ToUTF8(encoded_original_query), *i, &url); 1029 "oq", base::UTF16ToUTF8(encoded_original_query), *i, &url);
946 } 1030 }
947 break; 1031 break;
948 1032
949 case GOOGLE_PAGE_CLASSIFICATION: 1033 case GOOGLE_PAGE_CLASSIFICATION:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 1152
1069 TemplateURL::TemplateURL(Profile* profile, const TemplateURLData& data) 1153 TemplateURL::TemplateURL(Profile* profile, const TemplateURLData& data)
1070 : profile_(profile), 1154 : profile_(profile),
1071 data_(data), 1155 data_(data),
1072 url_ref_(this, TemplateURLRef::SEARCH), 1156 url_ref_(this, TemplateURLRef::SEARCH),
1073 suggestions_url_ref_(this, 1157 suggestions_url_ref_(this,
1074 TemplateURLRef::SUGGEST), 1158 TemplateURLRef::SUGGEST),
1075 instant_url_ref_(this, 1159 instant_url_ref_(this,
1076 TemplateURLRef::INSTANT), 1160 TemplateURLRef::INSTANT),
1077 image_url_ref_(this, TemplateURLRef::IMAGE), 1161 image_url_ref_(this, TemplateURLRef::IMAGE),
1078 new_tab_url_ref_(this, TemplateURLRef::NEW_TAB) { 1162 new_tab_url_ref_(this, TemplateURLRef::NEW_TAB),
1163 contextual_search_url_ref_(this, TemplateURLRef::CONTEXTUAL_SEARCH) {
1079 SetPrepopulateId(data_.prepopulate_id); 1164 SetPrepopulateId(data_.prepopulate_id);
1080 1165
1081 if (data_.search_terms_replacement_key == 1166 if (data_.search_terms_replacement_key ==
1082 kGoogleInstantExtendedEnabledKeyFull) { 1167 kGoogleInstantExtendedEnabledKeyFull) {
1083 data_.search_terms_replacement_key = google_util::kInstantExtendedAPIParam; 1168 data_.search_terms_replacement_key = google_util::kInstantExtendedAPIParam;
1084 } 1169 }
1085 } 1170 }
1086 1171
1087 TemplateURL::~TemplateURL() { 1172 TemplateURL::~TemplateURL() {
1088 } 1173 }
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 // patterns. This means that given patterns 1441 // patterns. This means that given patterns
1357 // [ "http://foo/#q={searchTerms}", "http://foo/?q={searchTerms}" ], 1442 // [ "http://foo/#q={searchTerms}", "http://foo/?q={searchTerms}" ],
1358 // calling ExtractSearchTermsFromURL() on "http://foo/?q=bar#q=' would 1443 // calling ExtractSearchTermsFromURL() on "http://foo/?q=bar#q=' would
1359 // return false. This is important for at least Google, where such URLs 1444 // return false. This is important for at least Google, where such URLs
1360 // are invalid. 1445 // are invalid.
1361 return !search_terms->empty(); 1446 return !search_terms->empty();
1362 } 1447 }
1363 } 1448 }
1364 return false; 1449 return false;
1365 } 1450 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/template_url.h ('k') | chrome/browser/search_engines/template_url_prepopulate_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698