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

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

Issue 263823007: Handle TemplateURLService load failure better (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « chrome/browser/search_engines/template_url_service.h ('k') | no next file » | 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) 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 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 matches->push_back(i->second); 623 matches->push_back(i->second);
624 } 624 }
625 } 625 }
626 626
627 TemplateURL* TemplateURLService::GetTemplateURLForKeyword( 627 TemplateURL* TemplateURLService::GetTemplateURLForKeyword(
628 const base::string16& keyword) { 628 const base::string16& keyword) {
629 KeywordToTemplateMap::const_iterator elem( 629 KeywordToTemplateMap::const_iterator elem(
630 keyword_to_template_map_.find(keyword)); 630 keyword_to_template_map_.find(keyword));
631 if (elem != keyword_to_template_map_.end()) 631 if (elem != keyword_to_template_map_.end())
632 return elem->second; 632 return elem->second;
633 return ((!loaded_ || load_failed_) && 633 return ((!loaded_ || load_failed_) &&
erikwright (departed) 2014/05/03 01:01:54 Now that we copied initial_default_search_provider
634 initial_default_search_provider_.get() && 634 initial_default_search_provider_.get() &&
635 (initial_default_search_provider_->keyword() == keyword)) ? 635 (initial_default_search_provider_->keyword() == keyword)) ?
636 initial_default_search_provider_.get() : NULL; 636 initial_default_search_provider_.get() : NULL;
637 } 637 }
638 638
639 TemplateURL* TemplateURLService::GetTemplateURLForGUID( 639 TemplateURL* TemplateURLService::GetTemplateURLForGUID(
640 const std::string& sync_guid) { 640 const std::string& sync_guid) {
641 GUIDToTemplateMap::const_iterator elem(guid_to_template_map_.find(sync_guid)); 641 GUIDToTemplateMap::const_iterator elem(guid_to_template_map_.find(sync_guid));
642 if (elem != guid_to_template_map_.end()) 642 if (elem != guid_to_template_map_.end())
643 return elem->second; 643 return elem->second;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 SetDefaultSearchProvider(url); 851 SetDefaultSearchProvider(url);
852 if (default_search_manager_) { 852 if (default_search_manager_) {
853 if (url) 853 if (url)
854 default_search_manager_->SetUserSelectedDefaultSearchEngine(url->data()); 854 default_search_manager_->SetUserSelectedDefaultSearchEngine(url->data());
855 else 855 else
856 default_search_manager_->ClearUserSelectedDefaultSearchEngine(); 856 default_search_manager_->ClearUserSelectedDefaultSearchEngine();
857 } 857 }
858 } 858 }
859 859
860 TemplateURL* TemplateURLService::GetDefaultSearchProvider() { 860 TemplateURL* TemplateURLService::GetDefaultSearchProvider() {
861 if (loaded_ && !load_failed_) 861 if (loaded_ && !load_failed_)
erikwright (departed) 2014/05/03 01:01:54 Ditto here. In fact, load_failed_ basically seems
862 return default_search_provider_; 862 return default_search_provider_;
863 // We're not loaded, rely on the default search provider stored in prefs. 863 // We're not loaded, rely on the default search provider stored in prefs.
864 return initial_default_search_provider_.get(); 864 return initial_default_search_provider_.get();
865 } 865 }
866 866
867 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider( 867 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider(
868 const GURL& url) { 868 const GURL& url) {
869 TemplateURL* default_provider = GetDefaultSearchProvider(); 869 TemplateURL* default_provider = GetDefaultSearchProvider();
870 return default_provider && default_provider->IsSearchURL(url); 870 return default_provider && default_provider->IsSearchURL(url);
871 } 871 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 } 969 }
970 970
971 void TemplateURLService::Load() { 971 void TemplateURLService::Load() {
972 if (loaded_ || load_handle_) 972 if (loaded_ || load_handle_)
973 return; 973 return;
974 974
975 if (!service_.get()) { 975 if (!service_.get()) {
976 service_ = WebDataService::FromBrowserContext(profile_); 976 service_ = WebDataService::FromBrowserContext(profile_);
977 } 977 }
978 978
979 if (service_.get()) { 979 if (service_)
980 load_handle_ = service_->GetKeywords(this); 980 load_handle_ = service_->GetKeywords(this);
981 } else { 981 else
982 ChangeToLoadedState(); 982 OnFailedLoad();
983 on_loaded_callbacks_.Notify();
984 }
985 } 983 }
986 984
987 scoped_ptr<TemplateURLService::Subscription> 985 scoped_ptr<TemplateURLService::Subscription>
988 TemplateURLService::RegisterOnLoadedCallback( 986 TemplateURLService::RegisterOnLoadedCallback(
989 const base::Closure& callback) { 987 const base::Closure& callback) {
990 return loaded_ ? 988 return loaded_ ?
991 scoped_ptr<TemplateURLService::Subscription>() : 989 scoped_ptr<TemplateURLService::Subscription>() :
992 on_loaded_callbacks_.Add(callback); 990 on_loaded_callbacks_.Add(callback);
993 } 991 }
994 992
995 void TemplateURLService::OnWebDataServiceRequestDone( 993 void TemplateURLService::OnWebDataServiceRequestDone(
996 WebDataService::Handle h, 994 WebDataService::Handle h,
997 const WDTypedResult* result) { 995 const WDTypedResult* result) {
998 // Reset the load_handle so that we don't try and cancel the load in 996 // Reset the load_handle so that we don't try and cancel the load in
999 // the destructor. 997 // the destructor.
1000 load_handle_ = 0; 998 load_handle_ = 0;
1001 999
1002 if (!result) { 1000 if (!result) {
1003 // Results are null if the database went away or (most likely) wasn't 1001 // Results are null if the database went away or (most likely) wasn't
1004 // loaded. 1002 // loaded.
1005 load_failed_ = true; 1003 load_failed_ = true;
erikwright (departed) 2014/05/03 01:01:54 Shouldn't this also be set in the '!service_' case
Peter Kasting 2014/05/05 18:46:24 Yes. Moved to OnFailedLoad().
1006 ChangeToLoadedState(); 1004 OnFailedLoad();
1007 on_loaded_callbacks_.Notify();
1008 return; 1005 return;
1009 } 1006 }
1010 1007
1011 // initial_default_search_provider_ is only needed before we've finished 1008 // initial_default_search_provider_ is only needed before we've finished
1012 // loading. Now that we've loaded we can nuke it. 1009 // loading. Now that we've loaded we can nuke it.
1013 initial_default_search_provider_.reset(); 1010 initial_default_search_provider_.reset();
1014 1011
1015 TemplateURLVector template_urls; 1012 TemplateURLVector template_urls;
1016 TemplateURL* default_search_provider = NULL; 1013 TemplateURL* default_search_provider = NULL;
1017 int new_resource_keyword_version = 0; 1014 int new_resource_keyword_version = 0;
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 } 1775 }
1779 1776
1780 void TemplateURLService::ChangeToLoadedState() { 1777 void TemplateURLService::ChangeToLoadedState() {
1781 DCHECK(!loaded_); 1778 DCHECK(!loaded_);
1782 1779
1783 UIThreadSearchTermsData search_terms_data(profile_); 1780 UIThreadSearchTermsData search_terms_data(profile_);
1784 provider_map_->Init(template_urls_, search_terms_data); 1781 provider_map_->Init(template_urls_, search_terms_data);
1785 loaded_ = true; 1782 loaded_ = true;
1786 } 1783 }
1787 1784
1785 void TemplateURLService::OnFailedLoad() {
1786 TemplateURL* default_search_provider =
1787 initial_default_search_provider_.release();
1788 AddNoNotify(default_search_provider, true);
1789 SetDefaultSearchProviderNoNotify(default_search_provider);
1790 ChangeToLoadedState();
1791 on_loaded_callbacks_.Notify();
1792 }
1793
1788 void TemplateURLService::ClearDefaultProviderFromPrefs() { 1794 void TemplateURLService::ClearDefaultProviderFromPrefs() {
1789 // We overwrite user preferences. If the default search engine is managed, 1795 // We overwrite user preferences. If the default search engine is managed,
1790 // there is no effect. 1796 // there is no effect.
1791 SaveDefaultSearchProviderToPrefs(NULL, GetPrefs()); 1797 SaveDefaultSearchProviderToPrefs(NULL, GetPrefs());
1792 // Default value for kDefaultSearchProviderEnabled is true. 1798 // Default value for kDefaultSearchProviderEnabled is true.
1793 PrefService* prefs = GetPrefs(); 1799 PrefService* prefs = GetPrefs();
1794 if (prefs) 1800 if (prefs)
1795 prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, true); 1801 prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, true);
1796 } 1802 }
1797 1803
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
2754 new_dse = *i; 2760 new_dse = *i;
2755 break; 2761 break;
2756 } 2762 }
2757 } 2763 }
2758 } 2764 }
2759 } 2765 }
2760 if (!new_dse) 2766 if (!new_dse)
2761 new_dse = FindNewDefaultSearchProvider(); 2767 new_dse = FindNewDefaultSearchProvider();
2762 SetDefaultSearchProviderNoNotify(new_dse); 2768 SetDefaultSearchProviderNoNotify(new_dse);
2763 } 2769 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/template_url_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698