summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordroger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 15:42:57 +0000
committerdroger@chromium.org <droger@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-18 15:42:57 +0000
commit7aa5fe5abe8ee6c59f4a0ad8e5cac1701c4c9af2 (patch)
treee43bdd2dc072cd0b08db2416f9cc1a32e562d923
parent6c6325917085a2523fc4e23a851861697e0b66f5 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/translate/translate_manager.cc22
-rw-r--r--chrome/browser/translate/translate_manager.h4
-rw-r--r--chrome/browser/translate/translate_tab_helper.cc12
-rw-r--r--chrome/browser/translate/translate_tab_helper.h7
-rw-r--r--components/translate.gypi1
-rw-r--r--components/translate/content/browser/content_translate_driver.cc4
-rw-r--r--components/translate/content/browser/content_translate_driver.h8
-rw-r--r--components/translate/core/browser/language_state_unittest.cc9
-rw-r--r--components/translate/core/browser/translate_client.h21
-rw-r--r--components/translate/core/browser/translate_driver.h5
-rw-r--r--tools/gn/secondary/components/translate/BUILD.gn1
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",