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

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

Powered by Google App Engine
This is Rietveld 408576698