| Index: components/search_engines/template_url.cc
|
| diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
|
| index f95acb7c1f6fce7431c4a264073d8d03e369ad58..cb4c6dbcf140cfb3002bd6243eec469bf979376a 100644
|
| --- a/components/search_engines/template_url.cc
|
| +++ b/components/search_engines/template_url.cc
|
| @@ -459,10 +459,12 @@ base::string16 TemplateURLRef::SearchTermToString16(
|
| const std::vector<std::string>& encodings = owner_->input_encodings();
|
| base::string16 result;
|
|
|
| - std::string unescaped = net::UnescapeURLComponent(
|
| - term,
|
| - net::UnescapeRule::REPLACE_PLUS_WITH_SPACE |
|
| - net::UnescapeRule::URL_SPECIAL_CHARS);
|
| + net::UnescapeRule::Type unescape_rules =
|
| + net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS;
|
| + if (search_term_key_location_ != url::Parsed::PATH)
|
| + unescape_rules |= net::UnescapeRule::REPLACE_PLUS_WITH_SPACE;
|
| +
|
| + std::string unescaped = net::UnescapeURLComponent(term, unescape_rules);
|
| for (size_t i = 0; i < encodings.size(); ++i) {
|
| if (base::CodepageToUTF16(unescaped, encodings[i].c_str(),
|
| base::OnStringConversionError::FAIL, &result))
|
| @@ -478,7 +480,8 @@ base::string16 TemplateURLRef::SearchTermToString16(
|
| // encoding is. We need to substitute spaces for pluses ourselves since we're
|
| // not sending it through an unescaper.
|
| result = base::UTF8ToUTF16(term);
|
| - std::replace(result.begin(), result.end(), '+', ' ');
|
| + if (unescape_rules & net::UnescapeRule::REPLACE_PLUS_WITH_SPACE)
|
| + std::replace(result.begin(), result.end(), '+', ' ');
|
| return result;
|
| }
|
|
|
| @@ -524,8 +527,6 @@ bool TemplateURLRef::ExtractSearchTermsFromURL(
|
|
|
| std::string source;
|
| url::Component position;
|
| - net::UnescapeRule::Type unescape_rules =
|
| - net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS;
|
|
|
| if (search_term_key_location_ == url::Parsed::PATH) {
|
| source = url.path();
|
| @@ -560,12 +561,11 @@ bool TemplateURLRef::ExtractSearchTermsFromURL(
|
| }
|
| if (!key_found)
|
| return false;
|
| - unescape_rules |= net::UnescapeRule::REPLACE_PLUS_WITH_SPACE;
|
| }
|
|
|
| // Extract the search term.
|
| - *search_terms = net::UnescapeAndDecodeUTF8URLComponent(
|
| - source.substr(position.begin, position.len), unescape_rules);
|
| + *search_terms = SearchTermToString16(
|
| + source.substr(position.begin, position.len));
|
| if (search_terms_component)
|
| *search_terms_component = search_term_key_location_;
|
| if (search_terms_position)
|
|
|