| 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..8d48620d90b065cb8b625342f93821fb09344785 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"
|
| @@ -52,13 +53,18 @@ TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
|
|
|
| // static
|
| void TranslateInfoBarDelegate::Create(bool replace_existing_infobar,
|
| - content::WebContents* web_contents,
|
| + 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 +79,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 +102,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 +132,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 +141,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 +248,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 +259,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 +311,8 @@ void TranslateInfoBarDelegate::GetAfterTranslateStrings(
|
| }
|
|
|
| TranslateInfoBarDelegate::TranslateInfoBarDelegate(
|
| - content::WebContents* web_contents,
|
| + TranslateManager* translate_manager,
|
| + bool is_off_the_record,
|
| translate::TranslateStep step,
|
| TranslateInfoBarDelegate* old_delegate,
|
| const std::string& original_language,
|
| @@ -326,22 +321,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,
|
| original_language,
|
| target_language),
|
| + translate_manager_(translate_manager->GetWeakPtr()),
|
| 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.
|
|
|
|
|