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

Side by Side Diff: chrome/browser/template_url_model.cc

Issue 14419: Porting in browser/webdata and template_url. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 12 years 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
« no previous file with comments | « chrome/browser/template_url.cc ('k') | chrome/browser/template_url_model_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/template_url_model.h" 5 #include "chrome/browser/template_url_model.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 14 matching lines...) Expand all
25 #include "net/base/net_util.h" 25 #include "net/base/net_util.h"
26 #include "unicode/rbbi.h" 26 #include "unicode/rbbi.h"
27 #include "unicode/uchar.h" 27 #include "unicode/uchar.h"
28 28
29 using base::Time; 29 using base::Time;
30 30
31 // String in the URL that is replaced by the search term. 31 // String in the URL that is replaced by the search term.
32 static const wchar_t kSearchTermParameter[] = L"{searchTerms}"; 32 static const wchar_t kSearchTermParameter[] = L"{searchTerms}";
33 33
34 // String in Initializer that is replaced with kSearchTermParameter. 34 // String in Initializer that is replaced with kSearchTermParameter.
35 static const wchar_t kTemplateParameter[](L"%s"); 35 static const wchar_t kTemplateParameter[] = L"%s";
36 36
37 // Term used when generating a search url. Use something obscure so that on 37 // Term used when generating a search url. Use something obscure so that on
38 // the rare case the term replaces the URL it's unlikely another keyword would 38 // the rare case the term replaces the URL it's unlikely another keyword would
39 // have the same url. 39 // have the same url.
40 static const wchar_t kReplacementTerm[] = L"blah.blah.blah.blah.blah"; 40 static const wchar_t kReplacementTerm[] = L"blah.blah.blah.blah.blah";
41 41
42 class TemplateURLModel::LessWithPrefix { 42 class TemplateURLModel::LessWithPrefix {
43 public: 43 public:
44 // We want to find the set of keywords that begin with a prefix. The STL 44 // We want to find the set of keywords that begin with a prefix. The STL
45 // algorithms will return the set of elements that are "equal to" the 45 // algorithms will return the set of elements that are "equal to" the
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // properly. See http://b/issue?id=1205573. 166 // properly. See http://b/issue?id=1205573.
167 return net::StripWWW(UTF8ToWide(url.host())); 167 return net::StripWWW(UTF8ToWide(url.host()));
168 } 168 }
169 169
170 // static 170 // static
171 std::wstring TemplateURLModel::CleanUserInputKeyword( 171 std::wstring TemplateURLModel::CleanUserInputKeyword(
172 const std::wstring& keyword) { 172 const std::wstring& keyword) {
173 // Remove the scheme. 173 // Remove the scheme.
174 std::wstring result(l10n_util::ToLower(keyword)); 174 std::wstring result(l10n_util::ToLower(keyword));
175 url_parse::Component scheme_component; 175 url_parse::Component scheme_component;
176 if (url_parse::ExtractScheme(keyword.c_str(), 176 if (url_parse::ExtractScheme(WideToUTF8(keyword).c_str(),
177 static_cast<int>(keyword.length()), 177 static_cast<int>(keyword.length()),
178 &scheme_component)) { 178 &scheme_component)) {
179 // Include trailing ':'. 179 // Include trailing ':'.
180 result.erase(0, scheme_component.end() + 1); 180 result.erase(0, scheme_component.end() + 1);
181 // Many schemes usually have "//" after them, so strip it too. 181 // Many schemes usually have "//" after them, so strip it too.
182 const std::wstring after_scheme(L"//"); 182 const std::wstring after_scheme(L"//");
183 if (result.compare(0, after_scheme.length(), after_scheme) == 0) 183 if (result.compare(0, after_scheme.length(), after_scheme) == 0)
184 result.erase(0, after_scheme.length()); 184 result.erase(0, after_scheme.length());
185 } 185 }
186 186
187 // Remove leading "www.". 187 // Remove leading "www.".
188 result = net::StripWWW(result); 188 result = net::StripWWW(result);
189 189
190 // Remove trailing "/". 190 // Remove trailing "/".
191 return (result.length() > 0 && result[result.length() - 1] == L'/') ? 191 return (result.length() > 0 && result[result.length() - 1] == L'/') ?
192 result.substr(0, result.length() - 1) : result; 192 result.substr(0, result.length() - 1) : result;
193 } 193 }
194 194
195 // static 195 // static
196 GURL TemplateURLModel::GenerateSearchURL(const TemplateURL* t_url) { 196 GURL TemplateURLModel::GenerateSearchURL(const TemplateURL* t_url) {
197 DCHECK(t_url); 197 DCHECK(t_url);
198 const TemplateURLRef* search_ref = t_url->url(); 198 const TemplateURLRef* search_ref = t_url->url();
199 if (!search_ref || !search_ref->IsValid()) 199 if (!search_ref || !search_ref->IsValid())
200 return GURL(); 200 return GURL();
201 201
202 if (!search_ref->SupportsReplacement()) 202 if (!search_ref->SupportsReplacement())
203 return GURL(search_ref->url()); 203 return GURL(WideToUTF8(search_ref->url()));
204 204
205 return GURL(search_ref->ReplaceSearchTerms(*t_url, kReplacementTerm, 205 return search_ref->ReplaceSearchTerms(
206 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, std::wstring())); 206 *t_url,
207 kReplacementTerm,
208 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, std::wstring());
207 } 209 }
208 210
209 bool TemplateURLModel::CanReplaceKeyword( 211 bool TemplateURLModel::CanReplaceKeyword(
210 const std::wstring& keyword, 212 const std::wstring& keyword,
211 const std::wstring& url, 213 const std::wstring& url,
212 const TemplateURL** template_url_to_replace) { 214 const TemplateURL** template_url_to_replace) {
213 DCHECK(!keyword.empty()); // This should only be called for non-empty 215 DCHECK(!keyword.empty()); // This should only be called for non-empty
214 // keywords. If we need to support empty kewords 216 // keywords. If we need to support empty kewords
215 // the code needs to change slightly. 217 // the code needs to change slightly.
216 const TemplateURL* existing_url = GetTemplateURLForKeyword(keyword); 218 const TemplateURL* existing_url = GetTemplateURLForKeyword(keyword);
217 if (existing_url) { 219 if (existing_url) {
218 // We already have a TemplateURL for this keyword. Only allow it to be 220 // We already have a TemplateURL for this keyword. Only allow it to be
219 // replaced if the TemplateURL can be replaced. 221 // replaced if the TemplateURL can be replaced.
220 if (template_url_to_replace) 222 if (template_url_to_replace)
221 *template_url_to_replace = existing_url; 223 *template_url_to_replace = existing_url;
222 return CanReplace(existing_url); 224 return CanReplace(existing_url);
223 } 225 }
224 226
225 // We don't have a TemplateURL with keyword. Only allow a new one if there 227 // We don't have a TemplateURL with keyword. Only allow a new one if there
226 // isn't a TemplateURL for the specified host, or there is one but it can 228 // isn't a TemplateURL for the specified host, or there is one but it can
227 // be replaced. We do this to ensure that if the user assigns a different 229 // be replaced. We do this to ensure that if the user assigns a different
228 // keyword to a generated TemplateURL, we won't regenerate another keyword for 230 // keyword to a generated TemplateURL, we won't regenerate another keyword for
229 // the same host. 231 // the same host.
230 GURL gurl(url); 232 GURL gurl(WideToUTF8(url));
231 if (gurl.is_valid() && !gurl.host().empty()) 233 if (gurl.is_valid() && !gurl.host().empty())
232 return CanReplaceKeywordForHost(gurl.host(), template_url_to_replace); 234 return CanReplaceKeywordForHost(gurl.host(), template_url_to_replace);
233 return true; 235 return true;
234 } 236 }
235 237
236 void TemplateURLModel::FindMatchingKeywords( 238 void TemplateURLModel::FindMatchingKeywords(
237 const std::wstring& prefix, 239 const std::wstring& prefix,
238 bool support_replacement_only, 240 bool support_replacement_only,
239 std::vector<std::wstring>* matches) const { 241 std::vector<std::wstring>* matches) const {
240 // Sanity check args. 242 // Sanity check args.
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 AddToMaps(t_url); 970 AddToMaps(t_url);
969 something_changed = true; 971 something_changed = true;
970 } 972 }
971 } 973 }
972 974
973 if (something_changed && loaded_) { 975 if (something_changed && loaded_) {
974 FOR_EACH_OBSERVER(TemplateURLModelObserver, model_observers_, 976 FOR_EACH_OBSERVER(TemplateURLModelObserver, model_observers_,
975 OnTemplateURLModelChanged()); 977 OnTemplateURLModelChanged());
976 } 978 }
977 } 979 }
OLDNEW
« no previous file with comments | « chrome/browser/template_url.cc ('k') | chrome/browser/template_url_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698