Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(547)

Side by Side Diff: chrome/browser/translate/translate_infobar_delegate.cc

Issue 64823005: Copy the implementations of TranslateUIDelegate to TransalteInfobarDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/translate/translate_infobar_delegate.h" 5 #include "chrome/browser/translate/translate_infobar_delegate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/string_compare.h" 9 #include "base/i18n/string_compare.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/infobars/infobar_service.h" 13 #include "chrome/browser/infobars/infobar_service.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/translate/translate_accept_languages.h" 15 #include "chrome/browser/translate/translate_accept_languages.h"
16 #include "chrome/browser/translate/translate_browser_metrics.h"
16 #include "chrome/browser/translate/translate_manager.h" 17 #include "chrome/browser/translate/translate_manager.h"
17 #include "chrome/browser/translate/translate_tab_helper.h" 18 #include "chrome/browser/translate/translate_tab_helper.h"
19 #include "chrome/browser/translate/translate_ui_delegate.h"
18 #include "components/translate/common/translate_constants.h" 20 #include "components/translate/common/translate_constants.h"
19 #include "content/public/browser/navigation_details.h" 21 #include "content/public/browser/navigation_details.h"
20 #include "content/public/browser/navigation_entry.h" 22 #include "content/public/browser/navigation_entry.h"
21 #include "content/public/browser/web_contents.h" 23 #include "content/public/browser/web_contents.h"
22 #include "grit/generated_resources.h" 24 #include "grit/generated_resources.h"
23 #include "grit/theme_resources.h" 25 #include "grit/theme_resources.h"
24 #include "third_party/icu/source/i18n/unicode/coll.h" 26 #include "third_party/icu/source/i18n/unicode/coll.h"
25 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
26 28
27 using content::NavigationEntry; 29 using content::NavigationEntry;
28 30
29 namespace { 31 namespace {
32
30 const char kCloseInfobar[] = "Translate.DeclineTranslateCloseInfobar"; 33 const char kCloseInfobar[] = "Translate.DeclineTranslateCloseInfobar";
31 const char kShowErrorInfobar[] = "Translate.ShowErrorInfobar"; 34 const char kShowErrorInfobar[] = "Translate.ShowErrorInfobar";
32 35
33 } // namespace 36 } // namespace
34 37
35 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX; 38 const size_t TranslateInfoBarDelegate::kNoIndex = TranslateUIDelegate::NO_INDEX;
36 39
37 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { 40 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
38 } 41 }
39 42
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 } else { 95 } else {
93 DCHECK(replace_existing_infobar); 96 DCHECK(replace_existing_infobar);
94 infobar_service->ReplaceInfoBar(old_delegate, 97 infobar_service->ReplaceInfoBar(old_delegate,
95 infobar.PassAs<InfoBarDelegate>()); 98 infobar.PassAs<InfoBarDelegate>());
96 } 99 }
97 } 100 }
98 101
99 102
100 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( 103 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex(
101 size_t language_index) { 104 size_t language_index) {
102 ui_delegate_.UpdateOriginalLanguageIndex(language_index); 105 // Note: TranslateUIDelegate should be updated if this implementation is
106 // updated.
107 if (original_language_index_ == language_index)
108 return;
109
110 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
111 TranslateBrowserMetrics::UMA_MODIFY_ORIGINAL_LANG), true);
112 original_language_index_ = language_index;
103 } 113 }
104 114
105 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( 115 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex(
106 size_t language_index) { 116 size_t language_index) {
107 ui_delegate_.UpdateTargetLanguageIndex(language_index); 117 // Note: TranslateUIDelegate should be updated if this implementation is
118 // updated.
119 if (target_language_index_ == language_index)
120 return;
121
122 DCHECK_LT(language_index, num_languages());
123 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
124 TranslateBrowserMetrics::UMA_MODIFY_TARGET_LANG), true);
125 target_language_index_ = language_index;
108 } 126 }
109 127
110 void TranslateInfoBarDelegate::Translate() { 128 void TranslateInfoBarDelegate::Translate() {
111 ui_delegate_.Translate(); 129 // Note: TranslateUIDelegate should be updated if this implementation is
130 // updated.
131 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
132 prefs_.ResetTranslationDeniedCount(original_language_code());
133 prefs_.IncrementTranslationAcceptedCount(original_language_code());
134 }
135 TranslateManager::GetInstance()->TranslatePage(web_contents(),
136 original_language_code(),
137 target_language_code());
138
139 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
140 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true);
112 } 141 }
113 142
114 void TranslateInfoBarDelegate::RevertTranslation() { 143 void TranslateInfoBarDelegate::RevertTranslation() {
115 ui_delegate_.RevertTranslation(); 144 // Note: TranslateUIDelegate should be updated if this implementation is
145 // updated.
146 TranslateManager::GetInstance()->RevertTranslation(web_contents());
147 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
148 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
116 RemoveSelf(); 149 RemoveSelf();
117 } 150 }
118 151
119 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 152 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
120 TranslateManager::GetInstance()->ReportLanguageDetectionError( 153 TranslateManager::GetInstance()->ReportLanguageDetectionError(
121 web_contents()); 154 web_contents());
122 } 155 }
123 156
124 void TranslateInfoBarDelegate::TranslationDeclined() { 157 void TranslateInfoBarDelegate::TranslationDeclined() {
125 ui_delegate_.TranslationDeclined(); 158 // Note: TranslateUIDelegate should be updated if this implementation is
159 // updated.
160 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
161 prefs_.ResetTranslationAcceptedCount(original_language_code());
162 prefs_.IncrementTranslationDeniedCount(original_language_code());
163 }
164
165 // Remember that the user declined the translation so as to prevent showing a
166 // translate infobar for that page again. (TranslateManager initiates
167 // translations when getting a LANGUAGE_DETERMINED from the page, which
168 // happens when a load stops. That could happen multiple times, including
169 // after the user already declined the translation.)
170 TranslateTabHelper::FromWebContents(web_contents())->
171 language_state().set_translation_declined(true);
172
173 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
174 TranslateBrowserMetrics::UMA_DECLINE_TRANSLATE), true);
126 } 175 }
127 176
128 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { 177 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
129 Profile* profile = 178 Profile* profile =
130 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 179 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
131 Profile* original_profile = profile->GetOriginalProfile(); 180 Profile* original_profile = profile->GetOriginalProfile();
132 return TranslatePrefs::CanTranslateLanguage(original_profile, 181 return TranslatePrefs::CanTranslateLanguage(original_profile,
133 original_language_code()); 182 original_language_code());
134 } 183 }
135 184
136 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 185 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
137 if (ui_delegate_.IsLanguageBlocked()) { 186 // Note: TranslateUIDelegate should be updated if this implementation is
138 ui_delegate_.SetLanguageBlocked(false); 187 // updated.
188 if (prefs_.IsBlockedLanguage(original_language_code())) {
189 prefs_.UnblockLanguage(original_language_code());
139 } else { 190 } else {
140 ui_delegate_.SetLanguageBlocked(true); 191 prefs_.BlockLanguage(original_language_code());
192 TranslateTabHelper* translate_tab_helper =
193 TranslateTabHelper::FromWebContents(web_contents());
194 DCHECK(translate_tab_helper);
195 translate_tab_helper->language_state().SetTranslateEnabled(false);
141 RemoveSelf(); 196 RemoveSelf();
142 } 197 }
198
199 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
200 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
143 } 201 }
144 202
145 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { 203 bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
146 return ui_delegate_.IsSiteBlacklisted(); 204 // Note: TranslateUIDelegate should be updated if this implementation is
205 // updated.
206 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
207 return !host.empty() && prefs_.IsSiteBlacklisted(host);
147 } 208 }
148 209
149 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { 210 void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
150 if (ui_delegate_.IsSiteBlacklisted()) { 211 // Note: TranslateUIDelegate should be updated if this implementation is
151 ui_delegate_.SetSiteBlacklist(false); 212 // updated.
213 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
214 if (host.empty())
215 return;
216
217 if (prefs_.IsSiteBlacklisted(host)) {
218 prefs_.RemoveSiteFromBlacklist(host);
152 } else { 219 } else {
153 ui_delegate_.SetSiteBlacklist(true); 220 prefs_.BlacklistSite(host);
221 TranslateTabHelper* translate_tab_helper =
222 TranslateTabHelper::FromWebContents(web_contents());
223 DCHECK(translate_tab_helper);
224 translate_tab_helper->language_state().SetTranslateEnabled(false);
154 RemoveSelf(); 225 RemoveSelf();
155 } 226 }
227
228 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
229 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true);
156 } 230 }
157 231
158 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { 232 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
159 return ui_delegate_.ShouldAlwaysTranslate(); 233 // Note: TranslateUIDelegate should be updated if this implementation is
234 // updated.
235 return prefs_.IsLanguagePairWhitelisted(original_language_code(),
236 target_language_code());
160 } 237 }
161 238
162 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { 239 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
163 ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate()); 240 // Note: TranslateUIDelegate should be updated if this implementation is
241 // updated.
242 const std::string& original_lang = original_language_code();
243 const std::string& target_lang = target_language_code();
244 if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang))
245 prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang);
246 else
247 prefs_.WhitelistLanguagePair(original_lang, target_lang);
248
249 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
250 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
164 } 251 }
165 252
166 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { 253 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
167 DCHECK(!ui_delegate_.ShouldAlwaysTranslate()); 254 // Note: TranslateUIDelegate should be updated if this implementation is
168 ui_delegate_.SetAlwaysTranslate(true); 255 // updated.
256 const std::string& original_lang = original_language_code();
257 const std::string& target_lang = target_language_code();
258 DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang));
259 prefs_.WhitelistLanguagePair(original_lang, target_lang);
260 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
261 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
262
169 Translate(); 263 Translate();
170 } 264 }
171 265
172 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 266 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
173 DCHECK(!ui_delegate_.IsLanguageBlocked()); 267 // Note: TranslateUIDelegate should be updated if this implementation is
174 ui_delegate_.SetLanguageBlocked(true); 268 // updated.
269 prefs_.BlockLanguage(original_language_code());
270 TranslateTabHelper* translate_tab_helper =
271 TranslateTabHelper::FromWebContents(web_contents());
272 DCHECK(translate_tab_helper);
273 translate_tab_helper->language_state().SetTranslateEnabled(false);
274 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
275 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
276
175 RemoveSelf(); 277 RemoveSelf();
176 } 278 }
177 279
178 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 280 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
179 if (infobar_type_ == TRANSLATING) { 281 if (infobar_type_ == TRANSLATING) {
180 string16 target_language_name = language_name_at(target_language_index()); 282 string16 target_language_name = language_name_at(target_language_index());
181 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 283 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
182 target_language_name); 284 target_language_name);
183 } 285 }
184 286
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 Type infobar_type, 400 Type infobar_type,
299 TranslateInfoBarDelegate* old_delegate, 401 TranslateInfoBarDelegate* old_delegate,
300 const std::string& original_language, 402 const std::string& original_language,
301 const std::string& target_language, 403 const std::string& target_language,
302 TranslateErrors::Type error_type, 404 TranslateErrors::Type error_type,
303 PrefService* prefs, 405 PrefService* prefs,
304 ShortcutConfiguration shortcut_config) 406 ShortcutConfiguration shortcut_config)
305 : InfoBarDelegate(infobar_service), 407 : InfoBarDelegate(infobar_service),
306 infobar_type_(infobar_type), 408 infobar_type_(infobar_type),
307 background_animation_(NONE), 409 background_animation_(NONE),
308 ui_delegate_(web_contents(), original_language, target_language), 410 original_language_index_(kNoIndex),
411 target_language_index_(kNoIndex),
309 error_type_(error_type), 412 error_type_(error_type),
310 prefs_(prefs), 413 prefs_(prefs),
311 shortcut_config_(shortcut_config) { 414 shortcut_config_(shortcut_config) {
312 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), 415 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR),
313 (error_type_ == TranslateErrors::NONE)); 416 (error_type_ == TranslateErrors::NONE));
314 417
315 if (old_delegate && (old_delegate->is_error() != is_error())) 418 if (old_delegate && (old_delegate->is_error() != is_error()))
316 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 419 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
420
421 TranslateUIDelegate::GetSortedLanguageNames(
422 g_browser_process->GetApplicationLocale(), &languages_);
423
424 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
425 iter != languages_.end(); ++iter) {
426 std::string language_code = iter->first;
427 if (language_code == original_language)
428 original_language_index_ = iter - languages_.begin();
429 if (language_code == target_language)
430 target_language_index_ = iter - languages_.begin();
431 }
317 } 432 }
318 433
319 void TranslateInfoBarDelegate::InfoBarDismissed() { 434 void TranslateInfoBarDelegate::InfoBarDismissed() {
320 if (infobar_type_ != BEFORE_TRANSLATE) 435 if (infobar_type_ != BEFORE_TRANSLATE)
321 return; 436 return;
322 437
323 // The user closed the infobar without clicking the translate button. 438 // The user closed the infobar without clicking the translate button.
324 TranslationDeclined(); 439 TranslationDeclined();
325 UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true); 440 UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true);
326 } 441 }
(...skipping 13 matching lines...) Expand all
340 if (!details.is_navigation_to_different_page() && !details.is_main_frame) 455 if (!details.is_navigation_to_different_page() && !details.is_main_frame)
341 return false; 456 return false;
342 457
343 return InfoBarDelegate::ShouldExpireInternal(details); 458 return InfoBarDelegate::ShouldExpireInternal(details);
344 } 459 }
345 460
346 TranslateInfoBarDelegate* 461 TranslateInfoBarDelegate*
347 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 462 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
348 return this; 463 return this;
349 } 464 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698