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

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

Issue 555012: Removed restriction for {} so that javascript blocks can be used in the url.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "app/gfx/favicon_size.h" 7 #include "app/gfx/favicon_size.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "base/i18n/icu_string_conversions.h" 9 #include "base/i18n/icu_string_conversions.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 Replacements* replacements) const { 90 Replacements* replacements) const {
91 DCHECK(start != std::string::npos && 91 DCHECK(start != std::string::npos &&
92 end != std::string::npos && end > start); 92 end != std::string::npos && end > start);
93 size_t length = end - start - 1; 93 size_t length = end - start - 1;
94 bool optional = false; 94 bool optional = false;
95 if ((*url)[end - 1] == kOptional) { 95 if ((*url)[end - 1] == kOptional) {
96 optional = true; 96 optional = true;
97 length--; 97 length--;
98 } 98 }
99 std::wstring parameter(url->substr(start + 1, length)); 99 std::wstring parameter(url->substr(start + 1, length));
100 std::wstring full_parameter(url->substr(start, end - start + 1));
100 // Remove the parameter from the string. 101 // Remove the parameter from the string.
101 url->erase(start, end - start + 1); 102 url->erase(start, end - start + 1);
102 if (parameter == kSearchTermsParameter) { 103 if (parameter == kSearchTermsParameter) {
103 replacements->push_back(Replacement(SEARCH_TERMS, static_cast<int>(start))); 104 replacements->push_back(Replacement(SEARCH_TERMS, static_cast<int>(start)));
104 } else if (parameter == kCountParameter) { 105 } else if (parameter == kCountParameter) {
105 if (!optional) 106 if (!optional)
106 url->insert(start, kDefaultCount); 107 url->insert(start, kDefaultCount);
107 } else if (parameter == kStartIndexParameter) { 108 } else if (parameter == kStartIndexParameter) {
108 if (!optional) { 109 if (!optional) {
109 url->insert(start, IntToWString(index_offset_)); 110 url->insert(start, IntToWString(index_offset_));
(...skipping 20 matching lines...) Expand all
130 replacements->push_back(Replacement(GOOGLE_BASE_SUGGEST_URL, 131 replacements->push_back(Replacement(GOOGLE_BASE_SUGGEST_URL,
131 static_cast<int>(start))); 132 static_cast<int>(start)));
132 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { 133 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) {
133 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, 134 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION,
134 static_cast<int>(start))); 135 static_cast<int>(start)));
135 } else if (parameter == kGoogleRLZParameter) { 136 } else if (parameter == kGoogleRLZParameter) {
136 replacements->push_back(Replacement(GOOGLE_RLZ, static_cast<int>(start))); 137 replacements->push_back(Replacement(GOOGLE_RLZ, static_cast<int>(start)));
137 } else if (parameter == kGoogleUnescapedSearchTermsParameter) { 138 } else if (parameter == kGoogleUnescapedSearchTermsParameter) {
138 replacements->push_back(Replacement(GOOGLE_UNESCAPED_SEARCH_TERMS, 139 replacements->push_back(Replacement(GOOGLE_UNESCAPED_SEARCH_TERMS,
139 static_cast<int>(start))); 140 static_cast<int>(start)));
140 } else if (!optional) { 141 } else {
141 // Unknown required parameter. No idea what to replace this with, 142 // It can be some garbage but can also be a javascript block. Put it back.
142 // so fail. 143 url->insert(start, full_parameter);
143 return false; 144 return false;
144 } 145 }
145 return true; 146 return true;
146 } 147 }
147 148
148 std::wstring TemplateURLRef::ParseURL(const std::wstring& url, 149 std::wstring TemplateURLRef::ParseURL(const std::wstring& url,
149 Replacements* replacements, 150 Replacements* replacements,
150 bool* valid) const { 151 bool* valid) const {
151 *valid = false; 152 *valid = false;
152 std::wstring parsed_url = url; 153 std::wstring parsed_url = url;
153 for (size_t last = 0; last != std::string::npos; ) { 154 for (size_t last = 0; last != std::string::npos; ) {
154 last = parsed_url.find(kStartParameter, last); 155 last = parsed_url.find(kStartParameter, last);
155 if (last != std::string::npos) { 156 if (last != std::string::npos) {
156 size_t endTemplate = parsed_url.find(kEndParameter, last); 157 size_t template_end = parsed_url.find(kEndParameter, last);
157 if (endTemplate != std::string::npos) { 158 if (template_end != std::string::npos) {
158 if (!ParseParameter(last, endTemplate, &parsed_url, replacements)) { 159 // Since we allow Javascript in the URL, {} pairs could be nested. Match
159 // Not a valid parameter, return. 160 // only leaf pairs with supported parameters.
160 return std::wstring(); 161 size_t next_template_start = parsed_url.find(kStartParameter, last + 1);
162 if (next_template_start == std::string::npos ||
163 next_template_start > template_end) {
164 // If successful, ParseParameter erases from the string as such no
165 // need to update |last|. If failed, move |last| to the end of pair.
166 if (!ParseParameter(last, template_end, &parsed_url, replacements)) {
167 // |template_end| + 1 may be beyond the end of the string.
168 last = template_end;
169 }
170 } else {
171 last = next_template_start;
161 } 172 }
162 // ParseParamter erases from the string, as such we don't need
163 // to update last.
164 } else { 173 } else {
165 // Open brace without a closing brace, return. 174 // Open brace without a closing brace, return.
166 return std::wstring(); 175 return std::wstring();
167 } 176 }
168 } 177 }
169 } 178 }
170 *valid = true; 179 *valid = true;
171 return parsed_url; 180 return parsed_url;
172 } 181 }
173 182
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 } 606 }
598 return GURL(); 607 return GURL();
599 } 608 }
600 609
601 void TemplateURL::InvalidateCachedValues() const { 610 void TemplateURL::InvalidateCachedValues() const {
602 url_.InvalidateCachedValues(); 611 url_.InvalidateCachedValues();
603 suggestions_url_.InvalidateCachedValues(); 612 suggestions_url_.InvalidateCachedValues();
604 if (autogenerate_keyword_) 613 if (autogenerate_keyword_)
605 keyword_.clear(); 614 keyword_.clear();
606 } 615 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/template_url.h ('k') | chrome/browser/search_engines/template_url_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698