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

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

Issue 270533007: Some refactorings to facilitate a larger change to TemplateURLService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase after revert. Created 6 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_service.h" 5 #include "chrome/browser/search_engines/template_url_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "chrome/common/pref_names.h" 44 #include "chrome/common/pref_names.h"
45 #include "chrome/common/url_constants.h" 45 #include "chrome/common/url_constants.h"
46 #include "content/public/browser/notification_service.h" 46 #include "content/public/browser/notification_service.h"
47 #include "extensions/common/constants.h" 47 #include "extensions/common/constants.h"
48 #include "net/base/net_util.h" 48 #include "net/base/net_util.h"
49 #include "sync/api/sync_change.h" 49 #include "sync/api/sync_change.h"
50 #include "sync/api/sync_error_factory.h" 50 #include "sync/api/sync_error_factory.h"
51 #include "sync/protocol/search_engine_specifics.pb.h" 51 #include "sync/protocol/search_engine_specifics.pb.h"
52 #include "sync/protocol/sync.pb.h" 52 #include "sync/protocol/sync.pb.h"
53 #include "ui/base/l10n/l10n_util.h" 53 #include "ui/base/l10n/l10n_util.h"
54 #include "url/gurl.h"
54 55
55 typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet; 56 typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet;
56 typedef TemplateURLService::SyncDataMap SyncDataMap; 57 typedef TemplateURLService::SyncDataMap SyncDataMap;
57 58
58 namespace { 59 namespace {
59 60
60 bool TemplateURLMatchesData(const TemplateURL* url1, 61 bool TemplateURLMatchesData(const TemplateURL* url1,
61 const TemplateURLData* url2) { 62 const TemplateURLData* url2) {
62 if (!url1 || !url2) 63 if (!url1 || !url2)
63 return !url1 && !url2; 64 return !url1 && !url2;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 load_handle_(0), 285 load_handle_(0),
285 default_search_provider_(NULL), 286 default_search_provider_(NULL),
286 is_default_search_managed_(false), 287 is_default_search_managed_(false),
287 next_id_(kInvalidTemplateURLID + 1), 288 next_id_(kInvalidTemplateURLID + 1),
288 time_provider_(&base::Time::Now), 289 time_provider_(&base::Time::Now),
289 models_associated_(false), 290 models_associated_(false),
290 processing_syncer_changes_(false), 291 processing_syncer_changes_(false),
291 pending_synced_default_search_(false), 292 pending_synced_default_search_(false),
292 dsp_change_origin_(DSP_CHANGE_OTHER), 293 dsp_change_origin_(DSP_CHANGE_OTHER),
293 default_search_manager_( 294 default_search_manager_(
294 new DefaultSearchManager(GetPrefs(), 295 GetPrefs(), DefaultSearchManager::ObserverCallback()) {
295 DefaultSearchManager::ObserverCallback())) {
296 DCHECK(profile_); 296 DCHECK(profile_);
297 Init(NULL, 0); 297 Init(NULL, 0);
298 } 298 }
299 299
300 TemplateURLService::TemplateURLService(const Initializer* initializers, 300 TemplateURLService::TemplateURLService(const Initializer* initializers,
301 const int count) 301 const int count)
302 : provider_map_(new SearchHostToURLsMap), 302 : provider_map_(new SearchHostToURLsMap),
303 profile_(NULL), 303 profile_(NULL),
304 loaded_(false), 304 loaded_(false),
305 load_failed_(false), 305 load_failed_(false),
306 load_handle_(0), 306 load_handle_(0),
307 service_(NULL), 307 service_(NULL),
308 default_search_provider_(NULL), 308 default_search_provider_(NULL),
309 is_default_search_managed_(false), 309 is_default_search_managed_(false),
310 next_id_(kInvalidTemplateURLID + 1), 310 next_id_(kInvalidTemplateURLID + 1),
311 time_provider_(&base::Time::Now), 311 time_provider_(&base::Time::Now),
312 models_associated_(false), 312 models_associated_(false),
313 processing_syncer_changes_(false), 313 processing_syncer_changes_(false),
314 pending_synced_default_search_(false), 314 pending_synced_default_search_(false),
315 dsp_change_origin_(DSP_CHANGE_OTHER) { 315 dsp_change_origin_(DSP_CHANGE_OTHER),
316 default_search_manager_(
317 GetPrefs(), DefaultSearchManager::ObserverCallback()) {
316 Init(initializers, count); 318 Init(initializers, count);
317 } 319 }
318 320
319 TemplateURLService::~TemplateURLService() { 321 TemplateURLService::~TemplateURLService() {
320 // |service_| should be deleted during Shutdown(). 322 // |service_| should be deleted during Shutdown().
321 DCHECK(!service_); 323 DCHECK(!service_);
322 STLDeleteElements(&template_urls_); 324 STLDeleteElements(&template_urls_);
323 } 325 }
324 326
325 // static 327 // static
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 // be replaced. We do this to ensure that if the user assigns a different 593 // be replaced. We do this to ensure that if the user assigns a different
592 // keyword to a generated TemplateURL, we won't regenerate another keyword for 594 // keyword to a generated TemplateURL, we won't regenerate another keyword for
593 // the same host. 595 // the same host.
594 return !url.is_valid() || url.host().empty() || 596 return !url.is_valid() || url.host().empty() ||
595 CanReplaceKeywordForHost(url.host(), template_url_to_replace); 597 CanReplaceKeywordForHost(url.host(), template_url_to_replace);
596 } 598 }
597 599
598 void TemplateURLService::FindMatchingKeywords( 600 void TemplateURLService::FindMatchingKeywords(
599 const base::string16& prefix, 601 const base::string16& prefix,
600 bool support_replacement_only, 602 bool support_replacement_only,
601 TemplateURLVector* matches) const { 603 TemplateURLVector* matches) {
602 // Sanity check args. 604 // Sanity check args.
603 if (prefix.empty()) 605 if (prefix.empty())
604 return; 606 return;
605 DCHECK(matches != NULL); 607 DCHECK(matches != NULL);
606 DCHECK(matches->empty()); // The code for exact matches assumes this. 608 DCHECK(matches->empty()); // The code for exact matches assumes this.
607 609
608 // Required for VS2010: http://connect.microsoft.com/VisualStudio/feedback/det ails/520043/error-converting-from-null-to-a-pointer-type-in-std-pair 610 // Required for VS2010: http://connect.microsoft.com/VisualStudio/feedback/det ails/520043/error-converting-from-null-to-a-pointer-type-in-std-pair
609 TemplateURL* const kNullTemplateURL = NULL; 611 TemplateURL* const kNullTemplateURL = NULL;
610 612
611 // Find matching keyword range. Searches the element map for keywords 613 // Find matching keyword range. Searches the element map for keywords
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 return !is_default_search_managed() && 846 return !is_default_search_managed() &&
845 !IsExtensionControlledDefaultSearch() && 847 !IsExtensionControlledDefaultSearch() &&
846 (url != GetDefaultSearchProvider()) && 848 (url != GetDefaultSearchProvider()) &&
847 url->url_ref().SupportsReplacement() && 849 url->url_ref().SupportsReplacement() &&
848 (url->GetType() == TemplateURL::NORMAL); 850 (url->GetType() == TemplateURL::NORMAL);
849 } 851 }
850 852
851 void TemplateURLService::SetUserSelectedDefaultSearchProvider( 853 void TemplateURLService::SetUserSelectedDefaultSearchProvider(
852 TemplateURL* url) { 854 TemplateURL* url) {
853 SetDefaultSearchProvider(url); 855 SetDefaultSearchProvider(url);
854 if (default_search_manager_) { 856 if (url)
855 if (url) 857 default_search_manager_.SetUserSelectedDefaultSearchEngine(url->data());
856 default_search_manager_->SetUserSelectedDefaultSearchEngine(url->data()); 858 else
857 else 859 default_search_manager_.ClearUserSelectedDefaultSearchEngine();
858 default_search_manager_->ClearUserSelectedDefaultSearchEngine();
859 }
860 } 860 }
861 861
862 TemplateURL* TemplateURLService::GetDefaultSearchProvider() { 862 TemplateURL* TemplateURLService::GetDefaultSearchProvider() {
863 if (loaded_ && !load_failed_) 863 if (loaded_ && !load_failed_)
864 return default_search_provider_; 864 return default_search_provider_;
865 // We're not loaded, rely on the default search provider stored in prefs. 865 // We're not loaded, rely on the default search provider stored in prefs.
866 return initial_default_search_provider_.get(); 866 return initial_default_search_provider_.get();
867 } 867 }
868 868
869 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider( 869 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider(
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 data.SetKeyword(updated_keyword); 1204 data.SetKeyword(updated_keyword);
1205 TemplateURL new_turl(existing_turl->profile(), data); 1205 TemplateURL new_turl(existing_turl->profile(), data);
1206 UIThreadSearchTermsData search_terms_data(existing_turl->profile()); 1206 UIThreadSearchTermsData search_terms_data(existing_turl->profile());
1207 if (UpdateNoNotify(existing_turl, new_turl, search_terms_data)) 1207 if (UpdateNoNotify(existing_turl, new_turl, search_terms_data))
1208 NotifyObservers(); 1208 NotifyObservers();
1209 1209
1210 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(new_turl); 1210 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(new_turl);
1211 new_changes.push_back(syncer::SyncChange(FROM_HERE, 1211 new_changes.push_back(syncer::SyncChange(FROM_HERE,
1212 syncer::SyncChange::ACTION_ADD, 1212 syncer::SyncChange::ACTION_ADD,
1213 sync_data)); 1213 sync_data));
1214 // Ignore the delete attempt. This means we never end up reseting the 1214 // Ignore the delete attempt. This means we never end up resetting the
1215 // default search provider due to an ACTION_DELETE from sync. 1215 // default search provider due to an ACTION_DELETE from sync.
1216 continue; 1216 continue;
1217 } 1217 }
1218 1218
1219 Remove(existing_turl); 1219 Remove(existing_turl);
1220 } else if (iter->change_type() == syncer::SyncChange::ACTION_ADD) { 1220 } else if (iter->change_type() == syncer::SyncChange::ACTION_ADD) {
1221 if (existing_turl) { 1221 if (existing_turl) {
1222 error = sync_error_factory_->CreateAndUploadError( 1222 error = sync_error_factory_->CreateAndUploadError(
1223 FROM_HERE, 1223 FROM_HERE,
1224 "ProcessSyncChanges failed on ChangeType ACTION_ADD"); 1224 "ProcessSyncChanges failed on ChangeType ACTION_ADD");
(...skipping 1467 matching lines...) Expand 10 before | Expand all | Expand 10 after
2692 // Don't log anything if the user has a NULL default search provider. 2692 // Don't log anything if the user has a NULL default search provider.
2693 if (default_search_provider_) { 2693 if (default_search_provider_) {
2694 UMA_HISTOGRAM_ENUMERATION("Search.DefaultSearchProviderType", 2694 UMA_HISTOGRAM_ENUMERATION("Search.DefaultSearchProviderType",
2695 TemplateURLPrepopulateData::GetEngineType(*default_search_provider_), 2695 TemplateURLPrepopulateData::GetEngineType(*default_search_provider_),
2696 SEARCH_ENGINE_MAX); 2696 SEARCH_ENGINE_MAX);
2697 } 2697 }
2698 } 2698 }
2699 } 2699 }
2700 2700
2701 TemplateURL* TemplateURLService::CreateTemplateURLForExtension( 2701 TemplateURL* TemplateURLService::CreateTemplateURLForExtension(
2702 const ExtensionKeyword& extension_keyword) const { 2702 const ExtensionKeyword& extension_keyword) {
2703 TemplateURLData data; 2703 TemplateURLData data;
2704 data.short_name = base::UTF8ToUTF16(extension_keyword.extension_name); 2704 data.short_name = base::UTF8ToUTF16(extension_keyword.extension_name);
2705 data.SetKeyword(base::UTF8ToUTF16(extension_keyword.extension_keyword)); 2705 data.SetKeyword(base::UTF8ToUTF16(extension_keyword.extension_keyword));
2706 // This URL is not actually used for navigation. It holds the extension's 2706 // This URL is not actually used for navigation. It holds the extension's
2707 // ID, as well as forcing the TemplateURL to be treated as a search keyword. 2707 // ID, as well as forcing the TemplateURL to be treated as a search keyword.
2708 data.SetURL(std::string(extensions::kExtensionScheme) + "://" + 2708 data.SetURL(std::string(extensions::kExtensionScheme) + "://" +
2709 extension_keyword.extension_id + "/?q={searchTerms}"); 2709 extension_keyword.extension_id + "/?q={searchTerms}");
2710 return new TemplateURL(profile_, data); 2710 return new TemplateURL(profile_, data);
2711 } 2711 }
2712 2712
2713 TemplateURL* TemplateURLService::FindTemplateURLForExtension( 2713 TemplateURL* TemplateURLService::FindTemplateURLForExtension(
2714 const std::string& extension_id, 2714 const std::string& extension_id,
2715 TemplateURL::Type type) const { 2715 TemplateURL::Type type) {
2716 DCHECK_NE(TemplateURL::NORMAL, type); 2716 DCHECK_NE(TemplateURL::NORMAL, type);
2717 for (TemplateURLVector::const_iterator i = template_urls_.begin(); 2717 for (TemplateURLVector::const_iterator i = template_urls_.begin();
2718 i != template_urls_.end(); ++i) { 2718 i != template_urls_.end(); ++i) {
2719 if ((*i)->GetType() == type && 2719 if ((*i)->GetType() == type &&
2720 (*i)->GetExtensionId() == extension_id) 2720 (*i)->GetExtensionId() == extension_id)
2721 return *i; 2721 return *i;
2722 } 2722 }
2723 2723
2724 return NULL; 2724 return NULL;
2725 } 2725 }
(...skipping 30 matching lines...) Expand all
2756 new_dse = *i; 2756 new_dse = *i;
2757 break; 2757 break;
2758 } 2758 }
2759 } 2759 }
2760 } 2760 }
2761 } 2761 }
2762 if (!new_dse) 2762 if (!new_dse)
2763 new_dse = FindNewDefaultSearchProvider(); 2763 new_dse = FindNewDefaultSearchProvider();
2764 SetDefaultSearchProviderNoNotify(new_dse); 2764 SetDefaultSearchProviderNoNotify(new_dse);
2765 } 2765 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698