Index: chrome/browser/search_engines/template_url.cc |
diff --git a/chrome/browser/search_engines/template_url.cc b/chrome/browser/search_engines/template_url.cc |
index 227700bc82ed9b2668934f77811c637f48e3770f..b92f72fc9f45714afffc90163a16e9d64085a11d 100644 |
--- a/chrome/browser/search_engines/template_url.cc |
+++ b/chrome/browser/search_engines/template_url.cc |
@@ -63,9 +63,17 @@ const char kGoogleBaseURLParameterFull[] = "{google:baseURL}"; |
const char kGoogleBaseSuggestURLParameter[] = "google:baseSuggestURL"; |
const char kGoogleBaseSuggestURLParameterFull[] = "{google:baseSuggestURL}"; |
const char kGoogleBookmarkBarPinnedParameter[] = "google:bookmarkBarPinned"; |
+const char kGoogleContextualSearchContextData[] = |
+ "google:contextualSearchContextData"; |
+const char kGoogleContextualSearchVersion[] = "google:contextualSearchVersion"; |
const char kGoogleCurrentPageUrlParameter[] = "google:currentPageUrl"; |
const char kGoogleCursorPositionParameter[] = "google:cursorPosition"; |
const char kGoogleForceInstantResultsParameter[] = "google:forceInstantResults"; |
+const char kGoogleImageSearchSource[] = "google:imageSearchSource"; |
+const char kGoogleImageThumbnailParameter[] = "google:imageThumbnail"; |
+const char kGoogleImageOriginalWidth[] = "google:imageOriginalWidth"; |
+const char kGoogleImageOriginalHeight[] = "google:imageOriginalHeight"; |
+const char kGoogleImageURLParameter[] = "google:imageURL"; |
const char kGoogleInputTypeParameter[] = "google:inputType"; |
const char kGoogleInstantExtendedEnabledParameter[] = |
"google:instantExtendedEnabledParameter"; |
@@ -96,12 +104,6 @@ const char kGoogleUnescapedSearchTermsParameter[] = |
const char kGoogleUnescapedSearchTermsParameterFull[] = |
"{google:unescapedSearchTerms}"; |
-const char kGoogleImageSearchSource[] = "google:imageSearchSource"; |
-const char kGoogleImageThumbnailParameter[] = "google:imageThumbnail"; |
-const char kGoogleImageURLParameter[] = "google:imageURL"; |
-const char kGoogleImageOriginalWidth[] = "google:imageOriginalWidth"; |
-const char kGoogleImageOriginalHeight[] = "google:imageOriginalHeight"; |
- |
// Display value for kSearchTermsParameter. |
const char kDisplaySearchTerms[] = "%s"; |
@@ -209,12 +211,41 @@ TemplateURLRef::SearchTermsArgs::SearchTermsArgs( |
bookmark_bar_pinned(false), |
append_extra_query_params(false), |
force_instant_results(false), |
- from_app_list(false) { |
+ from_app_list(false), |
+ contextual_search_params(ContextualSearchParams()) { |
} |
TemplateURLRef::SearchTermsArgs::~SearchTermsArgs() { |
} |
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams:: |
+ ContextualSearchParams() |
+ : version(-1), |
+ start(base::string16::npos), |
+ end(base::string16::npos) { |
+} |
+ |
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams:: |
+ ContextualSearchParams( |
+ const int version, |
+ const size_t start, |
+ const size_t end, |
+ const std::string& selection, |
+ const std::string& content, |
+ const std::string& base_page_url, |
+ const std::string& encoding) |
+ : version(version), |
+ start(start), |
+ end(end), |
+ selection(selection), |
+ content(content), |
+ base_page_url(base_page_url), |
+ encoding(encoding) { |
+} |
+ |
+TemplateURLRef::SearchTermsArgs::ContextualSearchParams:: |
+ ~ContextualSearchParams() { |
+} |
// TemplateURLRef ------------------------------------------------------------- |
@@ -251,24 +282,26 @@ TemplateURLRef::~TemplateURLRef() { |
std::string TemplateURLRef::GetURL() const { |
switch (type_) { |
- case SEARCH: return owner_->url(); |
- case SUGGEST: return owner_->suggestions_url(); |
- case INSTANT: return owner_->instant_url(); |
- case IMAGE: return owner_->image_url(); |
- case NEW_TAB: return owner_->new_tab_url(); |
- case INDEXED: return owner_->GetURL(index_in_owner_); |
- default: NOTREACHED(); return std::string(); // NOLINT |
+ case SEARCH: return owner_->url(); |
+ case SUGGEST: return owner_->suggestions_url(); |
+ case INSTANT: return owner_->instant_url(); |
+ case IMAGE: return owner_->image_url(); |
+ case NEW_TAB: return owner_->new_tab_url(); |
+ case CONTEXTUAL_SEARCH: return owner_->contextual_search_url(); |
+ case INDEXED: return owner_->GetURL(index_in_owner_); |
+ default: NOTREACHED(); return std::string(); // NOLINT |
} |
} |
std::string TemplateURLRef::GetPostParamsString() const { |
switch (type_) { |
case INDEXED: |
- case SEARCH: return owner_->search_url_post_params(); |
- case SUGGEST: return owner_->suggestions_url_post_params(); |
- case INSTANT: return owner_->instant_url_post_params(); |
- case NEW_TAB: return std::string(); |
- case IMAGE: return owner_->image_url_post_params(); |
+ case SEARCH: return owner_->search_url_post_params(); |
+ case SUGGEST: return owner_->suggestions_url_post_params(); |
+ case INSTANT: return owner_->instant_url_post_params(); |
+ case NEW_TAB: return std::string(); |
+ case CONTEXTUAL_SEARCH: return std::string(); |
+ case IMAGE: return owner_->image_url_post_params(); |
default: NOTREACHED(); return std::string(); // NOLINT |
} |
} |
@@ -595,6 +628,12 @@ bool TemplateURLRef::ParseParameter(size_t start, |
replacements->push_back(Replacement(GOOGLE_NTP_IS_THEMED, start)); |
} else if (parameter == kGoogleOmniboxStartMarginParameter) { |
replacements->push_back(Replacement(GOOGLE_OMNIBOX_START_MARGIN, start)); |
+ } else if (parameter == kGoogleContextualSearchVersion) { |
+ replacements->push_back( |
+ Replacement(GOOGLE_CONTEXTUAL_SEARCH_VERSION, start)); |
+ } else if (parameter == kGoogleContextualSearchContextData) { |
+ replacements->push_back( |
+ Replacement(GOOGLE_CONTEXTUAL_SEARCH_CONTEXT_DATA, start)); |
} else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { |
replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, |
start)); |
@@ -937,6 +976,51 @@ std::string TemplateURLRef::HandleReplacements( |
} |
break; |
+ case GOOGLE_CONTEXTUAL_SEARCH_VERSION: |
+ if (search_terms_args.contextual_search_params.version >= 0) { |
+ HandleReplacement( |
+ "ctxs", |
+ base::IntToString( |
+ search_terms_args.contextual_search_params.version), |
+ *i, |
+ &url); |
+ } |
+ break; |
+ |
+ case GOOGLE_CONTEXTUAL_SEARCH_CONTEXT_DATA: { |
+ DCHECK(!i->is_post_param); |
+ std::string context_data; |
+ |
+ const SearchTermsArgs::ContextualSearchParams& params = |
+ search_terms_args.contextual_search_params; |
+ |
+ if (params.start != std::string::npos) { |
+ context_data.append("ctxs_start=" + base::IntToString( |
+ params.start) + "&"); |
+ } |
+ |
+ if (params.end != std::string::npos) { |
+ context_data.append("ctxs_end=" + base::IntToString( |
+ params.end) + "&"); |
+ } |
+ |
+ if (!params.selection.empty()) |
+ context_data.append("q=" + params.selection + "&"); |
+ |
+ if (!params.content.empty()) |
+ context_data.append("ctxs_content=" + params.content + "&"); |
+ |
+ if (!params.base_page_url.empty()) |
+ context_data.append("ctxs_url=" + params.base_page_url + "&"); |
+ |
+ if (!params.encoding.empty()) { |
+ context_data.append("ctxs_encoding=" + params.encoding + "&"); |
+ } |
+ |
+ HandleReplacement(std::string(), context_data, *i, &url); |
+ break; |
+ } |
+ |
case GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION: |
DCHECK(!i->is_post_param); |
if (search_terms_args.accepted_suggestion >= 0 || |
@@ -1075,7 +1159,8 @@ TemplateURL::TemplateURL(Profile* profile, const TemplateURLData& data) |
instant_url_ref_(this, |
TemplateURLRef::INSTANT), |
image_url_ref_(this, TemplateURLRef::IMAGE), |
- new_tab_url_ref_(this, TemplateURLRef::NEW_TAB) { |
+ new_tab_url_ref_(this, TemplateURLRef::NEW_TAB), |
+ contextual_search_url_ref_(this, TemplateURLRef::CONTEXTUAL_SEARCH) { |
SetPrepopulateId(data_.prepopulate_id); |
if (data_.search_terms_replacement_key == |