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

Side by Side 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: Merge master. 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 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 ++i) { 868 ++i) {
869 AddNoNotify(new TemplateURL(profile_, *i), true); 869 AddNoNotify(new TemplateURL(profile_, *i), true);
870 } 870 }
871 871
872 base::AutoReset<DefaultSearchChangeOrigin> change_origin( 872 base::AutoReset<DefaultSearchChangeOrigin> change_origin(
873 &dsp_change_origin_, DSP_CHANGE_PROFILE_RESET); 873 &dsp_change_origin_, DSP_CHANGE_PROFILE_RESET);
874 874
875 default_search_manager_.ClearUserSelectedDefaultSearchEngine(); 875 default_search_manager_.ClearUserSelectedDefaultSearchEngine();
876 876
877 if (!default_search_provider_) { 877 if (!default_search_provider_) {
878 // If the default search provider came from a user pref we would have been
879 // notified of the new (fallback-provided) value in
880 // ClearUserSelectedDefaultSearchEngine() above. Since we are here, the
881 // value was presumably originally a fallback value (which may have been
882 // repaired).
878 DefaultSearchManager::Source source; 883 DefaultSearchManager::Source source;
879 const TemplateURLData* new_dse = 884 const TemplateURLData* new_dse =
880 default_search_manager_.GetDefaultSearchEngine(&source); 885 default_search_manager_.GetDefaultSearchEngine(&source);
881 // ApplyDefaultSearchChange will notify observers once it is done. 886 // ApplyDefaultSearchChange will notify observers once it is done.
882 ApplyDefaultSearchChange(new_dse, source); 887 ApplyDefaultSearchChange(new_dse, source);
883 } else { 888 } else {
884 NotifyObservers(); 889 NotifyObservers();
885 } 890 }
886 } 891 }
887 892
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
1670 } 1675 }
1671 1676
1672 void TemplateURLService::ChangeToLoadedState() { 1677 void TemplateURLService::ChangeToLoadedState() {
1673 DCHECK(!loaded_); 1678 DCHECK(!loaded_);
1674 1679
1675 UIThreadSearchTermsData search_terms_data(profile_); 1680 UIThreadSearchTermsData search_terms_data(profile_);
1676 provider_map_->Init(template_urls_, search_terms_data); 1681 provider_map_->Init(template_urls_, search_terms_data);
1677 loaded_ = true; 1682 loaded_ = true;
1678 1683
1679 // This will cause a call to NotifyObservers(). 1684 // This will cause a call to NotifyObservers().
1680 ApplyDefaultSearchChange(initial_default_search_provider_ ? 1685 ApplyDefaultSearchChangeNoMetrics(
1681 &initial_default_search_provider_->data() : NULL, 1686 initial_default_search_provider_ ?
1682 default_search_provider_source_); 1687 &initial_default_search_provider_->data() : NULL,
1688 default_search_provider_source_);
1683 initial_default_search_provider_.reset(); 1689 initial_default_search_provider_.reset();
1684 on_loaded_callbacks_.Notify(); 1690 on_loaded_callbacks_.Notify();
1685 } 1691 }
1686 1692
1687 bool TemplateURLService::CanReplaceKeywordForHost( 1693 bool TemplateURLService::CanReplaceKeywordForHost(
1688 const std::string& host, 1694 const std::string& host,
1689 TemplateURL** to_replace) { 1695 TemplateURL** to_replace) {
1690 DCHECK(!to_replace || !*to_replace); 1696 DCHECK(!to_replace || !*to_replace);
1691 const TemplateURLSet* urls = provider_map_->GetURLsForHost(host); 1697 const TemplateURLSet* urls = provider_map_->GetURLsForHost(host);
1692 if (!urls) 1698 if (!urls)
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 !IdenticalSyncGUIDs(data, GetDefaultSearchProvider()))) { 1940 !IdenticalSyncGUIDs(data, GetDefaultSearchProvider()))) {
1935 GetPrefs()->SetString(prefs::kSyncedDefaultSearchProviderGUID, 1941 GetPrefs()->SetString(prefs::kSyncedDefaultSearchProviderGUID,
1936 data->sync_guid); 1942 data->sync_guid);
1937 } 1943 }
1938 ApplyDefaultSearchChange(data, source); 1944 ApplyDefaultSearchChange(data, source);
1939 } 1945 }
1940 1946
1941 void TemplateURLService::ApplyDefaultSearchChange( 1947 void TemplateURLService::ApplyDefaultSearchChange(
1942 const TemplateURLData* data, 1948 const TemplateURLData* data,
1943 DefaultSearchManager::Source source) { 1949 DefaultSearchManager::Source source) {
1950 if (!ApplyDefaultSearchChangeNoMetrics(data, source))
1951 return;
1952
1953 UMA_HISTOGRAM_ENUMERATION(
1954 "Search.DefaultSearchChangeOrigin", dsp_change_origin_, DSP_CHANGE_MAX);
1955
1956 if (GetDefaultSearchProvider() &&
1957 GetDefaultSearchProvider()->HasGoogleBaseURLs()) {
1958 #if defined(ENABLE_RLZ)
1959 RLZTracker::RecordProductEvent(
1960 rlz_lib::CHROME, RLZTracker::ChromeOmnibox(), rlz_lib::SET_TO_GOOGLE);
1961 #endif
1962 }
1963 }
1964
1965 bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics(
1966 const TemplateURLData* data,
1967 DefaultSearchManager::Source source) {
1944 if (!loaded_) { 1968 if (!loaded_) {
1945 // Set |initial_default_search_provider_| from the preferences. This is 1969 // Set |initial_default_search_provider_| from the preferences. This is
1946 // mainly so we can hold ownership until we get to the point where the list 1970 // mainly so we can hold ownership until we get to the point where the list
1947 // of keywords from Web Data is the owner of everything including the 1971 // of keywords from Web Data is the owner of everything including the
1948 // default. 1972 // default.
1973 bool changed =
1974 TemplateURL::MatchesData(initial_default_search_provider_.get(), data);
1949 initial_default_search_provider_.reset( 1975 initial_default_search_provider_.reset(
1950 data ? new TemplateURL(profile_, *data) : NULL); 1976 data ? new TemplateURL(profile_, *data) : NULL);
1951 default_search_provider_source_ = source; 1977 default_search_provider_source_ = source;
1952 return; 1978 return changed;
1953 } 1979 }
1954 1980
1955 // Prevent recursion if we update the value stored in default_search_manager_. 1981 // Prevent recursion if we update the value stored in default_search_manager_.
1956 // Note that we exclude the case of data == NULL because that could cause a 1982 // Note that we exclude the case of data == NULL because that could cause a
1957 // false positive for recursion when the initial_default_search_provider_ is 1983 // false positive for recursion when the initial_default_search_provider_ is
1958 // NULL due to policy. We'll never actually get recursion with data == NULL. 1984 // NULL due to policy. We'll never actually get recursion with data == NULL.
1959 if (source == default_search_provider_source_ && data != NULL && 1985 if (source == default_search_provider_source_ && data != NULL &&
1960 TemplateURL::MatchesData(default_search_provider_, data)) 1986 TemplateURL::MatchesData(default_search_provider_, data))
1961 return; 1987 return false;
1962 1988
1963 UMA_HISTOGRAM_ENUMERATION("Search.DefaultSearchChangeOrigin", 1989 // This may be deleted later. Use exclusively for pointer comparison to detect
1964 dsp_change_origin_, DSP_CHANGE_MAX); 1990 // a change.
1991 TemplateURL* previous_default_search_engine = default_search_provider_;
1965 1992
1966 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); 1993 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get());
1967 if (default_search_provider_source_ == DefaultSearchManager::FROM_POLICY || 1994 if (default_search_provider_source_ == DefaultSearchManager::FROM_POLICY ||
1968 source == DefaultSearchManager::FROM_POLICY) { 1995 source == DefaultSearchManager::FROM_POLICY) {
1969 // We do this both to remove any no-longer-applicable policy-defined DSE as 1996 // We do this both to remove any no-longer-applicable policy-defined DSE as
1970 // well as to add the new one, if appropriate. 1997 // well as to add the new one, if appropriate.
1971 UpdateProvidersCreatedByPolicy( 1998 UpdateProvidersCreatedByPolicy(
1972 &template_urls_, 1999 &template_urls_,
1973 source == DefaultSearchManager::FROM_POLICY ? data : NULL); 2000 source == DefaultSearchManager::FROM_POLICY ? data : NULL);
1974 } 2001 }
1975 2002
1976 if (!data) { 2003 if (!data) {
1977 default_search_provider_ = NULL; 2004 default_search_provider_ = NULL;
1978 default_search_provider_source_ = source; 2005 } else if (source == DefaultSearchManager::FROM_EXTENSION) {
1979 NotifyObservers();
1980 return;
1981 }
1982
1983 if (source == DefaultSearchManager::FROM_EXTENSION) {
1984 default_search_provider_ = FindMatchingExtensionTemplateURL( 2006 default_search_provider_ = FindMatchingExtensionTemplateURL(
1985 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); 2007 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION);
1986 } 2008 } else if (source == DefaultSearchManager::FROM_FALLBACK) {
1987
1988 if (source == DefaultSearchManager::FROM_FALLBACK) {
1989 default_search_provider_ = 2009 default_search_provider_ =
1990 FindPrepopulatedTemplateURL(data->prepopulate_id); 2010 FindPrepopulatedTemplateURL(data->prepopulate_id);
1991 if (default_search_provider_) { 2011 if (default_search_provider_) {
1992 TemplateURLData update_data(*data); 2012 TemplateURLData update_data(*data);
1993 update_data.sync_guid = default_search_provider_->sync_guid(); 2013 update_data.sync_guid = default_search_provider_->sync_guid();
1994 if (!default_search_provider_->safe_for_autoreplace()) { 2014 if (!default_search_provider_->safe_for_autoreplace()) {
1995 update_data.safe_for_autoreplace = false; 2015 update_data.safe_for_autoreplace = false;
1996 update_data.SetKeyword(default_search_provider_->keyword()); 2016 update_data.SetKeyword(default_search_provider_->keyword());
1997 update_data.short_name = default_search_provider_->short_name(); 2017 update_data.short_name = default_search_provider_->short_name();
1998 } 2018 }
1999 UIThreadSearchTermsData search_terms_data( 2019 UIThreadSearchTermsData search_terms_data(
2000 default_search_provider_->profile()); 2020 default_search_provider_->profile());
2001 UpdateNoNotify(default_search_provider_, 2021 UpdateNoNotify(default_search_provider_,
2002 TemplateURL(profile_, update_data), 2022 TemplateURL(profile_, update_data),
2003 search_terms_data); 2023 search_terms_data);
2004 } else { 2024 } else {
2005 // Normally the prepopulated fallback should be present in 2025 // Normally the prepopulated fallback should be present in
2006 // |template_urls_|, but in a few cases it might not be: 2026 // |template_urls_|, but in a few cases it might not be:
2007 // (1) Tests that initialize the TemplateURLService in peculiar ways. 2027 // (1) Tests that initialize the TemplateURLService in peculiar ways.
2008 // (2) If the user deleted the pre-populated default and we subsequently 2028 // (2) If the user deleted the pre-populated default and we subsequently
2009 // lost their user-selected value. 2029 // lost their user-selected value.
2010 TemplateURL* new_dse = new TemplateURL(profile_, *data); 2030 TemplateURL* new_dse = new TemplateURL(profile_, *data);
2011 if (AddNoNotify(new_dse, true)) 2031 if (AddNoNotify(new_dse, true))
2012 default_search_provider_ = new_dse; 2032 default_search_provider_ = new_dse;
2013 } 2033 }
2014 } 2034 } else if (source == DefaultSearchManager::FROM_USER) {
2015 if (source == DefaultSearchManager::FROM_USER) {
2016 default_search_provider_ = GetTemplateURLForGUID(data->sync_guid); 2035 default_search_provider_ = GetTemplateURLForGUID(data->sync_guid);
2017 if (!default_search_provider_ && data->prepopulate_id) { 2036 if (!default_search_provider_ && data->prepopulate_id) {
2018 default_search_provider_ = 2037 default_search_provider_ =
2019 FindPrepopulatedTemplateURL(data->prepopulate_id); 2038 FindPrepopulatedTemplateURL(data->prepopulate_id);
2020 } 2039 }
2021 TemplateURLData new_data(*data); 2040 TemplateURLData new_data(*data);
2022 new_data.show_in_default_list = true; 2041 new_data.show_in_default_list = true;
2023 if (default_search_provider_) { 2042 if (default_search_provider_) {
2024 UIThreadSearchTermsData search_terms_data( 2043 UIThreadSearchTermsData search_terms_data(
2025 default_search_provider_->profile()); 2044 default_search_provider_->profile());
2026 UpdateNoNotify(default_search_provider_, 2045 UpdateNoNotify(default_search_provider_,
2027 TemplateURL(profile_, new_data), 2046 TemplateURL(profile_, new_data),
2028 search_terms_data); 2047 search_terms_data);
2029 } else { 2048 } else {
2030 new_data.id = kInvalidTemplateURLID; 2049 new_data.id = kInvalidTemplateURLID;
2031 TemplateURL* new_dse = new TemplateURL(profile_, new_data); 2050 TemplateURL* new_dse = new TemplateURL(profile_, new_data);
2032 if (AddNoNotify(new_dse, true)) 2051 if (AddNoNotify(new_dse, true))
2033 default_search_provider_ = new_dse; 2052 default_search_provider_ = new_dse;
2034 } 2053 }
2035 if (default_search_provider_ && GetPrefs()) { 2054 if (default_search_provider_ && GetPrefs()) {
2036 GetPrefs()->SetString( 2055 GetPrefs()->SetString(
2037 prefs::kSyncedDefaultSearchProviderGUID, 2056 prefs::kSyncedDefaultSearchProviderGUID,
2038 default_search_provider_->sync_guid()); 2057 default_search_provider_->sync_guid());
2039 } 2058 }
2040 2059
2041 } 2060 }
2042 2061
2043 default_search_provider_source_ = source; 2062 default_search_provider_source_ = source;
2044 2063
2045 if (default_search_provider_ && 2064 bool changed = default_search_provider_ != previous_default_search_engine;
2046 default_search_provider_->HasGoogleBaseURLs()) { 2065
2047 if (profile_) 2066 if (profile_ && changed && default_search_provider_ &&
2048 GoogleURLTracker::RequestServerCheck(profile_, false); 2067 default_search_provider_->HasGoogleBaseURLs())
2049 #if defined(ENABLE_RLZ) 2068 GoogleURLTracker::RequestServerCheck(profile_, false);
2050 RLZTracker::RecordProductEvent(rlz_lib::CHROME,
2051 RLZTracker::ChromeOmnibox(),
2052 rlz_lib::SET_TO_GOOGLE);
2053 #endif
2054 }
2055 2069
2056 NotifyObservers(); 2070 NotifyObservers();
2071
2072 return changed;
2057 } 2073 }
2058 2074
2059 bool TemplateURLService::AddNoNotify(TemplateURL* template_url, 2075 bool TemplateURLService::AddNoNotify(TemplateURL* template_url,
2060 bool newly_adding) { 2076 bool newly_adding) {
2061 DCHECK(template_url); 2077 DCHECK(template_url);
2062 2078
2063 if (newly_adding) { 2079 if (newly_adding) {
2064 DCHECK_EQ(kInvalidTemplateURLID, template_url->id()); 2080 DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
2065 DCHECK(std::find(template_urls_.begin(), template_urls_.end(), 2081 DCHECK(std::find(template_urls_.begin(), template_urls_.end(),
2066 template_url) == template_urls_.end()); 2082 template_url) == template_urls_.end());
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 2517
2502 if (most_recently_intalled_default) { 2518 if (most_recently_intalled_default) {
2503 base::AutoReset<DefaultSearchChangeOrigin> change_origin( 2519 base::AutoReset<DefaultSearchChangeOrigin> change_origin(
2504 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION); 2520 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION);
2505 default_search_manager_.SetExtensionControlledDefaultSearchEngine( 2521 default_search_manager_.SetExtensionControlledDefaultSearchEngine(
2506 most_recently_intalled_default->data()); 2522 most_recently_intalled_default->data());
2507 } else { 2523 } else {
2508 default_search_manager_.ClearExtensionControlledDefaultSearchEngine(); 2524 default_search_manager_.ClearExtensionControlledDefaultSearchEngine();
2509 } 2525 }
2510 } 2526 }
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