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 const base::WeakPtr<TranslateManager>& translate_manager, |
36 const std::string& original_language, | 36 const std::string& original_language, |
37 const std::string& target_language) | 37 const std::string& target_language) |
38 : translate_client_(translate_client), | 38 : translate_driver_( |
39 translate_driver_(translate_client->GetTranslateDriver()), | 39 translate_manager->translate_client()->GetTranslateDriver()), |
40 translate_manager_(translate_manager), | 40 translate_manager_(translate_manager), |
41 original_language_index_(NO_INDEX), | 41 original_language_index_(NO_INDEX), |
42 initial_original_language_index_(NO_INDEX), | 42 initial_original_language_index_(NO_INDEX), |
43 target_language_index_(NO_INDEX) { | 43 target_language_index_(NO_INDEX) { |
44 DCHECK(translate_client_); | |
45 DCHECK(translate_driver_); | 44 DCHECK(translate_driver_); |
46 DCHECK(translate_manager_); | 45 DCHECK(translate_manager_); |
47 | 46 |
48 std::vector<std::string> language_codes; | 47 std::vector<std::string> language_codes; |
49 TranslateDownloadManager::GetSupportedLanguages(&language_codes); | 48 TranslateDownloadManager::GetSupportedLanguages(&language_codes); |
50 | 49 |
51 // Preparing for the alphabetical order in the locale. | 50 // Preparing for the alphabetical order in the locale. |
52 UErrorCode error = U_ZERO_ERROR; | 51 UErrorCode error = U_ZERO_ERROR; |
53 std::string locale = | 52 std::string locale = |
54 TranslateDownloadManager::GetInstance()->application_locale(); | 53 TranslateDownloadManager::GetInstance()->application_locale(); |
(...skipping 24 matching lines...) Expand all Loading... |
79 ++iter) { | 78 ++iter) { |
80 std::string language_code = iter->first; | 79 std::string language_code = iter->first; |
81 if (language_code == original_language) { | 80 if (language_code == original_language) { |
82 original_language_index_ = iter - languages_.begin(); | 81 original_language_index_ = iter - languages_.begin(); |
83 initial_original_language_index_ = original_language_index_; | 82 initial_original_language_index_ = original_language_index_; |
84 } | 83 } |
85 if (language_code == target_language) | 84 if (language_code == target_language) |
86 target_language_index_ = iter - languages_.begin(); | 85 target_language_index_ = iter - languages_.begin(); |
87 } | 86 } |
88 | 87 |
89 prefs_ = translate_client_->GetTranslatePrefs(); | 88 prefs_ = translate_manager_->translate_client()->GetTranslatePrefs(); |
90 } | 89 } |
91 | 90 |
92 TranslateUIDelegate::~TranslateUIDelegate() {} | 91 TranslateUIDelegate::~TranslateUIDelegate() {} |
93 | 92 |
94 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) { | 93 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) { |
95 DCHECK_LE(TranslateErrors::NONE, error_type); | 94 DCHECK_LE(TranslateErrors::NONE, error_type); |
96 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); | 95 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); |
97 | 96 |
98 if (error_type == TranslateErrors::NONE) | 97 if (error_type == TranslateErrors::NONE) |
99 return; | 98 return; |
100 | 99 |
101 UMA_HISTOGRAM_ENUMERATION( | 100 UMA_HISTOGRAM_ENUMERATION( |
102 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX); | 101 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX); |
103 } | 102 } |
104 | 103 |
105 const LanguageState& TranslateUIDelegate::GetLanguageState() { | 104 const LanguageState& TranslateUIDelegate::GetLanguageState() { |
106 return translate_driver_->GetLanguageState(); | 105 return translate_manager_->GetLanguageState(); |
107 } | 106 } |
108 | 107 |
109 size_t TranslateUIDelegate::GetNumberOfLanguages() const { | 108 size_t TranslateUIDelegate::GetNumberOfLanguages() const { |
110 return languages_.size(); | 109 return languages_.size(); |
111 } | 110 } |
112 | 111 |
113 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { | 112 size_t TranslateUIDelegate::GetOriginalLanguageIndex() const { |
114 return original_language_index_; | 113 return original_language_index_; |
115 } | 114 } |
116 | 115 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 | 154 |
156 std::string TranslateUIDelegate::GetTargetLanguageCode() const { | 155 std::string TranslateUIDelegate::GetTargetLanguageCode() const { |
157 return GetLanguageCodeAt(GetTargetLanguageIndex()); | 156 return GetLanguageCodeAt(GetTargetLanguageIndex()); |
158 } | 157 } |
159 | 158 |
160 void TranslateUIDelegate::Translate() { | 159 void TranslateUIDelegate::Translate() { |
161 if (!translate_driver_->IsOffTheRecord()) { | 160 if (!translate_driver_->IsOffTheRecord()) { |
162 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); | 161 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); |
163 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); | 162 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); |
164 } | 163 } |
165 translate_manager_->TranslatePage( | |
166 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); | |
167 | 164 |
168 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); | 165 if (translate_manager_) { |
| 166 translate_manager_->TranslatePage( |
| 167 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); |
| 168 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); |
| 169 } |
169 } | 170 } |
170 | 171 |
171 void TranslateUIDelegate::RevertTranslation() { | 172 void TranslateUIDelegate::RevertTranslation() { |
172 translate_manager_->RevertTranslation(); | 173 if (translate_manager_) { |
173 | 174 translate_manager_->RevertTranslation(); |
174 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); | 175 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); |
| 176 } |
175 } | 177 } |
176 | 178 |
177 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { | 179 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { |
178 if (!translate_driver_->IsOffTheRecord()) { | 180 if (!translate_driver_->IsOffTheRecord()) { |
179 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); | 181 prefs_->ResetTranslationAcceptedCount(GetOriginalLanguageCode()); |
180 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); | 182 prefs_->IncrementTranslationDeniedCount(GetOriginalLanguageCode()); |
181 } | 183 } |
182 | 184 |
183 // Remember that the user declined the translation so as to prevent showing a | 185 // Remember that the user declined the translation so as to prevent showing a |
184 // translate infobar for that page again. (TranslateManager initiates | 186 // translate infobar for that page again. (TranslateManager initiates |
185 // translations when getting a LANGUAGE_DETERMINED from the page, which | 187 // translations when getting a LANGUAGE_DETERMINED from the page, which |
186 // happens when a load stops. That could happen multiple times, including | 188 // happens when a load stops. That could happen multiple times, including |
187 // after the user already declined the translation.) | 189 // after the user already declined the translation.) |
188 translate_driver_->GetLanguageState().set_translation_declined(true); | 190 if (translate_manager_) { |
189 | 191 translate_manager_->GetLanguageState().set_translation_declined(true); |
190 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); | 192 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); |
| 193 } |
191 | 194 |
192 if (!explicitly_closed) | 195 if (!explicitly_closed) |
193 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); | 196 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); |
194 } | 197 } |
195 | 198 |
196 bool TranslateUIDelegate::IsLanguageBlocked() { | 199 bool TranslateUIDelegate::IsLanguageBlocked() { |
197 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); | 200 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); |
198 } | 201 } |
199 | 202 |
200 void TranslateUIDelegate::SetLanguageBlocked(bool value) { | 203 void TranslateUIDelegate::SetLanguageBlocked(bool value) { |
201 if (value) { | 204 if (value) { |
202 prefs_->BlockLanguage(GetOriginalLanguageCode()); | 205 prefs_->BlockLanguage(GetOriginalLanguageCode()); |
203 translate_driver_->GetLanguageState().SetTranslateEnabled(false); | 206 if (translate_manager_) { |
| 207 translate_manager_->GetLanguageState().SetTranslateEnabled(false); |
| 208 } |
204 } else { | 209 } else { |
205 prefs_->UnblockLanguage(GetOriginalLanguageCode()); | 210 prefs_->UnblockLanguage(GetOriginalLanguageCode()); |
206 } | 211 } |
207 | 212 |
208 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); | 213 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); |
209 } | 214 } |
210 | 215 |
211 bool TranslateUIDelegate::IsSiteBlacklisted() { | 216 bool TranslateUIDelegate::IsSiteBlacklisted() { |
212 std::string host = GetPageHost(); | 217 std::string host = GetPageHost(); |
213 return !host.empty() && prefs_->IsSiteBlacklisted(host); | 218 return !host.empty() && prefs_->IsSiteBlacklisted(host); |
214 } | 219 } |
215 | 220 |
216 void TranslateUIDelegate::SetSiteBlacklist(bool value) { | 221 void TranslateUIDelegate::SetSiteBlacklist(bool value) { |
217 std::string host = GetPageHost(); | 222 std::string host = GetPageHost(); |
218 if (host.empty()) | 223 if (host.empty()) |
219 return; | 224 return; |
220 | 225 |
221 if (value) { | 226 if (value) { |
222 prefs_->BlacklistSite(host); | 227 prefs_->BlacklistSite(host); |
223 translate_driver_->GetLanguageState().SetTranslateEnabled(false); | 228 if (translate_manager_) { |
| 229 translate_manager_->GetLanguageState().SetTranslateEnabled(false); |
| 230 } |
224 } else { | 231 } else { |
225 prefs_->RemoveSiteFromBlacklist(host); | 232 prefs_->RemoveSiteFromBlacklist(host); |
226 } | 233 } |
227 | 234 |
228 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); | 235 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); |
229 } | 236 } |
230 | 237 |
231 bool TranslateUIDelegate::ShouldAlwaysTranslate() { | 238 bool TranslateUIDelegate::ShouldAlwaysTranslate() { |
232 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), | 239 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), |
233 GetTargetLanguageCode()); | 240 GetTargetLanguageCode()); |
234 } | 241 } |
235 | 242 |
236 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { | 243 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { |
237 const std::string& original_lang = GetOriginalLanguageCode(); | 244 const std::string& original_lang = GetOriginalLanguageCode(); |
238 const std::string& target_lang = GetTargetLanguageCode(); | 245 const std::string& target_lang = GetTargetLanguageCode(); |
239 if (value) | 246 if (value) |
240 prefs_->WhitelistLanguagePair(original_lang, target_lang); | 247 prefs_->WhitelistLanguagePair(original_lang, target_lang); |
241 else | 248 else |
242 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); | 249 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); |
243 | 250 |
244 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); | 251 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); |
245 } | 252 } |
246 | 253 |
247 std::string TranslateUIDelegate::GetPageHost() { | 254 std::string TranslateUIDelegate::GetPageHost() { |
248 if (!translate_driver_->HasCurrentPage()) | 255 if (!translate_driver_->HasCurrentPage()) |
249 return std::string(); | 256 return std::string(); |
250 return translate_driver_->GetActiveURL().HostNoBrackets(); | 257 return translate_driver_->GetActiveURL().HostNoBrackets(); |
251 } | 258 } |
OLD | NEW |