| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |