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

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

Issue 190063006: Infobar Componentization Proof of Concept (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor fixes Created 6 years, 9 months 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.h" 13 #include "chrome/browser/infobars/infobar.h"
14 #include "chrome/browser/infobars/infobar_manager.h"
14 #include "chrome/browser/infobars/infobar_service.h" 15 #include "chrome/browser/infobars/infobar_service.h"
15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.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"
18 #include "components/translate/core/browser/translate_accept_languages.h" 19 #include "components/translate/core/browser/translate_accept_languages.h"
19 #include "components/translate/core/browser/translate_download_manager.h" 20 #include "components/translate/core/browser/translate_download_manager.h"
20 #include "components/translate/core/common/translate_constants.h" 21 #include "components/translate/core/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"
23 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 TranslateTabHelper::FromWebContents(web_contents); 83 TranslateTabHelper::FromWebContents(web_contents);
83 if (!translate_tab_helper || 84 if (!translate_tab_helper ||
84 translate_tab_helper->GetLanguageState().InTranslateNavigation()) 85 translate_tab_helper->GetLanguageState().InTranslateNavigation())
85 return; 86 return;
86 } 87 }
87 88
88 // Find any existing translate infobar delegate. 89 // Find any existing translate infobar delegate.
89 InfoBar* old_infobar = NULL; 90 InfoBar* old_infobar = NULL;
90 InfoBarService* infobar_service = 91 InfoBarService* infobar_service =
91 InfoBarService::FromWebContents(web_contents); 92 InfoBarService::FromWebContents(web_contents);
93 InfoBarManager& infobar_manager = infobar_service->infobar_manager();
92 TranslateInfoBarDelegate* old_delegate = NULL; 94 TranslateInfoBarDelegate* old_delegate = NULL;
93 for (size_t i = 0; i < infobar_service->infobar_count(); ++i) { 95 for (size_t i = 0; i < infobar_manager.infobar_count(); ++i) {
94 old_infobar = infobar_service->infobar_at(i); 96 old_infobar = infobar_manager.infobar_at(i);
95 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate(); 97 old_delegate = old_infobar->delegate()->AsTranslateInfoBarDelegate();
96 if (old_delegate) { 98 if (old_delegate) {
97 if (!replace_existing_infobar) 99 if (!replace_existing_infobar)
98 return; 100 return;
99 break; 101 break;
100 } 102 }
101 } 103 }
102 104
103 // Add the new delegate. 105 // Add the new delegate.
104 scoped_ptr<InfoBar> infobar(CreateInfoBar( 106 scoped_ptr<InfoBar> infobar(CreateInfoBar(
(...skipping 22 matching lines...) Expand all
127 ui_delegate_.Translate(); 129 ui_delegate_.Translate();
128 } 130 }
129 131
130 void TranslateInfoBarDelegate::RevertTranslation() { 132 void TranslateInfoBarDelegate::RevertTranslation() {
131 ui_delegate_.RevertTranslation(); 133 ui_delegate_.RevertTranslation();
132 infobar()->RemoveSelf(); 134 infobar()->RemoveSelf();
133 } 135 }
134 136
135 void TranslateInfoBarDelegate::ReportLanguageDetectionError() { 137 void TranslateInfoBarDelegate::ReportLanguageDetectionError() {
136 TranslateManager* manager = 138 TranslateManager* manager =
137 TranslateTabHelper::GetManagerFromWebContents(web_contents()); 139 TranslateTabHelper::GetManagerFromWebContents(web_contents_);
138 if (!manager) 140 if (!manager)
139 return; 141 return;
140 manager->ReportLanguageDetectionError(); 142 manager->ReportLanguageDetectionError();
141 } 143 }
142 144
143 void TranslateInfoBarDelegate::TranslationDeclined() { 145 void TranslateInfoBarDelegate::TranslationDeclined() {
144 ui_delegate_.TranslationDeclined(false); 146 ui_delegate_.TranslationDeclined(false);
145 } 147 }
146 148
147 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { 149 bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() {
148 Profile* profile = 150 Profile* profile =
149 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 151 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
150 Profile* original_profile = profile->GetOriginalProfile(); 152 Profile* original_profile = profile->GetOriginalProfile();
151 scoped_ptr<TranslatePrefs> translate_prefs( 153 scoped_ptr<TranslatePrefs> translate_prefs(
152 TranslateTabHelper::CreateTranslatePrefs(original_profile->GetPrefs())); 154 TranslateTabHelper::CreateTranslatePrefs(original_profile->GetPrefs()));
153 TranslateAcceptLanguages* accept_languages = 155 TranslateAcceptLanguages* accept_languages =
154 TranslateTabHelper::GetTranslateAcceptLanguages(original_profile); 156 TranslateTabHelper::GetTranslateAcceptLanguages(original_profile);
155 return translate_prefs->CanTranslateLanguage(accept_languages, 157 return translate_prefs->CanTranslateLanguage(accept_languages,
156 original_language_code()); 158 original_language_code());
157 } 159 }
158 160
159 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() { 161 void TranslateInfoBarDelegate::ToggleTranslatableLanguageByPrefs() {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 251 }
250 252
251 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { 253 void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() {
252 DCHECK_EQ(TranslateTabHelper::TRANSLATE_ERROR, step_); 254 DCHECK_EQ(TranslateTabHelper::TRANSLATE_ERROR, step_);
253 if (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) { 255 if (error_type_ == TranslateErrors::UNSUPPORTED_LANGUAGE) {
254 RevertTranslation(); 256 RevertTranslation();
255 return; 257 return;
256 } 258 }
257 // This is the "Try again..." case. 259 // This is the "Try again..." case.
258 TranslateManager* manager = 260 TranslateManager* manager =
259 TranslateTabHelper::GetManagerFromWebContents(web_contents()); 261 TranslateTabHelper::GetManagerFromWebContents(web_contents_);
260 DCHECK(manager); 262 DCHECK(manager);
261 manager->TranslatePage( 263 manager->TranslatePage(
262 original_language_code(), target_language_code(), false); 264 original_language_code(), target_language_code(), false);
263 } 265 }
264 266
265 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() { 267 bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() {
266 return !GetMessageInfoBarButtonText().empty(); 268 return !GetMessageInfoBarButtonText().empty();
267 } 269 }
268 270
269 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() { 271 bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() {
270 DCHECK_EQ(TranslateTabHelper::BEFORE_TRANSLATE, step_); 272 DCHECK_EQ(TranslateTabHelper::BEFORE_TRANSLATE, step_);
271 return !web_contents()->GetBrowserContext()->IsOffTheRecord() && 273 return !web_contents_->GetBrowserContext()->IsOffTheRecord() &&
272 (prefs_->GetTranslationDeniedCount(original_language_code()) >= 274 (prefs_->GetTranslationDeniedCount(original_language_code()) >=
273 kNeverTranslateMinCount); 275 kNeverTranslateMinCount);
274 } 276 }
275 277
276 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() { 278 bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() {
277 DCHECK_EQ(TranslateTabHelper::BEFORE_TRANSLATE, step_); 279 DCHECK_EQ(TranslateTabHelper::BEFORE_TRANSLATE, step_);
278 return !web_contents()->GetBrowserContext()->IsOffTheRecord() && 280 return !web_contents_->GetBrowserContext()->IsOffTheRecord() &&
279 (prefs_->GetTranslationAcceptedCount(original_language_code()) >= 281 (prefs_->GetTranslationAcceptedCount(original_language_code()) >=
280 kAlwaysTranslateMinCount); 282 kAlwaysTranslateMinCount);
281 } 283 }
282 284
283 // static 285 // static
284 base::string16 TranslateInfoBarDelegate::GetLanguageDisplayableName( 286 base::string16 TranslateInfoBarDelegate::GetLanguageDisplayableName(
285 const std::string& language_code) { 287 const std::string& language_code) {
286 return l10n_util::GetDisplayNameForLocale( 288 return l10n_util::GetDisplayNameForLocale(
287 language_code, g_browser_process->GetApplicationLocale(), true); 289 language_code, g_browser_process->GetApplicationLocale(), true);
288 } 290 }
289 291
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 content::WebContents* web_contents, 328 content::WebContents* web_contents,
327 TranslateTabHelper::TranslateStep step, 329 TranslateTabHelper::TranslateStep step,
328 TranslateInfoBarDelegate* old_delegate, 330 TranslateInfoBarDelegate* old_delegate,
329 const std::string& original_language, 331 const std::string& original_language,
330 const std::string& target_language, 332 const std::string& target_language,
331 TranslateErrors::Type error_type, 333 TranslateErrors::Type error_type,
332 PrefService* prefs, 334 PrefService* prefs,
333 bool triggered_from_menu) 335 bool triggered_from_menu)
334 : InfoBarDelegate(), 336 : InfoBarDelegate(),
335 step_(step), 337 step_(step),
338 web_contents_(web_contents),
336 background_animation_(NONE), 339 background_animation_(NONE),
337 ui_delegate_(web_contents, original_language, target_language), 340 ui_delegate_(web_contents, original_language, target_language),
338 error_type_(error_type), 341 error_type_(error_type),
339 prefs_(TranslateTabHelper::CreateTranslatePrefs(prefs)), 342 prefs_(TranslateTabHelper::CreateTranslatePrefs(prefs)),
340 triggered_from_menu_(triggered_from_menu) { 343 triggered_from_menu_(triggered_from_menu) {
341 DCHECK_NE((step_ == TranslateTabHelper::TRANSLATE_ERROR), 344 DCHECK_NE((step_ == TranslateTabHelper::TRANSLATE_ERROR),
342 (error_type_ == TranslateErrors::NONE)); 345 (error_type_ == TranslateErrors::NONE));
343 346
344 if (old_delegate && (old_delegate->is_error() != is_error())) 347 if (old_delegate && (old_delegate->is_error() != is_error()))
345 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; 348 background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL;
(...skipping 13 matching lines...) Expand all
359 362
360 int TranslateInfoBarDelegate::GetIconID() const { 363 int TranslateInfoBarDelegate::GetIconID() const {
361 return IDR_INFOBAR_TRANSLATE; 364 return IDR_INFOBAR_TRANSLATE;
362 } 365 }
363 366
364 InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() const { 367 InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() const {
365 return PAGE_ACTION_TYPE; 368 return PAGE_ACTION_TYPE;
366 } 369 }
367 370
368 bool TranslateInfoBarDelegate::ShouldExpire( 371 bool TranslateInfoBarDelegate::ShouldExpire(
369 const content::LoadCommittedDetails& details) const { 372 const NavigationDetails& details) const {
370 // Note: we allow closing this infobar even if the main frame navigation 373 // Note: we allow closing this infobar even if the main frame navigation
371 // was programmatic and not initiated by the user - crbug.com/70261 . 374 // was programmatic and not initiated by the user - crbug.com/70261 .
372 if (!details.is_navigation_to_different_page() && !details.is_main_frame) 375 if (!details.is_navigation_to_different_page && !details.is_main_frame)
373 return false; 376 return false;
374 377
375 return InfoBarDelegate::ShouldExpireInternal(details); 378 return InfoBarDelegate::ShouldExpireInternal(details);
376 } 379 }
377 380
378 TranslateInfoBarDelegate* 381 TranslateInfoBarDelegate*
379 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 382 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
380 return this; 383 return this;
381 } 384 }
385
386 void TranslateInfoBarDelegate::CleanUp() { web_contents_ = NULL; }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698