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

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

Issue 22694006: Infobar system refactor. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years 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 | Annotate | Revision Log
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.h"
13 #include "chrome/browser/infobars/infobar_service.h" 14 #include "chrome/browser/infobars/infobar_service.h"
14 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/translate/translate_accept_languages.h" 16 #include "chrome/browser/translate/translate_accept_languages.h"
16 #include "chrome/browser/translate/translate_browser_metrics.h" 17 #include "chrome/browser/translate/translate_browser_metrics.h"
17 #include "chrome/browser/translate/translate_manager.h" 18 #include "chrome/browser/translate/translate_manager.h"
18 #include "chrome/browser/translate/translate_tab_helper.h" 19 #include "chrome/browser/translate/translate_tab_helper.h"
19 #include "chrome/browser/translate/translate_ui_delegate.h" 20 #include "chrome/browser/translate/translate_ui_delegate.h"
20 #include "components/translate/common/translate_constants.h" 21 #include "components/translate/common/translate_constants.h"
21 #include "content/public/browser/navigation_details.h" 22 #include "content/public/browser/navigation_details.h"
22 #include "content/public/browser/navigation_entry.h" 23 #include "content/public/browser/navigation_entry.h"
(...skipping 28 matching lines...) Expand all
51 // context menu. 52 // context menu.
52 DCHECK(infobar_type == TRANSLATING || infobar_type == AFTER_TRANSLATE); 53 DCHECK(infobar_type == TRANSLATING || infobar_type == AFTER_TRANSLATE);
53 DCHECK_EQ(translate::kUnknownLanguageCode, original_language); 54 DCHECK_EQ(translate::kUnknownLanguageCode, original_language);
54 } 55 }
55 } 56 }
56 57
57 // Do not create the after translate infobar if we are auto translating. 58 // Do not create the after translate infobar if we are auto translating.
58 if ((infobar_type == TranslateInfoBarDelegate::AFTER_TRANSLATE) || 59 if ((infobar_type == TranslateInfoBarDelegate::AFTER_TRANSLATE) ||
59 (infobar_type == TranslateInfoBarDelegate::TRANSLATING)) { 60 (infobar_type == TranslateInfoBarDelegate::TRANSLATING)) {
60 TranslateTabHelper* translate_tab_helper = 61 TranslateTabHelper* translate_tab_helper =
61 TranslateTabHelper::FromWebContents(infobar_service->web_contents()); 62 TranslateTabHelper::FromWebContents(infobar_service->web_contents());
62 if (!translate_tab_helper || 63 if (!translate_tab_helper ||
63 translate_tab_helper->language_state().InTranslateNavigation()) 64 translate_tab_helper->language_state().InTranslateNavigation())
64 return; 65 return;
65 } 66 }
66 67
67 // Find any existing translate infobar delegate. 68 // Find any existing translate infobar delegate.
69 InfoBar* old_infobar = NULL;
68 TranslateInfoBarDelegate* old_delegate = NULL; 70 TranslateInfoBarDelegate* old_delegate = NULL;
69 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) { 71 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
70 old_delegate = infobar_service->infobar_at(i)->AsTranslateInfoBarDelegate(); 72 old_infobar = infobar_service->infobar_at(i);
73 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate();
71 if (old_delegate) { 74 if (old_delegate) {
72 if (!replace_existing_infobar) 75 if (!replace_existing_infobar)
73 return; 76 return;
74 break; 77 break;
75 } 78 }
76 } 79 }
77 80
78 // Add the new delegate. 81 // Add the new delegate.
79 scoped_ptr<InfoBarDelegate> infobar( 82 scoped_ptr<InfoBar> infobar(CreateInfoBar(
80 new TranslateInfoBarDelegate(infobar_service, infobar_type, old_delegate, 83 scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
81 original_language, target_language, 84 infobar_type, old_delegate, original_language, target_language,
82 error_type, prefs, shortcut_config)); 85 error_type, prefs, shortcut_config))));
83 if (old_delegate) 86 if (old_delegate)
84 infobar_service->ReplaceInfoBar(old_delegate, infobar.Pass()); 87 infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass());
85 else 88 else
86 infobar_service->AddInfoBar(infobar.Pass()); 89 infobar_service->AddInfoBar(infobar.Pass());
87 } 90 }
88 91
89 92
90 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex( 93 void TranslateInfoBarDelegate::UpdateOriginalLanguageIndex(
91 size_t language_index) { 94 size_t language_index) {
92 if (original_language_index_ == language_index) 95 if (original_language_index_ == language_index)
93 return; 96 return;
94 97
(...skipping 23 matching lines...) Expand all
118 target_language_code()); 121 target_language_code());
119 122
120 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 123 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
121 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true); 124 TranslateBrowserMetrics::UMA_PERFORM_TRANSLATE), true);
122 } 125 }
123 126
124 void TranslateInfoBarDelegate::RevertTranslation() { 127 void TranslateInfoBarDelegate::RevertTranslation() {
125 TranslateManager::GetInstance()->RevertTranslation(web_contents()); 128 TranslateManager::GetInstance()->RevertTranslation(web_contents());
126 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 129 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
127 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true); 130 TranslateBrowserMetrics::UMA_REVERT_TRANSLATION), true);
128 RemoveSelf(); 131 infobar()->RemoveSelf();
129 } 132 }
130 133
131 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 134 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
132 TranslateManager::GetInstance()->ReportLanguageDetectionError( 135 TranslateManager::GetInstance()->ReportLanguageDetectionError(
133 web_contents()); 136 web_contents());
134 } 137 }
135 138
136 void TranslateInfoBarDelegate::TranslationDeclined() { 139 void TranslateInfoBarDelegate::TranslationDeclined() {
137 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) { 140 if (!web_contents()->GetBrowserContext()->IsOffTheRecord()) {
138 prefs_.ResetTranslationAcceptedCount(original_language_code()); 141 prefs_.ResetTranslationAcceptedCount(original_language_code());
(...skipping 22 matching lines...) Expand all
161 164
162 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 165 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
163 if (prefs_.IsBlockedLanguage(original_language_code())) { 166 if (prefs_.IsBlockedLanguage(original_language_code())) {
164 prefs_.UnblockLanguage(original_language_code()); 167 prefs_.UnblockLanguage(original_language_code());
165 } else { 168 } else {
166 prefs_.BlockLanguage(original_language_code()); 169 prefs_.BlockLanguage(original_language_code());
167 TranslateTabHelper* translate_tab_helper = 170 TranslateTabHelper* translate_tab_helper =
168 TranslateTabHelper::FromWebContents(web_contents()); 171 TranslateTabHelper::FromWebContents(web_contents());
169 DCHECK(translate_tab_helper); 172 DCHECK(translate_tab_helper);
170 translate_tab_helper->language_state().SetTranslateEnabled(false); 173 translate_tab_helper->language_state().SetTranslateEnabled(false);
171 RemoveSelf(); 174 infobar()->RemoveSelf();
172 } 175 }
173 176
174 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 177 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
175 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true); 178 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
176 } 179 }
177 180
178 bool TranslateInfoBarDelegate::IsSiteBlacklisted() { 181 bool TranslateInfoBarDelegate::IsSiteBlacklisted() {
179 std::string host = TranslateUIDelegate::GetPageHost(web_contents()); 182 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
180 return !host.empty() && prefs_.IsSiteBlacklisted(host); 183 return !host.empty() && prefs_.IsSiteBlacklisted(host);
181 } 184 }
182 185
183 void TranslateInfoBarDelegate::ToggleSiteBlacklist() { 186 void TranslateInfoBarDelegate::ToggleSiteBlacklist() {
184 std::string host = TranslateUIDelegate::GetPageHost(web_contents()); 187 std::string host = TranslateUIDelegate::GetPageHost(web_contents());
185 if (host.empty()) 188 if (host.empty())
186 return; 189 return;
187 190
188 if (prefs_.IsSiteBlacklisted(host)) { 191 if (prefs_.IsSiteBlacklisted(host)) {
189 prefs_.RemoveSiteFromBlacklist(host); 192 prefs_.RemoveSiteFromBlacklist(host);
190 } else { 193 } else {
191 prefs_.BlacklistSite(host); 194 prefs_.BlacklistSite(host);
192 TranslateTabHelper* translate_tab_helper = 195 TranslateTabHelper* translate_tab_helper =
193 TranslateTabHelper::FromWebContents(web_contents()); 196 TranslateTabHelper::FromWebContents(web_contents());
194 DCHECK(translate_tab_helper); 197 DCHECK(translate_tab_helper);
195 translate_tab_helper->language_state().SetTranslateEnabled(false); 198 translate_tab_helper->language_state().SetTranslateEnabled(false);
196 RemoveSelf(); 199 infobar()->RemoveSelf();
197 } 200 }
198 201
199 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 202 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
200 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true); 203 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_SITE), true);
201 } 204 }
202 205
203 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() { 206 bool TranslateInfoBarDelegate::ShouldAlwaysTranslate() {
204 return prefs_.IsLanguagePairWhitelisted(original_language_code(), 207 return prefs_.IsLanguagePairWhitelisted(original_language_code(),
205 target_language_code()); 208 target_language_code());
206 } 209 }
(...skipping 23 matching lines...) Expand all
230 233
231 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() { 234 void TranslateInfoBarDelegate::NeverTranslatePageLanguage() {
232 prefs_.BlockLanguage(original_language_code()); 235 prefs_.BlockLanguage(original_language_code());
233 TranslateTabHelper* translate_tab_helper = 236 TranslateTabHelper* translate_tab_helper =
234 TranslateTabHelper::FromWebContents(web_contents()); 237 TranslateTabHelper::FromWebContents(web_contents());
235 DCHECK(translate_tab_helper); 238 DCHECK(translate_tab_helper);
236 translate_tab_helper->language_state().SetTranslateEnabled(false); 239 translate_tab_helper->language_state().SetTranslateEnabled(false);
237 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName( 240 UMA_HISTOGRAM_BOOLEAN(TranslateBrowserMetrics::GetMetricsName(
238 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true); 241 TranslateBrowserMetrics::UMA_NEVER_TRANSLATE_LANG), true);
239 242
240 RemoveSelf(); 243 infobar()->RemoveSelf();
241 } 244 }
242 245
243 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() { 246 string16 TranslateInfoBarDelegate::GetMessageInfoBarText() {
244 if (infobar_type_ == TRANSLATING) { 247 if (infobar_type_ == TRANSLATING) {
245 string16 target_language_name = language_name_at(target_language_index()); 248 string16 target_language_name = language_name_at(target_language_index());
246 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO, 249 return l10n_util::GetStringFUTF16(IDS_TRANSLATE_INFOBAR_TRANSLATING_TO,
247 target_language_name); 250 target_language_name);
248 } 251 }
249 252
250 DCHECK_EQ(TRANSLATION_ERROR, infobar_type_); 253 DCHECK_EQ(TRANSLATION_ERROR, infobar_type_);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 *swap_languages = (offsets[0] > offsets[1]); 355 *swap_languages = (offsets[0] > offsets[1]);
353 if (*swap_languages) 356 if (*swap_languages)
354 std::swap(offsets[0], offsets[1]); 357 std::swap(offsets[0], offsets[1]);
355 358
356 strings->push_back(text.substr(0, offsets[0])); 359 strings->push_back(text.substr(0, offsets[0]));
357 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0])); 360 strings->push_back(text.substr(offsets[0], offsets[1] - offsets[0]));
358 strings->push_back(text.substr(offsets[1])); 361 strings->push_back(text.substr(offsets[1]));
359 } 362 }
360 363
361 TranslateInfoBarDelegate::TranslateInfoBarDelegate( 364 TranslateInfoBarDelegate::TranslateInfoBarDelegate(
362 InfoBarService* infobar_service,
363 Type infobar_type, 365 Type infobar_type,
364 TranslateInfoBarDelegate* old_delegate, 366 TranslateInfoBarDelegate* old_delegate,
365 const std::string& original_language, 367 const std::string& original_language,
366 const std::string& target_language, 368 const std::string& target_language,
367 TranslateErrors::Type error_type, 369 TranslateErrors::Type error_type,
368 PrefService* prefs, 370 PrefService* prefs,
369 ShortcutConfiguration shortcut_config) 371 ShortcutConfiguration shortcut_config)
370 : InfoBarDelegate(infobar_service), 372 : InfoBarDelegate(),
371 infobar_type_(infobar_type), 373 infobar_type_(infobar_type),
372 background_animation_(NONE), 374 background_animation_(NONE),
373 original_language_index_(kNoIndex), 375 original_language_index_(kNoIndex),
374 target_language_index_(kNoIndex), 376 target_language_index_(kNoIndex),
375 error_type_(error_type), 377 error_type_(error_type),
376 prefs_(prefs), 378 prefs_(prefs),
377 shortcut_config_(shortcut_config) { 379 shortcut_config_(shortcut_config) {
378 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR), 380 DCHECK_NE((infobar_type_ == TRANSLATION_ERROR),
379 (error_type_ == TranslateErrors::NONE)); 381 (error_type_ == TranslateErrors::NONE));
380 382
381 if (old_delegate && (old_delegate->is_error() != is_error())) 383 if (old_delegate && (old_delegate->is_error() != is_error()))
382 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 384 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
383 385
384 languages_ = TranslateUIDelegate::GetSortedLanguageNames( 386 languages_ = TranslateUIDelegate::GetSortedLanguageNames(
385 g_browser_process->GetApplicationLocale()); 387 g_browser_process->GetApplicationLocale());
386 388
387 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin(); 389 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
388 iter != languages_.end(); ++iter) { 390 iter != languages_.end(); ++iter) {
389 std::string language_code = iter->first; 391 std::string language_code = iter->first;
390 if (language_code == original_language) 392 if (language_code == original_language)
391 original_language_index_ = iter - languages_.begin(); 393 original_language_index_ = iter - languages_.begin();
392 if (language_code == target_language) 394 if (language_code == target_language)
393 target_language_index_ = iter - languages_.begin(); 395 target_language_index_ = iter - languages_.begin();
394 } 396 }
395 } 397 }
396 398
399 // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
400 // files.
401
397 void TranslateInfoBarDelegate::InfoBarDismissed() { 402 void TranslateInfoBarDelegate::InfoBarDismissed() {
398 if (infobar_type_ != BEFORE_TRANSLATE) 403 if (infobar_type_ != BEFORE_TRANSLATE)
399 return; 404 return;
400 405
401 // The user closed the infobar without clicking the translate button. 406 // The user closed the infobar without clicking the translate button.
402 TranslationDeclined(); 407 TranslationDeclined();
403 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); 408 UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true);
404 } 409 }
405 410
406 int TranslateInfoBarDelegate::GetIconID() const { 411 int TranslateInfoBarDelegate::GetIconID() const {
(...skipping 11 matching lines...) Expand all
418 if (!details.is_navigation_to_different_page() && !details.is_main_frame) 423 if (!details.is_navigation_to_different_page() && !details.is_main_frame)
419 return false; 424 return false;
420 425
421 return InfoBarDelegate::ShouldExpireInternal(details); 426 return InfoBarDelegate::ShouldExpireInternal(details);
422 } 427 }
423 428
424 TranslateInfoBarDelegate* 429 TranslateInfoBarDelegate*
425 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 430 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
426 return this; 431 return this;
427 } 432 }
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