OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/translate/core/browser/translate_ui_delegate.h" | 5 #include "components/translate/core/browser/translate_ui_delegate.h" |
6 | 6 |
7 #include "base/i18n/string_compare.h" | 7 #include "base/i18n/string_compare.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "components/translate/core/browser/language_state.h" | 9 #include "components/translate/core/browser/language_state.h" |
10 #include "components/translate/core/browser/translate_client.h" | 10 #include "components/translate/core/browser/translate_client.h" |
(...skipping 13 matching lines...) Expand all Loading... | |
24 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang"; | 24 const char kNeverTranslateLang[] = "Translate.NeverTranslateLang"; |
25 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite"; | 25 const char kNeverTranslateSite[] = "Translate.NeverTranslateSite"; |
26 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang"; | 26 const char kAlwaysTranslateLang[] = "Translate.AlwaysTranslateLang"; |
27 const char kModifyOriginalLang[] = "Translate.ModifyOriginalLang"; | 27 const char kModifyOriginalLang[] = "Translate.ModifyOriginalLang"; |
28 const char kModifyTargetLang[] = "Translate.ModifyTargetLang"; | 28 const char kModifyTargetLang[] = "Translate.ModifyTargetLang"; |
29 const char kDeclineTranslateDismissUI[] = "Translate.DeclineTranslateDismissUI"; | 29 const char kDeclineTranslateDismissUI[] = "Translate.DeclineTranslateDismissUI"; |
30 const char kShowErrorUI[] = "Translate.ShowErrorUI"; | 30 const char kShowErrorUI[] = "Translate.ShowErrorUI"; |
31 | 31 |
32 } // namespace | 32 } // namespace |
33 | 33 |
34 TranslateUIDelegate::TranslateUIDelegate(TranslateClient* translate_client, | 34 TranslateUIDelegate::TranslateUIDelegate( |
35 TranslateManager* translate_manager, | 35 TranslateClient* translate_client, |
36 const std::string& original_language, | 36 const base::WeakPtr<TranslateManager>& translate_manager, |
37 const std::string& target_language) | 37 const std::string& original_language, |
38 const std::string& target_language) | |
38 : translate_client_(translate_client), | 39 : translate_client_(translate_client), |
39 translate_driver_(translate_client->GetTranslateDriver()), | 40 translate_driver_(translate_client->GetTranslateDriver()), |
40 translate_manager_(translate_manager), | 41 translate_manager_(translate_manager), |
41 original_language_index_(NO_INDEX), | 42 original_language_index_(NO_INDEX), |
42 initial_original_language_index_(NO_INDEX), | 43 initial_original_language_index_(NO_INDEX), |
43 target_language_index_(NO_INDEX) { | 44 target_language_index_(NO_INDEX) { |
44 DCHECK(translate_client_); | 45 DCHECK(translate_client_); |
45 DCHECK(translate_driver_); | 46 DCHECK(translate_driver_); |
46 DCHECK(translate_manager_); | 47 DCHECK(translate_manager_); |
47 | 48 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); | 97 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); |
97 | 98 |
98 if (error_type == TranslateErrors::NONE) | 99 if (error_type == TranslateErrors::NONE) |
99 return; | 100 return; |
100 | 101 |
101 UMA_HISTOGRAM_ENUMERATION( | 102 UMA_HISTOGRAM_ENUMERATION( |
102 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX); | 103 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX); |
103 } | 104 } |
104 | 105 |
105 const LanguageState& TranslateUIDelegate::GetLanguageState() { | 106 const LanguageState& TranslateUIDelegate::GetLanguageState() { |
106 return translate_driver_->GetLanguageState(); | 107 return translate_manager_->GetLanguageState(); |
107 } | 108 } |
108 | 109 |
109 size_t TranslateUIDelegate::GetNumberOfLanguages() const { | 110 size_t TranslateUIDelegate::GetNumberOfLanguages() const { |
110 return languages_.size(); | 111 return languages_.size(); |
111 } | 112 } |
112 | 113 |
113 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { | 114 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { |
114 return original_language_index_; | 115 return original_language_index_; |
115 } | 116 } |
116 | 117 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 | 156 |
156 std::string TranslateUIDelegate::GetTargetLanguageCode() const { | 157 std::string TranslateUIDelegate::GetTargetLanguageCode() const { |
157 return GetLanguageCodeAt(GetTargetLanguageIndex()); | 158 return GetLanguageCodeAt(GetTargetLanguageIndex()); |
158 } | 159 } |
159 | 160 |
160 void TranslateUIDelegate::Translate() { | 161 void TranslateUIDelegate::Translate() { |
161 if (!translate_driver_->IsOffTheRecord()) { | 162 if (!translate_driver_->IsOffTheRecord()) { |
162 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); | 163 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); |
163 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); | 164 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); |
164 } | 165 } |
165 translate_manager_->TranslatePage( | 166 |
166 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); | 167 if (translate_manager_) { |
droger
2014/06/05 08:36:35
Note:
if translate_manager_ is NULL here, we will
nshaik
2014/06/05 18:45:30
Done.
| |
168 translate_manager_->TranslatePage( | |
169 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); | |
170 } | |
167 | 171 |
168 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); | 172 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); |
169 } | 173 } |
170 | 174 |
171 void TranslateUIDelegate::RevertTranslation() { | 175 void TranslateUIDelegate::RevertTranslation() { |
172 translate_manager_->RevertTranslation(); | 176 if (translate_manager_) { |
177 translate_manager_->RevertTranslation(); | |
178 } | |
173 | 179 |
174 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); | 180 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); |
175 } | 181 } |
176 | 182 |
177 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { | 183 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { |
178 if (!translate_driver_->IsOffTheRecord()) { | 184 if (!translate_driver_->IsOffTheRecord()) { |
179 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); | 185 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); |
180 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); | 186 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); |
181 } | 187 } |
182 | 188 |
183 // Remember that the user declined the translation so as to prevent showing a | 189 // Remember that the user declined the translation so as to prevent showing a |
184 // translate infobar for that page again. (TranslateManager initiates | 190 // translate infobar for that page again. (TranslateManager initiates |
185 // translations when getting a LANGUAGE_DETERMINED from the page, which | 191 // translations when getting a LANGUAGE_DETERMINED from the page, which |
186 // happens when a load stops. That could happen multiple times, including | 192 // happens when a load stops. That could happen multiple times, including |
187 // after the user already declined the translation.) | 193 // after the user already declined the translation.) |
188 translate_driver_->GetLanguageState().set_translation_declined(true); | 194 if (translate_manager_) { |
195 translate_manager_->GetLanguageState().set_translation_declined(true); | |
196 } | |
189 | 197 |
190 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); | 198 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); |
191 | 199 |
192 if (!explicitly_closed) | 200 if (!explicitly_closed) |
193 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); | 201 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); |
194 } | 202 } |
195 | 203 |
196 bool TranslateUIDelegate::IsLanguageBlocked() { | 204 bool TranslateUIDelegate::IsLanguageBlocked() { |
197 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); | 205 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); |
198 } | 206 } |
199 | 207 |
200 void TranslateUIDelegate::SetLanguageBlocked(bool value) { | 208 void TranslateUIDelegate::SetLanguageBlocked(bool value) { |
201 if (value) { | 209 if (value) { |
202 prefs_->BlockLanguage(GetOriginalLanguageCode()); | 210 prefs_->BlockLanguage(GetOriginalLanguageCode()); |
203 translate_driver_->GetLanguageState().SetTranslateEnabled(false); | 211 if (translate_manager_) { |
212 translate_manager_->GetLanguageState().SetTranslateEnabled(false); | |
213 } | |
204 } else { | 214 } else { |
205 prefs_->UnblockLanguage(GetOriginalLanguageCode()); | 215 prefs_->UnblockLanguage(GetOriginalLanguageCode()); |
206 } | 216 } |
207 | 217 |
208 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); | 218 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); |
209 } | 219 } |
210 | 220 |
211 bool TranslateUIDelegate::IsSiteBlacklisted() { | 221 bool TranslateUIDelegate::IsSiteBlacklisted() { |
212 std::string host = GetPageHost(); | 222 std::string host = GetPageHost(); |
213 return !host.empty() && prefs_->IsSiteBlacklisted(host); | 223 return !host.empty() && prefs_->IsSiteBlacklisted(host); |
214 } | 224 } |
215 | 225 |
216 void TranslateUIDelegate::SetSiteBlacklist(bool value) { | 226 void TranslateUIDelegate::SetSiteBlacklist(bool value) { |
217 std::string host = GetPageHost(); | 227 std::string host = GetPageHost(); |
218 if (host.empty()) | 228 if (host.empty()) |
219 return; | 229 return; |
220 | 230 |
221 if (value) { | 231 if (value) { |
222 prefs_->BlacklistSite(host); | 232 prefs_->BlacklistSite(host); |
223 translate_driver_->GetLanguageState().SetTranslateEnabled(false); | 233 if (translate_manager_) { |
234 translate_manager_->GetLanguageState().SetTranslateEnabled(false); | |
235 } | |
224 } else { | 236 } else { |
225 prefs_->RemoveSiteFromBlacklist(host); | 237 prefs_->RemoveSiteFromBlacklist(host); |
226 } | 238 } |
227 | 239 |
228 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); | 240 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); |
229 } | 241 } |
230 | 242 |
231 bool TranslateUIDelegate::ShouldAlwaysTranslate() { | 243 bool TranslateUIDelegate::ShouldAlwaysTranslate() { |
232 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), | 244 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), |
233 GetTargetLanguageCode()); | 245 GetTargetLanguageCode()); |
234 } | 246 } |
235 | 247 |
236 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { | 248 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { |
237 const std::string& original_lang = GetOriginalLanguageCode(); | 249 const std::string& original_lang = GetOriginalLanguageCode(); |
238 const std::string& target_lang = GetTargetLanguageCode(); | 250 const std::string& target_lang = GetTargetLanguageCode(); |
239 if (value) | 251 if (value) |
240 prefs_->WhitelistLanguagePair(original_lang, target_lang); | 252 prefs_->WhitelistLanguagePair(original_lang, target_lang); |
241 else | 253 else |
242 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); | 254 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); |
243 | 255 |
244 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); | 256 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); |
245 } | 257 } |
246 | 258 |
247 std::string TranslateUIDelegate::GetPageHost() { | 259 std::string TranslateUIDelegate::GetPageHost() { |
248 if (!translate_driver_->HasCurrentPage()) | 260 if (!translate_driver_->HasCurrentPage()) |
249 return std::string(); | 261 return std::string(); |
250 return translate_driver_->GetActiveURL().HostNoBrackets(); | 262 return translate_driver_->GetActiveURL().HostNoBrackets(); |
251 } | 263 } |
OLD | NEW |