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 b94d8fe95a350ec51f4f37a7fbbe99998c10ee56..69c5787bbf5bf0ef65d5de63af600c6920b367f9 100644 |
--- a/chrome/browser/search_engines/template_url.cc |
+++ b/chrome/browser/search_engines/template_url.cc |
@@ -470,8 +470,10 @@ bool TemplateURLRef::HasGoogleBaseURLs() const { |
return false; |
} |
-bool TemplateURLRef::ExtractSearchTermsFromURL(const GURL& url, |
- string16* search_terms) const { |
+bool TemplateURLRef::ExtractSearchTermsFromURL( |
+ const GURL& url, |
+ string16* search_terms, |
+ bool needs_instant_extended) const { |
DCHECK(search_terms); |
search_terms->clear(); |
@@ -501,10 +503,13 @@ bool TemplateURLRef::ExtractSearchTermsFromURL(const GURL& url, |
url_parse::Component query, key, value; |
query.len = static_cast<int>(params.size()); |
+ bool search_terms_found = false, replacement_key_found = false; |
while (url_parse::ExtractQueryKeyValue(params.c_str(), &query, &key, |
&value)) { |
if (key.is_nonempty()) { |
- if (params.substr(key.begin, key.len) == search_term_key_) { |
+ base::StringPiece key_string(params.begin() + key.begin, |
Peter Kasting
2012/12/18 02:09:22
Does using a StringPiece here actually buy much?
beaudoin
2012/12/20 04:40:56
Thought it may have been worth not copying charact
Peter Kasting
2012/12/20 19:40:16
I don't really care too much, the string version j
beaudoin
2013/01/08 16:55:39
Done.
|
+ params.begin() + key.begin + key.len); |
+ if (key_string == search_term_key_) { |
// Extract the search term. |
*search_terms = net::UnescapeAndDecodeUTF8URLComponent( |
params.substr(value.begin, value.len), |
@@ -512,10 +517,22 @@ bool TemplateURLRef::ExtractSearchTermsFromURL(const GURL& url, |
net::UnescapeRule::URL_SPECIAL_CHARS | |
net::UnescapeRule::REPLACE_PLUS_WITH_SPACE, |
NULL); |
+ search_terms_found = true; |
+ } |
+ if (key_string == owner_->search_terms_replacement_key()) { |
+ int int_value = 0; |
+ if (value.is_nonempty()) |
+ base::StringToInt(params.substr(value.begin, value.len), &int_value); |
+ if (int_value != 0) |
+ replacement_key_found = true; |
+ } |
+ if (search_terms_found && |
+ (replacement_key_found || !needs_instant_extended)) { |
return true; |
} |
} |
} |
+ search_terms->clear(); |
return false; |
} |
@@ -827,14 +844,15 @@ const std::string& TemplateURL::GetURL(size_t index) const { |
} |
bool TemplateURL::ExtractSearchTermsFromURL( |
- const GURL& url, string16* search_terms) { |
+ const GURL& url, string16* search_terms, bool needs_instant_extended) { |
Peter Kasting
2012/12/18 02:09:22
Nit: One arg per line (and 1st arg can move up a l
beaudoin
2012/12/20 04:40:56
Done.
|
DCHECK(search_terms); |
search_terms->clear(); |
// Then try to match with every pattern. |
for (size_t i = 0; i < URLCount(); ++i) { |
TemplateURLRef ref(this, i); |
- if (ref.ExtractSearchTermsFromURL(url, search_terms)) { |
+ if (ref.ExtractSearchTermsFromURL(url, search_terms, |
+ needs_instant_extended)) { |
// If ExtractSearchTermsFromURL() returns true and |search_terms| is empty |
// it means the pattern matched but no search terms were present. In this |
// case we fail immediately without looking for matches in subsequent |