diff options
author | droger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 15:42:57 +0000 |
---|---|---|
committer | droger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-18 15:42:57 +0000 |
commit | 7aa5fe5abe8ee6c59f4a0ad8e5cac1701c4c9af2 (patch) | |
tree | e43bdd2dc072cd0b08db2416f9cc1a32e562d923 | |
parent | 6c6325917085a2523fc4e23a851861697e0b66f5 (diff) | |
download | chromium_src-7aa5fe5abe8ee6c59f4a0ad8e5cac1701c4c9af2.zip chromium_src-7aa5fe5abe8ee6c59f4a0ad8e5cac1701c4c9af2.tar.gz chromium_src-7aa5fe5abe8ee6c59f4a0ad8e5cac1701c4c9af2.tar.bz2 |
Introduce the TranslateClient interface
In order to move TranslateManager into the Translate component, all
dependencies on chrome/ have to be removed.
This CL introduces the TranslateClient interface which abstracts
TranslateTabHelper.
Eventually all uses of TranslateTabHelper in TranslateManaher will be replaced
by TranslateClient and TranslateDriver.
BUG=335078
Review URL: https://codereview.chromium.org/167823003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257644 0039d316-1c4b-4281-b951-d872f2087c98
11 files changed, 73 insertions, 21 deletions
diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc index 9cb8c14..f1721c9 100644 --- a/chrome/browser/translate/translate_manager.cc +++ b/chrome/browser/translate/translate_manager.cc @@ -27,6 +27,7 @@ #include "components/translate/core/browser/translate_accept_languages.h" #include "components/translate/core/browser/translate_browser_metrics.h" #include "components/translate/core/browser/translate_download_manager.h" +#include "components/translate/core/browser/translate_driver.h" #include "components/translate/core/browser/translate_error_details.h" #include "components/translate/core/browser/translate_language_list.h" #include "components/translate/core/browser/translate_prefs.h" @@ -136,7 +137,7 @@ void TranslateManager::Observe(int type, } if (!load_details->is_main_frame && - translate_tab_helper_->GetLanguageState().translation_declined()) { + translate_driver_->GetLanguageState().translation_declined()) { // Some sites (such as Google map) may trigger sub-frame navigations // when the user interacts with the page. We don't want to show a new // infobar if the user already dismissed one in that case. @@ -150,7 +151,7 @@ void TranslateManager::Observe(int type, // When doing a page reload, TAB_LANGUAGE_DETERMINED is not sent, // so the translation needs to be explicitly initiated, but only when the // page needs translation. - if (!translate_tab_helper_->GetLanguageState().page_needs_translation()) + if (!translate_driver_->GetLanguageState().page_needs_translation()) return; // Note that we delay it as the TranslateManager gets this notification // before the WebContents and the WebContents processing might remove the @@ -161,7 +162,7 @@ void TranslateManager::Observe(int type, base::Bind( &TranslateManager::InitiateTranslationPosted, weak_method_factory_.GetWeakPtr(), - translate_tab_helper_->GetLanguageState().original_language(), + translate_driver_->GetLanguageState().original_language(), 0)); break; } @@ -177,7 +178,7 @@ void TranslateManager::Observe(int type, // We may get this notifications multiple times. Make sure to translate // only once. - LanguageState& language_state = translate_tab_helper_->GetLanguageState(); + LanguageState& language_state = translate_driver_->GetLanguageState(); if (language_state.page_needs_translation() && !language_state.translation_pending() && !language_state.translation_declined() && @@ -213,6 +214,7 @@ TranslateManager::RegisterTranslateErrorCallback( TranslateManager::TranslateManager(TranslateTabHelper* helper) : max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts), translate_tab_helper_(helper), + translate_driver_(helper->GetTranslateDriver()), weak_method_factory_(this) { WebContents* web_contents = translate_tab_helper_->GetWebContents(); @@ -326,7 +328,7 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { } } - LanguageState& language_state = translate_tab_helper_->GetLanguageState(); + LanguageState& language_state = translate_driver_->GetLanguageState(); std::string auto_translate_to = language_state.AutoTranslateTo(); if (!auto_translate_to.empty()) { // This page was navigated through a click from a translated page. @@ -352,7 +354,7 @@ void TranslateManager::InitiateTranslationPosted(const std::string& page_lang, WebContents* web_contents = translate_tab_helper_->GetWebContents(); DCHECK(web_contents); - if (translate_tab_helper_->GetLanguageState().translation_pending()) + if (translate_driver_->GetLanguageState().translation_pending()) return; // During a reload we need web content to be available before the @@ -428,8 +430,8 @@ void TranslateManager::RevertTranslation() { web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation( web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); - translate_tab_helper_->GetLanguageState().SetCurrentLanguage( - translate_tab_helper_->GetLanguageState().original_language()); + translate_driver_->GetLanguageState().SetCurrentLanguage( + translate_driver_->GetLanguageState().original_language()); } void TranslateManager::ReportLanguageDetectionError() { @@ -453,7 +455,7 @@ void TranslateManager::ReportLanguageDetectionError() { report_error_url = net::AppendQueryParameter( report_error_url, kSourceLanguageQueryName, - translate_tab_helper_->GetLanguageState().original_language()); + translate_driver_->GetLanguageState().original_language()); report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url); report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url); @@ -473,7 +475,7 @@ void TranslateManager::DoTranslatePage(const std::string& translate_script, return; } - translate_tab_helper_->GetLanguageState().set_translation_pending(true); + translate_driver_->GetLanguageState().set_translation_pending(true); web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), translate_script, source_lang, target_lang)); diff --git a/chrome/browser/translate/translate_manager.h b/chrome/browser/translate/translate_manager.h index 0f3b8c1..4d0a199 100644 --- a/chrome/browser/translate/translate_manager.h +++ b/chrome/browser/translate/translate_manager.h @@ -19,6 +19,7 @@ class GURL; struct PageTranslatedDetails; class PrefService; +class TranslateDriver; struct TranslateErrorDetails; class TranslateTabHelper; @@ -118,7 +119,10 @@ class TranslateManager : public content::NotificationObserver { // Max number of attempts before checking if a page has been reloaded. int max_reload_check_attempts_; + // TODO(droger): Remove all uses of |translate_tab_helper_|, use + // TranslateClient and TranslateDriver instead. TranslateTabHelper* translate_tab_helper_; // Weak. + TranslateDriver* translate_driver_; // Weak. base::WeakPtrFactory<TranslateManager> weak_method_factory_; diff --git a/chrome/browser/translate/translate_tab_helper.cc b/chrome/browser/translate/translate_tab_helper.cc index daf5635..6315a6f 100644 --- a/chrome/browser/translate/translate_tab_helper.cc +++ b/chrome/browser/translate/translate_tab_helper.cc @@ -35,7 +35,7 @@ TranslateTabHelper::~TranslateTabHelper() { } LanguageState& TranslateTabHelper::GetLanguageState() { - return translate_driver_.language_state(); + return translate_driver_.GetLanguageState(); } // static @@ -108,6 +108,10 @@ void TranslateTabHelper::ShowTranslateUI(TranslateTabHelper::TranslateStep step, triggered_from_menu); } +TranslateDriver* TranslateTabHelper::GetTranslateDriver() { + return &translate_driver_; +} + bool TranslateTabHelper::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(TranslateTabHelper, message) @@ -138,7 +142,7 @@ void TranslateTabHelper::WebContentsDestroyed( void TranslateTabHelper::OnLanguageDetermined( const LanguageDetectionDetails& details, bool page_needs_translation) { - translate_driver_.language_state().LanguageDetermined( + translate_driver_.GetLanguageState().LanguageDetermined( details.adopted_language, page_needs_translation); content::NotificationService::current()->Notify( @@ -152,8 +156,8 @@ void TranslateTabHelper::OnPageTranslated(int32 page_id, const std::string& translated_lang, TranslateErrors::Type error_type) { DCHECK(web_contents()); - translate_driver_.language_state().SetCurrentLanguage(translated_lang); - translate_driver_.language_state().set_translation_pending(false); + translate_driver_.GetLanguageState().SetCurrentLanguage(translated_lang); + translate_driver_.GetLanguageState().set_translation_pending(false); PageTranslatedDetails details; details.source_language = original_lang; details.target_language = translated_lang; diff --git a/chrome/browser/translate/translate_tab_helper.h b/chrome/browser/translate/translate_tab_helper.h index af3a2fc..c5dd0ff 100644 --- a/chrome/browser/translate/translate_tab_helper.h +++ b/chrome/browser/translate/translate_tab_helper.h @@ -10,6 +10,7 @@ #include "base/memory/scoped_ptr.h" #include "chrome/browser/ui/translate/translate_bubble_model.h" #include "components/translate/content/browser/content_translate_driver.h" +#include "components/translate/core/browser/translate_client.h" #include "components/translate/core/common/translate_errors.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" @@ -26,7 +27,8 @@ class TranslatePrefs; class TranslateManager; class TranslateTabHelper - : public content::WebContentsObserver, + : public TranslateClient, + public content::WebContentsObserver, public content::WebContentsUserData<TranslateTabHelper> { public: virtual ~TranslateTabHelper(); @@ -74,6 +76,9 @@ class TranslateTabHelper TranslateErrors::Type error_type, bool triggered_from_menu); + // TranslateClient implementation. + virtual TranslateDriver* GetTranslateDriver() OVERRIDE; + private: explicit TranslateTabHelper(content::WebContents* web_contents); friend class content::WebContentsUserData<TranslateTabHelper>; diff --git a/components/translate.gypi b/components/translate.gypi index 07238f62..5296704 100644 --- a/components/translate.gypi +++ b/components/translate.gypi @@ -29,6 +29,7 @@ 'translate/core/browser/translate_accept_languages.h', 'translate/core/browser/translate_browser_metrics.cc', 'translate/core/browser/translate_browser_metrics.h', + 'translate/core/browser/translate_client.h', 'translate/core/browser/translate_download_manager.cc', 'translate/core/browser/translate_download_manager.h', 'translate/core/browser/translate_driver.h', diff --git a/components/translate/content/browser/content_translate_driver.cc b/components/translate/content/browser/content_translate_driver.cc index 9c597aa..bf3d5dc 100644 --- a/components/translate/content/browser/content_translate_driver.cc +++ b/components/translate/content/browser/content_translate_driver.cc @@ -51,3 +51,7 @@ void ContentTranslateDriver::OnIsPageTranslatedChanged() { observer_->OnIsPageTranslatedChanged(web_contents); } } + +LanguageState& ContentTranslateDriver::GetLanguageState() { + return language_state_; +} diff --git a/components/translate/content/browser/content_translate_driver.h b/components/translate/content/browser/content_translate_driver.h index 117640b..1e2efa5 100644 --- a/components/translate/content/browser/content_translate_driver.h +++ b/components/translate/content/browser/content_translate_driver.h @@ -35,21 +35,19 @@ class ContentTranslateDriver : public TranslateDriver { ContentTranslateDriver(content::NavigationController* nav_controller); virtual ~ContentTranslateDriver(); - // Gets the language state. - LanguageState& language_state() { return language_state_; } - // Sets the Observer. Calling this method is optional. void set_observer(Observer* observer) { observer_ = observer; } // Must be called on navigations. void DidNavigate(const content::LoadCommittedDetails& details); - private: - // TranslateDriver methods + // TranslateDriver methods. virtual void OnIsPageTranslatedChanged() OVERRIDE; virtual void OnTranslateEnabledChanged() OVERRIDE; virtual bool IsLinkNavigation() OVERRIDE; + virtual LanguageState& GetLanguageState() OVERRIDE; + private: // The navigation controller of the tab we are associated with. content::NavigationController* navigation_controller_; diff --git a/components/translate/core/browser/language_state_unittest.cc b/components/translate/core/browser/language_state_unittest.cc index 56da436..609371b 100644 --- a/components/translate/core/browser/language_state_unittest.cc +++ b/components/translate/core/browser/language_state_unittest.cc @@ -5,6 +5,7 @@ #include "components/translate/core/browser/language_state.h" #include "base/memory/scoped_ptr.h" +#include "components/translate/core/browser/language_state.h" #include "components/translate/core/browser/translate_driver.h" #include "testing/gtest/include/gtest/gtest.h" @@ -14,7 +15,8 @@ class MockTranslateDriver : public TranslateDriver { public: MockTranslateDriver() : on_is_page_translated_changed_called_(false), - on_translate_enabled_changed_called_(false) { + on_translate_enabled_changed_called_(false), + language_state_(this) { } void Reset() { @@ -36,6 +38,10 @@ class MockTranslateDriver : public TranslateDriver { return false; } + virtual LanguageState& GetLanguageState() OVERRIDE { + return language_state_; + } + bool on_is_page_translated_changed_called() const { return on_is_page_translated_changed_called_; } @@ -47,6 +53,7 @@ class MockTranslateDriver : public TranslateDriver { private: bool on_is_page_translated_changed_called_; bool on_translate_enabled_changed_called_; + LanguageState language_state_; DISALLOW_COPY_AND_ASSIGN(MockTranslateDriver); }; diff --git a/components/translate/core/browser/translate_client.h b/components/translate/core/browser/translate_client.h new file mode 100644 index 0000000..6288e79b --- /dev/null +++ b/components/translate/core/browser/translate_client.h @@ -0,0 +1,21 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_CLIENT_H_ +#define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_CLIENT_H_ + +class TranslateDriver; + +// A client interface that needs to be supplied to TranslateManager by the +// embedder. +// +// Each client instance is associated with a given context within which a +// TranslateManager is used (e.g. a single tab). +class TranslateClient { + public: + // Gets the TranslateDriver associated with the client. + virtual TranslateDriver* GetTranslateDriver() = 0; +}; + +#endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_CLIENT_H_ diff --git a/components/translate/core/browser/translate_driver.h b/components/translate/core/browser/translate_driver.h index 00328ad..c1d1cd5 100644 --- a/components/translate/core/browser/translate_driver.h +++ b/components/translate/core/browser/translate_driver.h @@ -5,6 +5,8 @@ #ifndef COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_ #define COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_ +class LanguageState; + // Interface that allows Translate core code to interact with its driver (i.e., // obtain information from it and give information to it). A concrete // implementation must be provided by the driver. @@ -18,6 +20,9 @@ class TranslateDriver { // Called when the page is "translated" state of the page changed. virtual void OnIsPageTranslatedChanged() = 0; + + // Gets the LanguageState associated with the driver. + virtual LanguageState& GetLanguageState() = 0; }; #endif // COMPONENTS_TRANSLATE_CORE_BROWSER_TRANSLATE_DRIVER_H_ diff --git a/tools/gn/secondary/components/translate/BUILD.gn b/tools/gn/secondary/components/translate/BUILD.gn index 6a9882a..04467b2 100644 --- a/tools/gn/secondary/components/translate/BUILD.gn +++ b/tools/gn/secondary/components/translate/BUILD.gn @@ -13,6 +13,7 @@ static_library("translate_core_browser") { "core/browser/translate_accept_languages.h", "core/browser/translate_browser_metrics.cc", "core/browser/translate_browser_metrics.h", + "core/browser/translate_client.h", "core/browser/translate_download_manager.cc", "core/browser/translate_download_manager.h", "core/browser/translate_driver.h", |