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 "chrome/browser/protector/base_setting_change.h" | 9 #include "chrome/browser/protector/base_setting_change.h" |
| 10 #include "chrome/browser/protector/histograms.h" |
9 #include "chrome/browser/protector/protector.h" | 11 #include "chrome/browser/protector/protector.h" |
10 #include "chrome/browser/search_engines/template_url.h" | 12 #include "chrome/browser/search_engines/template_url.h" |
11 #include "chrome/browser/search_engines/template_url_service.h" | 13 #include "chrome/browser/search_engines/template_url_service.h" |
12 #include "chrome/browser/search_engines/template_url_service_observer.h" | 14 #include "chrome/browser/search_engines/template_url_service_observer.h" |
13 #include "chrome/browser/webdata/keyword_table.h" | 15 #include "chrome/browser/webdata/keyword_table.h" |
14 #include "chrome/common/url_constants.h" | 16 #include "chrome/common/url_constants.h" |
| 17 #include "googleurl/src/gurl.h" |
15 #include "grit/chromium_strings.h" | 18 #include "grit/chromium_strings.h" |
16 #include "grit/generated_resources.h" | 19 #include "grit/generated_resources.h" |
17 #include "googleurl/src/gurl.h" | |
18 #include "ui/base/l10n/l10n_util.h" | 20 #include "ui/base/l10n/l10n_util.h" |
19 | 21 |
20 namespace protector { | 22 namespace protector { |
21 | 23 |
22 namespace { | 24 namespace { |
23 | 25 |
24 // Maximum length of the search engine name to be displayed. | 26 // Maximum length of the search engine name to be displayed. |
25 const size_t kMaxDisplayedNameLength = 10; | 27 const size_t kMaxDisplayedNameLength = 10; |
26 | 28 |
27 } // namespace | 29 } // namespace |
28 | 30 |
29 class DefaultSearchProviderChange : public BaseSettingChange, | 31 class DefaultSearchProviderChange : public BaseSettingChange, |
30 public TemplateURLServiceObserver { | 32 public TemplateURLServiceObserver { |
31 public: | 33 public: |
32 DefaultSearchProviderChange(const TemplateURL* old_url, | 34 DefaultSearchProviderChange(const TemplateURL* old_url, |
33 const TemplateURL* new_url); | 35 const TemplateURL* new_url); |
34 | 36 |
35 // BaseSettingChange overrides: | 37 // BaseSettingChange overrides: |
36 virtual bool Init(Protector* protector) OVERRIDE; | 38 virtual bool Init(Protector* protector) OVERRIDE; |
37 virtual void Apply() OVERRIDE; | 39 virtual void Apply() OVERRIDE; |
38 virtual void Discard() OVERRIDE; | 40 virtual void Discard() OVERRIDE; |
| 41 virtual void Timeout() OVERRIDE; |
39 virtual void OnBeforeRemoved() OVERRIDE; | 42 virtual void OnBeforeRemoved() OVERRIDE; |
40 virtual string16 GetBubbleTitle() const OVERRIDE; | 43 virtual string16 GetBubbleTitle() const OVERRIDE; |
41 virtual string16 GetBubbleMessage() const OVERRIDE; | 44 virtual string16 GetBubbleMessage() const OVERRIDE; |
42 virtual string16 GetApplyButtonText() const OVERRIDE; | 45 virtual string16 GetApplyButtonText() const OVERRIDE; |
43 virtual string16 GetDiscardButtonText() const OVERRIDE; | 46 virtual string16 GetDiscardButtonText() const OVERRIDE; |
44 | 47 |
45 // TemplateURLServiceObserver overrides: | 48 // TemplateURLServiceObserver overrides: |
46 virtual void OnTemplateURLServiceChanged() OVERRIDE; | 49 virtual void OnTemplateURLServiceChanged() OVERRIDE; |
47 | 50 |
48 private: | 51 private: |
(...skipping 11 matching lines...) Expand all Loading... |
60 | 63 |
61 int64 old_id_; | 64 int64 old_id_; |
62 int64 new_id_; | 65 int64 new_id_; |
63 // 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. |
64 int64 fallback_id_; | 67 int64 fallback_id_; |
65 string16 old_name_; | 68 string16 old_name_; |
66 string16 new_name_; | 69 string16 new_name_; |
67 // 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. |
68 string16 fallback_name_; | 71 string16 fallback_name_; |
69 string16 product_name_; | 72 string16 product_name_; |
| 73 // Histogram ID of the new search provider. |
| 74 int new_histogram_id_; |
70 // Default search provider set by |Init| for the period until user makes a | 75 // Default search provider set by |Init| for the period until user makes a |
71 // choice and either |Apply| or |Discard| is performed. Should only be used | 76 // choice and either |Apply| or |Discard| is performed. Should only be used |
72 // for comparison with the current default search provider and never | 77 // for comparison with the current default search provider and never |
73 // dereferenced other than in |Init| because it may be deallocated by | 78 // dereferenced other than in |Init| because it may be deallocated by |
74 // TemplateURLService at any time. | 79 // TemplateURLService at any time. |
75 const TemplateURL* default_search_provider_; | 80 const TemplateURL* default_search_provider_; |
76 | 81 |
77 DISALLOW_COPY_AND_ASSIGN(DefaultSearchProviderChange); | 82 DISALLOW_COPY_AND_ASSIGN(DefaultSearchProviderChange); |
78 }; | 83 }; |
79 | 84 |
80 DefaultSearchProviderChange::DefaultSearchProviderChange( | 85 DefaultSearchProviderChange::DefaultSearchProviderChange( |
81 const TemplateURL* old_url, | 86 const TemplateURL* old_url, |
82 const TemplateURL* new_url) | 87 const TemplateURL* new_url) |
83 : old_id_(0), | 88 : old_id_(0), |
84 new_id_(0), | 89 new_id_(0), |
85 fallback_id_(0), | 90 fallback_id_(0), |
86 product_name_(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)), | 91 product_name_(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)), |
| 92 new_histogram_id_(GetSearchProviderHistogramID(new_url)), |
87 default_search_provider_(NULL) { | 93 default_search_provider_(NULL) { |
88 if (new_url) { | 94 if (new_url) { |
89 new_id_ = new_url->id(); | 95 new_id_ = new_url->id(); |
90 new_name_ = new_url->short_name(); | 96 new_name_ = new_url->short_name(); |
91 } | 97 } |
92 if (old_url) { | 98 if (old_url) { |
93 old_id_ = old_url->id(); | 99 old_id_ = old_url->id(); |
94 old_name_ = old_url->short_name(); | 100 old_name_ = old_url->short_name(); |
95 } | 101 } |
96 } | 102 } |
97 | 103 |
98 DefaultSearchProviderChange::~DefaultSearchProviderChange() { | 104 DefaultSearchProviderChange::~DefaultSearchProviderChange() { |
99 } | 105 } |
100 | 106 |
101 bool DefaultSearchProviderChange::Init(Protector* protector) { | 107 bool DefaultSearchProviderChange::Init(Protector* protector) { |
102 BaseSettingChange::Init(protector); | 108 BaseSettingChange::Init(protector); |
103 | 109 |
| 110 UMA_HISTOGRAM_ENUMERATION( |
| 111 kProtectorHistogramNewSearchProvider, |
| 112 new_histogram_id_, |
| 113 kProtectorMaxSearchProviderID); |
| 114 |
104 // Initially reset the search engine to its previous setting. | 115 // Initially reset the search engine to its previous setting. |
105 default_search_provider_ = SetDefaultSearchProvider(old_id_, true); | 116 default_search_provider_ = SetDefaultSearchProvider(old_id_, true); |
106 if (!default_search_provider_) | 117 if (!default_search_provider_) |
107 return false; | 118 return false; |
108 | 119 |
109 if (!old_id_ || default_search_provider_->id() != old_id_) { | 120 if (!old_id_ || default_search_provider_->id() != old_id_) { |
110 // Old settings is lost or invalid, so we had to fall back to one of the | 121 // Old settings is lost or invalid, so we had to fall back to one of the |
111 // prepopulated search engines. | 122 // prepopulated search engines. |
112 fallback_id_ = default_search_provider_->id(); | 123 fallback_id_ = default_search_provider_->id(); |
113 fallback_name_ = default_search_provider_->short_name(); | 124 fallback_name_ = default_search_provider_->short_name(); |
114 VLOG(1) << "Fallback to " << fallback_name_; | 125 VLOG(1) << "Fallback to " << fallback_name_; |
115 } | 126 } |
116 | 127 |
117 protector->GetTemplateURLService()->AddObserver(this); | 128 protector->GetTemplateURLService()->AddObserver(this); |
118 | 129 |
119 return true; | 130 return true; |
120 } | 131 } |
121 | 132 |
122 void DefaultSearchProviderChange::Apply() { | 133 void DefaultSearchProviderChange::Apply() { |
123 // TODO(avayvod): Add histrogram. | 134 UMA_HISTOGRAM_ENUMERATION( |
| 135 kProtectorHistogramSearchProviderApplied, |
| 136 new_histogram_id_, |
| 137 kProtectorMaxSearchProviderID); |
| 138 |
124 if (!new_id_) { | 139 if (!new_id_) { |
125 // Open settings page in case the new setting is invalid. | 140 // Open settings page in case the new setting is invalid. |
126 OpenSearchEngineSettings(); | 141 OpenSearchEngineSettings(); |
127 } else { | 142 } else { |
128 SetDefaultSearchProvider(new_id_, false); | 143 SetDefaultSearchProvider(new_id_, false); |
129 } | 144 } |
130 } | 145 } |
131 | 146 |
132 void DefaultSearchProviderChange::Discard() { | 147 void DefaultSearchProviderChange::Discard() { |
133 // TODO(avayvod): Add histrogram. | 148 UMA_HISTOGRAM_ENUMERATION( |
| 149 kProtectorHistogramSearchProviderDiscarded, |
| 150 new_histogram_id_, |
| 151 kProtectorMaxSearchProviderID); |
| 152 |
134 if (!old_id_) { | 153 if (!old_id_) { |
135 // Open settings page in case the old setting is invalid. | 154 // Open settings page in case the old setting is invalid. |
136 OpenSearchEngineSettings(); | 155 OpenSearchEngineSettings(); |
137 } | 156 } |
138 // Nothing to do otherwise since we have already set the search engine | 157 // Nothing to do otherwise since we have already set the search engine |
139 // to |old_id_| in |Init|. | 158 // to |old_id_| in |Init|. |
140 } | 159 } |
141 | 160 |
| 161 void DefaultSearchProviderChange::Timeout() { |
| 162 UMA_HISTOGRAM_ENUMERATION( |
| 163 kProtectorHistogramSearchProviderTimeout, |
| 164 new_histogram_id_, |
| 165 kProtectorMaxSearchProviderID); |
| 166 } |
| 167 |
142 void DefaultSearchProviderChange::OnBeforeRemoved() { | 168 void DefaultSearchProviderChange::OnBeforeRemoved() { |
143 protector()->GetTemplateURLService()->RemoveObserver(this); | 169 protector()->GetTemplateURLService()->RemoveObserver(this); |
144 } | 170 } |
145 | 171 |
146 string16 DefaultSearchProviderChange::GetBubbleTitle() const { | 172 string16 DefaultSearchProviderChange::GetBubbleTitle() const { |
147 return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_TITLE); | 173 return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_TITLE); |
148 } | 174 } |
149 | 175 |
150 string16 DefaultSearchProviderChange::GetBubbleMessage() const { | 176 string16 DefaultSearchProviderChange::GetBubbleMessage() const { |
151 if (fallback_name_.empty()) | 177 if (fallback_name_.empty()) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 chrome::kSearchEnginesSubPage)); | 261 chrome::kSearchEnginesSubPage)); |
236 } | 262 } |
237 | 263 |
238 BaseSettingChange* CreateDefaultSearchProviderChange( | 264 BaseSettingChange* CreateDefaultSearchProviderChange( |
239 const TemplateURL* actual, | 265 const TemplateURL* actual, |
240 const TemplateURL* backup) { | 266 const TemplateURL* backup) { |
241 return new DefaultSearchProviderChange(backup, actual); | 267 return new DefaultSearchProviderChange(backup, actual); |
242 } | 268 } |
243 | 269 |
244 } // namespace protector | 270 } // namespace protector |
OLD | NEW |