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

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

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

Powered by Google App Engine
This is Rietveld 408576698