Fixes bug in creating search terms where we weren't unescaping
correctly.

BUG=17697
TEST=covered by unit tests

Review URL: http://codereview.chromium.org/159707

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22167 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/search_engines/template_url.cc b/chrome/browser/search_engines/template_url.cc
index 0c98d484..20847804 100644
--- a/chrome/browser/search_engines/template_url.cc
+++ b/chrome/browser/search_engines/template_url.cc
@@ -399,7 +399,8 @@
   std::wstring result;
 
   std::string unescaped =
-      UnescapeURLComponent(term, UnescapeRule::REPLACE_PLUS_WITH_SPACE);
+      UnescapeURLComponent(term, UnescapeRule::REPLACE_PLUS_WITH_SPACE |
+                                 UnescapeRule::URL_SPECIAL_CHARS);
   for (size_t i = 0; i < encodings.size(); ++i) {
     if (CodepageToWide(unescaped, encodings[i].c_str(),
                        OnStringUtilConversionError::FAIL, &result))
diff --git a/chrome/browser/search_engines/template_url_unittest.cc b/chrome/browser/search_engines/template_url_unittest.cc
index f6825d2..3d2ed7a0 100644
--- a/chrome/browser/search_engines/template_url_unittest.cc
+++ b/chrome/browser/search_engines/template_url_unittest.cc
@@ -144,6 +144,10 @@
     {"%e4%bd%a05%e5%a5%bd+to+you", L"\x4f60\x35\x597d to you"},
     // Undecodable input should stay escaped.
     {"%91%01+abcd", L"%91%01 abcd"},
+    // Make sure we convert %2B to +.
+    {"C%2B%2B", L"C++"},
+    // C%2B is escaped as C%252B, make sure we unescape it properly.
+    {"C%252B", L"C%2B"},
   };
 
   TemplateURL t_url;