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

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: (rebasing) 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 if (original_language_index_ == language_index)
106 return;
107
108 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
109 TranslateBrowserMetrics::UMA_MODIFY_ORIGINAL_LANG), true);
110 original_language_index_ = language_index;
103 } 111 }
104 112
105 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex( 113 void TranslateInfoBarDelegate::UpdateTargetLanguageIndex(
106 size_t language_index) { 114 size_t language_index) {
107 ui_delegate_.UpdateTargetLanguageIndex(language_index); 115 if (target_language_index_ == language_index)
116 return;
117
118 DCHECK_LT(language_index, num_languages());
119 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
120 TranslateBrowserMetrics::UMA_MODIFY_TARGET_LANG), true);
121 target_language_index_ = language_index;
108 } 122 }
109 123
110 void TranslateInfoBarDelegate::Translate() { 124 void TranslateInfoBarDelegate::Translate() {
111 ui_delegate_.Translate(); 125 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
126 prefs_.ResetTranslationDeniedCount(original_language_code());
127 prefs_.IncrementTranslationAcceptedCount(original_language_code());
128 }
129 TranslateManager::GetInstance()->TranslatePage(web_contents(),
130 original_language_code(),
131 target_language_code());
132
133 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
134 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true);
112 } 135 }
113 136
114 void TranslateInfoBarDelegate::RevertTranslation() { 137 void TranslateInfoBarDelegate::RevertTranslation() {
115 ui_delegate_.RevertTranslation(); 138 TranslateManager::GetInstance()->RevertTranslation(web_contents());
139 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
140 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
116 RemoveSelf(); 141 RemoveSelf();
117 } 142 }
118 143
119 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 144 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
120 TranslateManager::GetInstance()->ReportLanguageDetectionError( 145 TranslateManager::GetInstance()->ReportLanguageDetectionError(
121 web_contents()); 146 web_contents());
122 } 147 }
123 148
124 void TranslateInfoBarDelegate::TranslationDeclined() { 149 void TranslateInfoBarDelegate::TranslationDeclined() {
125 ui_delegate_.TranslationDeclined(); 150 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
151 prefs_.ResetTranslationAcceptedCount(original_language_code());
152 prefs_.IncrementTranslationDeniedCount(original_language_code());
153 }
154
155 // Remember that the user declined the translation so as to prevent showing a
156 // translate infobar for that page again. (TranslateManager initiates
157 // translations when getting a LANGUAGE_DETERMINED from the page, which
158 // happens when a load stops. That could happen multiple times, including
159 // after the user already declined the translation.)
160 TranslateTabHelper::FromWebContents(web_contents())->
161 language_state().set_translation_declined(true);
162
163 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
164 TranslateBrowserMetrics::UMA_DECLINE_TRANSLATE), true);
126 } 165 }
127 166
128 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { 167 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
129 Profile* profile = 168 Profile* profile =
130 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 169 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
131 Profile* original_profile = profile->GetOriginalProfile(); 170 Profile* original_profile = profile->GetOriginalProfile();
132 return TranslatePrefs::CanTranslateLanguage(original_profile, 171 return TranslatePrefs::CanTranslateLanguage(original_profile,
133 original_language_code()); 172 original_language_code());
134 } 173 }
135 174
136 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 175 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
137 if (ui_delegate_.IsLanguageBlocked()) { 176 if (prefs_.IsBlockedLanguage(original_language_code())) {
138 ui_delegate_.SetLanguageBlocked(false); 177 prefs_.UnblockLanguage(original_language_code());
139 } else { 178 } else {
140 ui_delegate_.SetLanguageBlocked(true); 179 prefs_.BlockLanguage(original_language_code());
180 TranslateTabHelper* translate_tab_helper =
181 TranslateTabHelper::FromWebContents(web_contents());
182 DCHECK(translate_tab_helper);
183 translate_tab_helper->language_state().SetTranslateEnabled(false);
141 RemoveSelf(); 184 RemoveSelf();
142 } 185 }
186
187 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
188 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
143 } 189 }
144 190
145 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { 191 bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
146 return ui_delegate_.IsSiteBlacklisted(); 192 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
193 return !host.empty() && prefs_.IsSiteBlacklisted(host);
147 } 194 }
148 195
149 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { 196 void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
150 if (ui_delegate_.IsSiteBlacklisted()) { 197 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
151 ui_delegate_.SetSiteBlacklist(false); 198 if (host.empty())
199 return;
200
201 if (prefs_.IsSiteBlacklisted(host)) {
202 prefs_.RemoveSiteFromBlacklist(host);
152 } else { 203 } else {
153 ui_delegate_.SetSiteBlacklist(true); 204 prefs_.BlacklistSite(host);
205 TranslateTabHelper* translate_tab_helper =
206 TranslateTabHelper::FromWebContents(web_contents());
207 DCHECK(translate_tab_helper);
208 translate_tab_helper->language_state().SetTranslateEnabled(false);
154 RemoveSelf(); 209 RemoveSelf();
155 } 210 }
211
212 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
213 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true);
156 } 214 }
157 215
158 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { 216 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
159 return ui_delegate_.ShouldAlwaysTranslate(); 217 return prefs_.IsLanguagePairWhitelisted(original_language_code(),
218 target_language_code());
160 } 219 }
161 220
162 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() { 221 void TranslateInfoBarDelegate::ToggleAlwaysTranslate() {
163 ui_delegate_.SetAlwaysTranslate(!ui_delegate_.ShouldAlwaysTranslate()); 222 const std::string& original_lang = original_language_code();
223 const std::string& target_lang = target_language_code();
224 if (prefs_.IsLanguagePairWhitelisted(original_lang, target_lang))
225 prefs_.RemoveLanguagePairFromWhitelist(original_lang, target_lang);
226 else
227 prefs_.WhitelistLanguagePair(original_lang, target_lang);
228
229 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
230 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
164 } 231 }
165 232
166 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() { 233 void TranslateInfoBarDelegate::AlwaysTranslatePageLanguage() {
167 DCHECK(!ui_delegate_.ShouldAlwaysTranslate()); 234 const std::string& original_lang = original_language_code();
168 ui_delegate_.SetAlwaysTranslate(true); 235 const std::string& target_lang = target_language_code();
236 DCHECK(!prefs_.IsLanguagePairWhitelisted(original_lang, target_lang));
237 prefs_.WhitelistLanguagePair(original_lang, target_lang);
238 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
239 TranslateBrowserMetrics::UMA_ALWAYS_TRANSLATE_LANG), true);
240
169 Translate(); 241 Translate();
170 } 242 }
171 243
172 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 244 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
173 DCHECK(!ui_delegate_.IsLanguageBlocked()); 245 prefs_.BlockLanguage(original_language_code());
174 ui_delegate_.SetLanguageBlocked(true); 246 TranslateTabHelper* translate_tab_helper =
247 TranslateTabHelper::FromWebContents(web_contents());
248 DCHECK(translate_tab_helper);
249 translate_tab_helper->language_state().SetTranslateEnabled(false);
250 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
251 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
252
175 RemoveSelf(); 253 RemoveSelf();
176 } 254 }
177 255
178 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 256 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
179 if (infobar_type_ == TRANSLATING) { 257 if (infobar_type_ == TRANSLATING) {
180 string16 target_language_name = language_name_at(target_language_index()); 258 string16 target_language_name = language_name_at(target_language_index());
181 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 259 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
182 target_language_name); 260 target_language_name);
183 } 261 }
184 262
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 Type infobar_type, 376 Type infobar_type,
299 TranslateInfoBarDelegate* old_delegate, 377 TranslateInfoBarDelegate* old_delegate,
300 const std::string& original_language, 378 const std::string& original_language,
301 const std::string& target_language, 379 const std::string& target_language,
302 TranslateErrors::Type error_type, 380 TranslateErrors::Type error_type,
303 PrefService* prefs, 381 PrefService* prefs,
304 ShortcutConfiguration shortcut_config) 382 ShortcutConfiguration shortcut_config)
305 : InfoBarDelegate(infobar_service), 383 : InfoBarDelegate(infobar_service),
306 infobar_type_(infobar_type), 384 infobar_type_(infobar_type),
307 background_animation_(NONE), 385 background_animation_(NONE),
308 ui_delegate_(web_contents(), original_language, target_language), 386 original_language_index_(kNoIndex),
387 target_language_index_(kNoIndex),
309 error_type_(error_type), 388 error_type_(error_type),
310 prefs_(prefs), 389 prefs_(prefs),
311 shortcut_config_(shortcut_config) { 390 shortcut_config_(shortcut_config) {
312 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), 391 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR),
313 (error_type_ == TranslateErrors::NONE)); 392 (error_type_ == TranslateErrors::NONE));
314 393
315 if (old_delegate && (old_delegate->is_error() != is_error())) 394 if (old_delegate && (old_delegate->is_error() != is_error()))
316 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 395 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
396
397 languages_ = TranslateUIDelegate::GetSortedLanguageNames(
398 g_browser_process->GetApplicationLocale());
399
400 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
401 iter != languages_.end(); ++iter) {
402 std::string language_code = iter->first;
403 if (language_code == original_language)
404 original_language_index_ = iter - languages_.begin();
405 if (language_code == target_language)
406 target_language_index_ = iter - languages_.begin();
407 }
317 } 408 }
318 409
319 void TranslateInfoBarDelegate::InfoBarDismissed() { 410 void TranslateInfoBarDelegate::InfoBarDismissed() {
320 if (infobar_type_ != BEFORE_TRANSLATE) 411 if (infobar_type_ != BEFORE_TRANSLATE)
321 return; 412 return;
322 413
323 // The user closed the infobar without clicking the translate button. 414 // The user closed the infobar without clicking the translate button.
324 TranslationDeclined(); 415 TranslationDeclined();
325 UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true); 416 UMA_HISTOGRAM_BOOLEAN(kCloseInfobar, true);
326 } 417 }
(...skipping 13 matching lines...) Expand all
340 if (!details.is_navigation_to_different_page() && !details.is_main_frame) 431 if (!details.is_navigation_to_different_page() && !details.is_main_frame)
341 return false; 432 return false;
342 433
343 return InfoBarDelegate::ShouldExpireInternal(details); 434 return InfoBarDelegate::ShouldExpireInternal(details);
344 } 435 }
345 436
346 TranslateInfoBarDelegate* 437 TranslateInfoBarDelegate*
347 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 438 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
348 return this; 439 return this;
349 } 440 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698