Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/importer/importer.h" | 5 #include "chrome/browser/importer/importer.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/gfx/image_operations.h" | 10 #include "base/gfx/image_operations.h" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 } | 132 } |
| 133 | 133 |
| 134 void ProfileWriter::AddFavicons( | 134 void ProfileWriter::AddFavicons( |
| 135 const std::vector<history::ImportedFavIconUsage>& favicons) { | 135 const std::vector<history::ImportedFavIconUsage>& favicons) { |
| 136 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)-> | 136 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS)-> |
| 137 SetImportedFavicons(favicons); | 137 SetImportedFavicons(favicons); |
| 138 } | 138 } |
| 139 | 139 |
| 140 typedef std::map<std::string, const TemplateURL*> HostPathMap; | 140 typedef std::map<std::string, const TemplateURL*> HostPathMap; |
| 141 | 141 |
| 142 // Returns the key for the map built by BuildHostPathMap. If url_string is not | |
| 143 // a valid URL, an empty string is returned, otherwise host+path is returned. | |
| 144 static std::string HostPathKeyForURL(const std::wstring& url_string) { | |
| 145 GURL url(url_string); | |
| 146 return url.is_valid() ? url.host() + url.path() : std::string(); | |
| 147 } | |
| 148 | |
| 142 // Builds the key to use in HostPathMap for the specified TemplateURL. Returns | 149 // Builds the key to use in HostPathMap for the specified TemplateURL. Returns |
| 143 // an empty string if a host+path can't be generated for the TemplateURL. | 150 // an empty string if a host+path can't be generated for the TemplateURL. |
| 144 // If an empty string is returned, it should not be added to HostPathMap. | 151 // If an empty string is returned, the TemplateURL should not be added to |
| 145 static std::string BuildHostPathKey(const TemplateURL* t_url) { | 152 // HostPathMap. |
| 146 if (t_url->url() && t_url->url()->SupportsReplacement()) { | 153 // |
| 147 GURL search_url(t_url->url()->ReplaceSearchTerms( | 154 // If |try_url_if_invalid| is true, and |t_url| isn't valid, a string is built |
| 148 *t_url, L"random string", TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, | 155 // from the raw TemplateURL string. Use a value of true for |try_url_if_invalid| |
| 149 std::wstring())); | 156 // when checking imported URLs as the imported URL may not be valid yet may |
| 150 if (search_url.is_valid()) | 157 // match the host+path of one of the default URLs. This is used to catch the |
| 151 return search_url.host() + search_url.path(); | 158 // case of IE using an invalid OSDD URL for Live Search, yet the host+path |
| 159 // matches our prepopulate data. IE's URL for Live Search is something like | |
| 160 // 'http://...{Language}...'. As {Language} is not a valid OSDD parameter value | |
| 161 // the TemplateURL is invalid. | |
|
Peter Kasting
2008/09/25 23:44:19
Thanks for this comment, it helps.
It might be ev
| |
| 162 static std::string BuildHostPathKey(const TemplateURL* t_url, | |
| 163 bool try_url_if_invalid) { | |
| 164 if (t_url->url()) { | |
| 165 if (try_url_if_invalid && !t_url->url()->IsValid()) | |
| 166 return HostPathKeyForURL(t_url->url()->url()); | |
| 167 | |
| 168 if (t_url->url()->SupportsReplacement()) { | |
| 169 return HostPathKeyForURL( | |
| 170 t_url->url()->ReplaceSearchTerms( | |
| 171 *t_url, L"random string", | |
| 172 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, std::wstring())); | |
| 173 } | |
| 152 } | 174 } |
| 153 return std::string(); | 175 return std::string(); |
| 154 } | 176 } |
| 155 | 177 |
| 156 // Builds a set that contains an entry of the host+path for each TemplateURL in | 178 // Builds a set that contains an entry of the host+path for each TemplateURL in |
| 157 // the TemplateURLModel that has a valid search url. | 179 // the TemplateURLModel that has a valid search url. |
| 158 static void BuildHostPathMap(const TemplateURLModel& model, | 180 static void BuildHostPathMap(const TemplateURLModel& model, |
| 159 HostPathMap* host_path_map) { | 181 HostPathMap* host_path_map) { |
| 160 std::vector<const TemplateURL*> template_urls = model.GetTemplateURLs(); | 182 std::vector<const TemplateURL*> template_urls = model.GetTemplateURLs(); |
| 161 for (size_t i = 0; i < template_urls.size(); ++i) { | 183 for (size_t i = 0; i < template_urls.size(); ++i) { |
| 162 const std::string host_path = BuildHostPathKey(template_urls[i]); | 184 const std::string host_path = BuildHostPathKey(template_urls[i], false); |
| 163 if (!host_path.empty()) { | 185 if (!host_path.empty()) { |
| 164 const TemplateURL* existing_turl = (*host_path_map)[host_path]; | 186 const TemplateURL* existing_turl = (*host_path_map)[host_path]; |
| 165 if (!existing_turl || | 187 if (!existing_turl || |
| 166 (template_urls[i]->show_in_default_list() && | 188 (template_urls[i]->show_in_default_list() && |
| 167 !existing_turl->show_in_default_list())) { | 189 !existing_turl->show_in_default_list())) { |
| 168 // If there are multiple TemplateURLs with the same host+path, favor | 190 // If there are multiple TemplateURLs with the same host+path, favor |
| 169 // those shown in the default list. If there are multiple potential | 191 // those shown in the default list. If there are multiple potential |
| 170 // defaults, favor the first one, which should be the more commonly used | 192 // defaults, favor the first one, which should be the more commonly used |
| 171 // one. | 193 // one. |
| 172 (*host_path_map)[host_path] = template_urls[i]; | 194 (*host_path_map)[host_path] = template_urls[i]; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 201 delete t_url; | 223 delete t_url; |
| 202 continue; | 224 continue; |
| 203 } | 225 } |
| 204 | 226 |
| 205 // For search engines if there is already a keyword with the same | 227 // For search engines if there is already a keyword with the same |
| 206 // host+path, we don't import it. This is done to avoid both duplicate | 228 // host+path, we don't import it. This is done to avoid both duplicate |
| 207 // search providers (such as two Googles, or two Yahoos) as well as making | 229 // search providers (such as two Googles, or two Yahoos) as well as making |
| 208 // sure the search engines we provide aren't replaced by those from the | 230 // sure the search engines we provide aren't replaced by those from the |
| 209 // imported browser. | 231 // imported browser. |
| 210 if (unique_on_host_and_path && | 232 if (unique_on_host_and_path && |
| 211 host_path_map.find(BuildHostPathKey(t_url)) != host_path_map.end()) { | 233 host_path_map.find( |
| 234 BuildHostPathKey(t_url, true)) != host_path_map.end()) { | |
| 212 if (default_keyword) { | 235 if (default_keyword) { |
| 213 const TemplateURL* turl_with_host_path = | 236 const TemplateURL* turl_with_host_path = |
| 214 host_path_map[BuildHostPathKey(t_url)]; | 237 host_path_map[BuildHostPathKey(t_url, true)]; |
| 215 if (turl_with_host_path) | 238 if (turl_with_host_path) |
| 216 model->SetDefaultSearchProvider(turl_with_host_path); | 239 model->SetDefaultSearchProvider(turl_with_host_path); |
| 217 else | 240 else |
| 218 NOTREACHED(); // BuildHostPathMap should only insert non-null values. | 241 NOTREACHED(); // BuildHostPathMap should only insert non-null values. |
| 219 } | 242 } |
| 220 delete t_url; | 243 delete t_url; |
| 221 continue; | 244 continue; |
| 222 } | 245 } |
| 223 model->Add(t_url); | 246 if (t_url->url() && t_url->url()->IsValid()) { |
| 224 if (default_keyword) | 247 model->Add(t_url); |
| 225 model->SetDefaultSearchProvider(t_url); | 248 if (default_keyword && t_url->url() && t_url->url()->SupportsReplacement() ) |
| 249 model->SetDefaultSearchProvider(t_url); | |
| 250 } else { | |
| 251 // Don't add invalid TemplateURLs to the model. | |
| 252 delete t_url; | |
| 253 } | |
| 226 } | 254 } |
| 227 } | 255 } |
| 228 | 256 |
| 229 void ProfileWriter::ShowBookmarkBar() { | 257 void ProfileWriter::ShowBookmarkBar() { |
| 230 DCHECK(profile_); | 258 DCHECK(profile_); |
| 231 | 259 |
| 232 PrefService* prefs = profile_->GetPrefs(); | 260 PrefService* prefs = profile_->GetPrefs(); |
| 233 // Check whether the bookmark bar is shown in current pref. | 261 // Check whether the bookmark bar is shown in current pref. |
| 234 if (!prefs->GetBoolean(prefs::kShowBookmarkBar)) { | 262 if (!prefs->GetBoolean(prefs::kShowBookmarkBar)) { |
| 235 // Set the pref and notify the notification service. | 263 // Set the pref and notify the notification service. |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 532 if (!source_path.empty()) { | 560 if (!source_path.empty()) { |
| 533 ProfileInfo* firefox = new ProfileInfo(); | 561 ProfileInfo* firefox = new ProfileInfo(); |
| 534 firefox->description = l10n_util::GetString(IDS_IMPORT_FROM_FIREFOX); | 562 firefox->description = l10n_util::GetString(IDS_IMPORT_FROM_FIREFOX); |
| 535 firefox->browser_type = firefox_type; | 563 firefox->browser_type = firefox_type; |
| 536 firefox->source_path = source_path; | 564 firefox->source_path = source_path; |
| 537 firefox->app_path = GetFirefoxInstallPath(); | 565 firefox->app_path = GetFirefoxInstallPath(); |
| 538 source_profiles_.push_back(firefox); | 566 source_profiles_.push_back(firefox); |
| 539 } | 567 } |
| 540 } | 568 } |
| 541 | 569 |
| OLD | NEW |