Chromium Code Reviews| Index: chrome/browser/translate/translate_infobar_delegate.cc |
| diff --git a/chrome/browser/translate/translate_infobar_delegate.cc b/chrome/browser/translate/translate_infobar_delegate.cc |
| index 3b8837484ce3c1e330e7339923962d0393af639f..67e6ca5049755c63a285c6787b58c46220f94b00 100644 |
| --- a/chrome/browser/translate/translate_infobar_delegate.cc |
| +++ b/chrome/browser/translate/translate_infobar_delegate.cc |
| @@ -10,13 +10,14 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/prefs/pref_service.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| -#include "chrome/browser/translate/translate_tab_helper.h" |
| #include "components/infobars/core/infobar.h" |
| +#include "components/translate/core/browser/language_state.h" |
| #include "components/translate/core/browser/translate_accept_languages.h" |
| +#include "components/translate/core/browser/translate_client.h" |
| #include "components/translate/core/browser/translate_download_manager.h" |
| +#include "components/translate/core/browser/translate_driver.h" |
| #include "components/translate/core/browser/translate_manager.h" |
| #include "components/translate/core/common/translate_constants.h" |
| -#include "content/public/browser/browser_context.h" |
| #include "content/public/browser/web_contents.h" |
| #include "grit/component_strings.h" |
| #include "grit/theme_resources.h" |
| @@ -51,14 +52,20 @@ TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { |
| } |
| // static |
| -void TranslateInfoBarDelegate::Create(bool replace_existing_infobar, |
| - content::WebContents* web_contents, |
| - translate::TranslateStep step, |
| - const std::string& original_language, |
| - const std::string& target_language, |
| - TranslateErrors::Type error_type, |
| - PrefService* prefs, |
| - bool triggered_from_menu) { |
| +void TranslateInfoBarDelegate::Create( |
| + bool replace_existing_infobar, |
| + const base::WeakPtr<TranslateManager>& translate_manager, |
| + InfoBarService* infobar_service, |
| + bool is_off_the_record, |
| + translate::TranslateStep step, |
| + const std::string& original_language, |
| + const std::string& target_language, |
| + TranslateErrors::Type error_type, |
| + PrefService* prefs, |
| + bool triggered_from_menu) { |
| + DCHECK(translate_manager); |
| + DCHECK(infobar_service); |
| + |
| // Check preconditions. |
| if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { |
| DCHECK(TranslateDownloadManager::IsSupportedLanguage(target_language)); |
| @@ -73,19 +80,15 @@ void TranslateInfoBarDelegate::Create(bool replace_existing_infobar, |
| } |
| // Do not create the after translate infobar if we are auto translating. |
| - if ((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || |
| - (step == translate::TRANSLATE_STEP_TRANSLATING)) { |
| - TranslateTabHelper* translate_tab_helper = |
| - TranslateTabHelper::FromWebContents(web_contents); |
| - if (!translate_tab_helper || |
| - translate_tab_helper->GetLanguageState().InTranslateNavigation()) |
| - return; |
| + if (((step == translate::TRANSLATE_STEP_AFTER_TRANSLATE) || |
| + (step == translate::TRANSLATE_STEP_TRANSLATING)) && |
| + translate_manager->translate_client()->GetTranslateDriver() |
| + ->GetLanguageState().InTranslateNavigation()) { |
| + return; |
| } |
| // Find any existing translate infobar delegate. |
| infobars::InfoBar* old_infobar = NULL; |
| - InfoBarService* infobar_service = |
| - InfoBarService::FromWebContents(web_contents); |
| TranslateInfoBarDelegate* old_delegate = NULL; |
| for (size_t i = 0; i < infobar_service->infobar_count(); ++i) { |
| old_infobar = infobar_service->infobar_at(i); |
| @@ -100,8 +103,8 @@ void TranslateInfoBarDelegate::Create(bool replace_existing_infobar, |
| // Add the new delegate. |
| scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar( |
| scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate( |
| - web_contents, step, old_delegate, original_language, |
| - target_language, error_type, prefs, |
| + translate_manager, is_off_the_record, step, old_delegate, |
| + original_language, target_language, error_type, prefs, |
| triggered_from_menu)))); |
| if (old_delegate) |
| infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass()); |
| @@ -130,11 +133,8 @@ void TranslateInfoBarDelegate::RevertTranslation() { |
| } |
| void TranslateInfoBarDelegate::ReportLanguageDetectionError() { |
| - TranslateManager* manager = |
| - TranslateTabHelper::GetManagerFromWebContents(GetWebContents()); |
| - if (!manager) |
| - return; |
| - manager->ReportLanguageDetectionError(); |
| + if (translate_manager_) |
| + translate_manager_->ReportLanguageDetectionError(); |
| } |
| void TranslateInfoBarDelegate::TranslationDeclined() { |
| @@ -142,13 +142,10 @@ void TranslateInfoBarDelegate::TranslationDeclined() { |
| } |
| bool TranslateInfoBarDelegate::IsTranslatableLanguageByPrefs() { |
| - TranslateTabHelper* translate_tab_helper = |
| - TranslateTabHelper::FromWebContents(GetWebContents()); |
| - scoped_ptr<TranslatePrefs> translate_prefs( |
| - TranslateTabHelper::CreateTranslatePrefs( |
| - translate_tab_helper->GetPrefs())); |
| + TranslateClient* client = GetTranslateClient(); |
| + scoped_ptr<TranslatePrefs> translate_prefs(client->GetTranslatePrefs()); |
| TranslateAcceptLanguages* accept_languages = |
| - translate_tab_helper->GetTranslateAcceptLanguages(); |
| + client->GetTranslateAcceptLanguages(); |
| return translate_prefs->CanTranslateLanguage(accept_languages, |
| original_language_code()); |
| } |
| @@ -252,10 +249,8 @@ void TranslateInfoBarDelegate::MessageInfoBarButtonPressed() { |
| return; |
| } |
| // This is the "Try again..." case. |
| - TranslateManager* manager = |
| - TranslateTabHelper::GetManagerFromWebContents(GetWebContents()); |
| - DCHECK(manager); |
| - manager->TranslatePage( |
| + DCHECK(translate_manager_); |
| + translate_manager_->TranslatePage( |
| original_language_code(), target_language_code(), false); |
| } |
| @@ -265,14 +260,14 @@ bool TranslateInfoBarDelegate::ShouldShowMessageInfoBarButton() { |
| bool TranslateInfoBarDelegate::ShouldShowNeverTranslateShortcut() { |
| DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); |
| - return !GetWebContents()->GetBrowserContext()->IsOffTheRecord() && |
| + return !is_off_the_record_ && |
| (prefs_->GetTranslationDeniedCount(original_language_code()) >= |
| kNeverTranslateMinCount); |
| } |
| bool TranslateInfoBarDelegate::ShouldShowAlwaysTranslateShortcut() { |
| DCHECK_EQ(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, step_); |
| - return !GetWebContents()->GetBrowserContext()->IsOffTheRecord() && |
| + return !is_off_the_record_ && |
| (prefs_->GetTranslationAcceptedCount(original_language_code()) >= |
| kAlwaysTranslateMinCount); |
| } |
| @@ -317,7 +312,8 @@ void TranslateInfoBarDelegate::GetAfterTranslateStrings( |
| } |
| TranslateInfoBarDelegate::TranslateInfoBarDelegate( |
| - content::WebContents* web_contents, |
| + const base::WeakPtr<TranslateManager>& translate_manager, |
| + bool is_off_the_record, |
| translate::TranslateStep step, |
| TranslateInfoBarDelegate* old_delegate, |
| const std::string& original_language, |
| @@ -326,22 +322,32 @@ TranslateInfoBarDelegate::TranslateInfoBarDelegate( |
| PrefService* prefs, |
| bool triggered_from_menu) |
| : infobars::InfoBarDelegate(), |
| + is_off_the_record_(is_off_the_record), |
| step_(step), |
| background_animation_(NONE), |
| - ui_delegate_(TranslateTabHelper::FromWebContents(web_contents), |
| - TranslateTabHelper::GetManagerFromWebContents(web_contents), |
| + ui_delegate_(translate_manager->translate_client(), |
| + translate_manager.get(), |
|
blundell
2014/05/16 15:11:03
hmm, is it ok that this guy holds on to a raw poin
droger
2014/05/16 15:14:11
You're right, it's probably not OK conceptually.
|
| original_language, |
| target_language), |
| + translate_manager_(translate_manager), |
| error_type_(error_type), |
| - prefs_(TranslateTabHelper::CreateTranslatePrefs(prefs)), |
| + prefs_(translate_manager->translate_client()->GetTranslatePrefs()), |
| triggered_from_menu_(triggered_from_menu) { |
| DCHECK_NE((step_ == translate::TRANSLATE_STEP_TRANSLATE_ERROR), |
| (error_type_ == TranslateErrors::NONE)); |
| + DCHECK(translate_manager_); |
| if (old_delegate && (old_delegate->is_error() != is_error())) |
| background_animation_ = is_error() ? NORMAL_TO_ERROR : ERROR_TO_NORMAL; |
| } |
| +TranslateClient* TranslateInfoBarDelegate::GetTranslateClient() { |
| + if (!translate_manager_) |
| + return NULL; |
| + |
| + return translate_manager_->translate_client(); |
| +} |
| + |
| // TranslateInfoBarDelegate::CreateInfoBar() is implemented in platform-specific |
| // files. |