OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/compiler_specific.h" | 6 #include "base/compiler_specific.h" |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "chrome/browser/protector/base_setting_change.h" | 9 #include "chrome/browser/protector/base_setting_change.h" |
10 #include "chrome/browser/protector/histograms.h" | 10 #include "chrome/browser/protector/histograms.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 void OpenSearchEngineSettings(); | 62 void OpenSearchEngineSettings(); |
63 | 63 |
64 int64 old_id_; | 64 int64 old_id_; |
65 int64 new_id_; | 65 int64 new_id_; |
66 // ID of the search engine that we fall back to if the backup is lost. | 66 // ID of the search engine that we fall back to if the backup is lost. |
67 int64 fallback_id_; | 67 int64 fallback_id_; |
68 string16 old_name_; | 68 string16 old_name_; |
69 string16 new_name_; | 69 string16 new_name_; |
70 // Name of the search engine that we fall back to if the backup is lost. | 70 // Name of the search engine that we fall back to if the backup is lost. |
71 string16 fallback_name_; | 71 string16 fallback_name_; |
72 string16 product_name_; | |
73 // Histogram ID of the new search provider. | 72 // Histogram ID of the new search provider. |
74 int new_histogram_id_; | 73 int new_histogram_id_; |
75 // Default search provider set by |Init| for the period until user makes a | 74 // Default search provider set by |Init| for the period until user makes a |
76 // choice and either |Apply| or |Discard| is performed. Should only be used | 75 // choice and either |Apply| or |Discard| is performed. Should only be used |
77 // for comparison with the current default search provider and never | 76 // for comparison with the current default search provider and never |
78 // dereferenced other than in |Init| because it may be deallocated by | 77 // dereferenced other than in |Init| because it may be deallocated by |
79 // TemplateURLService at any time. | 78 // TemplateURLService at any time. |
80 const TemplateURL* default_search_provider_; | 79 const TemplateURL* default_search_provider_; |
81 | 80 |
82 DISALLOW_COPY_AND_ASSIGN(DefaultSearchProviderChange); | 81 DISALLOW_COPY_AND_ASSIGN(DefaultSearchProviderChange); |
83 }; | 82 }; |
84 | 83 |
85 DefaultSearchProviderChange::DefaultSearchProviderChange( | 84 DefaultSearchProviderChange::DefaultSearchProviderChange( |
86 const TemplateURL* old_url, | 85 const TemplateURL* old_url, |
87 const TemplateURL* new_url) | 86 const TemplateURL* new_url) |
88 : old_id_(0), | 87 : old_id_(0), |
89 new_id_(0), | 88 new_id_(0), |
90 fallback_id_(0), | 89 fallback_id_(0), |
91 product_name_(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)), | |
92 new_histogram_id_(GetSearchProviderHistogramID(new_url)), | 90 new_histogram_id_(GetSearchProviderHistogramID(new_url)), |
93 default_search_provider_(NULL) { | 91 default_search_provider_(NULL) { |
94 if (new_url) { | 92 if (new_url) { |
95 new_id_ = new_url->id(); | 93 new_id_ = new_url->id(); |
96 new_name_ = new_url->short_name(); | 94 new_name_ = new_url->short_name(); |
97 } | 95 } |
98 if (old_url) { | 96 if (old_url) { |
99 old_id_ = old_url->id(); | 97 old_id_ = old_url->id(); |
100 old_name_ = old_url->short_name(); | 98 old_name_ = old_url->short_name(); |
101 } | 99 } |
(...skipping 16 matching lines...) Expand all Loading... |
118 return false; | 116 return false; |
119 | 117 |
120 if (!old_id_ || default_search_provider_->id() != old_id_) { | 118 if (!old_id_ || default_search_provider_->id() != old_id_) { |
121 // Old settings is lost or invalid, so we had to fall back to one of the | 119 // Old settings is lost or invalid, so we had to fall back to one of the |
122 // prepopulated search engines. | 120 // prepopulated search engines. |
123 fallback_id_ = default_search_provider_->id(); | 121 fallback_id_ = default_search_provider_->id(); |
124 fallback_name_ = default_search_provider_->short_name(); | 122 fallback_name_ = default_search_provider_->short_name(); |
125 VLOG(1) << "Fallback to " << fallback_name_; | 123 VLOG(1) << "Fallback to " << fallback_name_; |
126 } | 124 } |
127 | 125 |
| 126 // This must be called after the initial |SetDefaultSearchProvider| call |
| 127 // because the latter will remove the observer. |
128 protector->GetTemplateURLService()->AddObserver(this); | 128 protector->GetTemplateURLService()->AddObserver(this); |
129 | 129 |
130 return true; | 130 return true; |
131 } | 131 } |
132 | 132 |
133 void DefaultSearchProviderChange::Apply() { | 133 void DefaultSearchProviderChange::Apply() { |
134 UMA_HISTOGRAM_ENUMERATION( | 134 UMA_HISTOGRAM_ENUMERATION( |
135 kProtectorHistogramSearchProviderApplied, | 135 kProtectorHistogramSearchProviderApplied, |
136 new_histogram_id_, | 136 new_histogram_id_, |
137 kProtectorMaxSearchProviderID); | 137 kProtectorMaxSearchProviderID); |
(...skipping 30 matching lines...) Expand all Loading... |
168 void DefaultSearchProviderChange::OnBeforeRemoved() { | 168 void DefaultSearchProviderChange::OnBeforeRemoved() { |
169 protector()->GetTemplateURLService()->RemoveObserver(this); | 169 protector()->GetTemplateURLService()->RemoveObserver(this); |
170 } | 170 } |
171 | 171 |
172 string16 DefaultSearchProviderChange::GetBubbleTitle() const { | 172 string16 DefaultSearchProviderChange::GetBubbleTitle() const { |
173 return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_TITLE); | 173 return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_TITLE); |
174 } | 174 } |
175 | 175 |
176 string16 DefaultSearchProviderChange::GetBubbleMessage() const { | 176 string16 DefaultSearchProviderChange::GetBubbleMessage() const { |
177 if (fallback_name_.empty()) | 177 if (fallback_name_.empty()) |
178 return l10n_util::GetStringFUTF16( | 178 return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_MESSAGE); |
179 IDS_SEARCH_ENGINE_CHANGE_MESSAGE, product_name_); | |
180 else | 179 else |
181 return l10n_util::GetStringFUTF16( | 180 return l10n_util::GetStringFUTF16( |
182 IDS_SEARCH_ENGINE_CHANGE_NO_BACKUP_MESSAGE, | 181 IDS_SEARCH_ENGINE_CHANGE_NO_BACKUP_MESSAGE, fallback_name_); |
183 product_name_, fallback_name_); | |
184 } | 182 } |
185 | 183 |
186 string16 DefaultSearchProviderChange::GetApplyButtonText() const { | 184 string16 DefaultSearchProviderChange::GetApplyButtonText() const { |
187 if (new_id_) { | 185 if (new_id_) { |
188 if (new_id_ == fallback_id_) { | 186 if (new_id_ == fallback_id_) { |
189 // Old search engine is lost, the fallback search engine is the same as | 187 // Old search engine is lost, the fallback search engine is the same as |
190 // the new one so no need to show this button. | 188 // the new one so no need to show this button. |
191 return string16(); | 189 return string16(); |
192 } | 190 } |
193 if (new_name_.length() > kMaxDisplayedNameLength) | 191 if (new_name_.length() > kMaxDisplayedNameLength) |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 url = urls[i]; | 240 url = urls[i]; |
243 break; | 241 break; |
244 } | 242 } |
245 } | 243 } |
246 } | 244 } |
247 if (!url && allow_fallback) { | 245 if (!url && allow_fallback) { |
248 url = url_service->FindNewDefaultSearchProvider(); | 246 url = url_service->FindNewDefaultSearchProvider(); |
249 DCHECK(url); | 247 DCHECK(url); |
250 } | 248 } |
251 if (url) { | 249 if (url) { |
| 250 // Remove ourselves from the observer list to prevent from catching our own |
| 251 // change. It is safe to do this multiple times or before adding ourselves. |
| 252 url_service->RemoveObserver(this); |
252 url_service->SetDefaultSearchProvider(url); | 253 url_service->SetDefaultSearchProvider(url); |
253 VLOG(1) << "Default search provider set to: " << url->short_name(); | 254 VLOG(1) << "Default search provider set to: " << url->short_name(); |
| 255 // No need to re-add observer again because any further changes to the |
| 256 // default search provider are of no interest. |
254 } | 257 } |
255 return url; | 258 return url; |
256 } | 259 } |
257 | 260 |
258 void DefaultSearchProviderChange::OpenSearchEngineSettings() { | 261 void DefaultSearchProviderChange::OpenSearchEngineSettings() { |
259 protector()->OpenTab( | 262 protector()->OpenTab( |
260 GURL(std::string(chrome::kChromeUISettingsURL) + | 263 GURL(std::string(chrome::kChromeUISettingsURL) + |
261 chrome::kSearchEnginesSubPage)); | 264 chrome::kSearchEnginesSubPage)); |
262 } | 265 } |
263 | 266 |
264 BaseSettingChange* CreateDefaultSearchProviderChange( | 267 BaseSettingChange* CreateDefaultSearchProviderChange( |
265 const TemplateURL* actual, | 268 const TemplateURL* actual, |
266 const TemplateURL* backup) { | 269 const TemplateURL* backup) { |
267 return new DefaultSearchProviderChange(backup, actual); | 270 return new DefaultSearchProviderChange(backup, actual); |
268 } | 271 } |
269 | 272 |
270 } // namespace protector | 273 } // namespace protector |
OLD | NEW |