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

Unified Diff: chrome/browser/search_engines/template_url_service.cc

Issue 296053007: Don't report origin changes during loading. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix formatting. 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/search_engines/template_url_service.cc
diff --git a/chrome/browser/search_engines/template_url_service.cc b/chrome/browser/search_engines/template_url_service.cc
index bc44c0207813b8c465ddf306f65d08640da25647..7f5cb26d21ddf800203f69964e5f827a96194578 100644
--- a/chrome/browser/search_engines/template_url_service.cc
+++ b/chrome/browser/search_engines/template_url_service.cc
@@ -875,6 +875,11 @@ void TemplateURLService::RepairPrepopulatedSearchEngines() {
default_search_manager_.ClearUserSelectedDefaultSearchEngine();
if (!default_search_provider_) {
+ // If the default search provider came from a user pref we would have been
+ // notified of the new (fallback-provided) value in
+ // ClearUserSelectedDefaultSearchEngine() above. Since we are here, the
+ // value was presumably originally a fallback value (which may have been
+ // repaired).
DefaultSearchManager::Source source;
const TemplateURLData* new_dse =
default_search_manager_.GetDefaultSearchEngine(&source);
@@ -1670,10 +1675,16 @@ void TemplateURLService::ChangeToLoadedState() {
provider_map_->Init(template_urls_, search_terms_data);
loaded_ = true;
- // This will cause a call to NotifyObservers().
- ApplyDefaultSearchChange(initial_default_search_provider_ ?
- &initial_default_search_provider_->data() : NULL,
- default_search_provider_source_);
+ {
+ base::AutoReset<DefaultSearchChangeOrigin> change_origin(
+ &dsp_change_origin_, DSP_CHANGE_INITIAL_LOAD);
Peter Kasting 2014/05/21 19:38:41 Can't we just move the |loaded_| assignment statem
erikwright (departed) 2014/05/21 20:38:48 ApplyDefaultSearchChange behaves differently befor
Peter Kasting 2014/05/21 20:45:13 My primary concern is really that you're adding a
erikwright (departed) 2014/05/21 21:18:01 I agree with deprecating the old values (in a sepa
+ // This will cause a call to NotifyObservers().
+ ApplyDefaultSearchChange(
+ initial_default_search_provider_ ?
+ &initial_default_search_provider_->data() : NULL,
+ default_search_provider_source_);
+ }
+
initial_default_search_provider_.reset();
on_loaded_callbacks_.Notify();
}
@@ -1954,8 +1965,8 @@ void TemplateURLService::ApplyDefaultSearchChange(
TemplateURL::MatchesData(default_search_provider_, data))
return;
- UMA_HISTOGRAM_ENUMERATION("Search.DefaultSearchChangeOrigin",
- dsp_change_origin_, DSP_CHANGE_MAX);
+ // Use void* to prevent a potential UAF - this is only for pointer comparison.
+ void* previous_default_search_engine = default_search_provider_;
Peter Kasting 2014/05/21 19:38:41 If you're only doing a pointer comparison, you sho
erikwright (departed) 2014/05/21 20:38:48 This pointer could be invalidated in a variety of
Peter Kasting 2014/05/21 20:45:13 Right, I understand that.
WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get());
if (default_search_provider_source_ == DefaultSearchManager::FROM_POLICY ||
@@ -1969,17 +1980,10 @@ void TemplateURLService::ApplyDefaultSearchChange(
if (!data) {
default_search_provider_ = NULL;
- default_search_provider_source_ = source;
- NotifyObservers();
- return;
- }
-
- if (source == DefaultSearchManager::FROM_EXTENSION) {
+ } else if (source == DefaultSearchManager::FROM_EXTENSION) {
default_search_provider_ = FindMatchingExtensionTemplateURL(
*data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
- }
-
- if (source == DefaultSearchManager::FROM_FALLBACK) {
+ } else if (source == DefaultSearchManager::FROM_FALLBACK) {
default_search_provider_ =
FindPrepopulatedTemplateURL(data->prepopulate_id);
if (default_search_provider_) {
@@ -2005,8 +2009,7 @@ void TemplateURLService::ApplyDefaultSearchChange(
if (AddNoNotify(new_dse, true))
default_search_provider_ = new_dse;
}
- }
- if (source == DefaultSearchManager::FROM_USER) {
+ } else if (source == DefaultSearchManager::FROM_USER) {
default_search_provider_ = GetTemplateURLForGUID(data->sync_guid);
if (!default_search_provider_ && data->prepopulate_id) {
default_search_provider_ =
@@ -2047,7 +2050,14 @@ void TemplateURLService::ApplyDefaultSearchChange(
#endif
}
- NotifyObservers();
+ if (default_search_provider_ != previous_default_search_engine) {
+ if (dsp_change_origin_ != DSP_CHANGE_INITIAL_LOAD) {
+ UMA_HISTOGRAM_ENUMERATION("Search.DefaultSearchChangeOrigin",
+ dsp_change_origin_,
+ DSP_CHANGE_MAX);
+ }
+ NotifyObservers();
+ }
}
bool TemplateURLService::AddNoNotify(TemplateURL* template_url,

Powered by Google App Engine
This is Rietveld 408576698