summaryrefslogtreecommitdiffstats
path: root/components/translate
diff options
context:
space:
mode:
authordroger <droger@chromium.org>2014-09-16 08:37:41 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-16 15:38:47 +0000
commit38f0d1063fefeba088320c4932c51061f0922f74 (patch)
treec7a284e077a50705e043cad7223b27a7e35473c9 /components/translate
parentc536893d830023b8ef0f399e6daacd47da9c020a (diff)
downloadchromium_src-38f0d1063fefeba088320c4932c51061f0922f74.zip
chromium_src-38f0d1063fefeba088320c4932c51061f0922f74.tar.gz
chromium_src-38f0d1063fefeba088320c4932c51061f0922f74.tar.bz2
Move Translate browser-side IPC handling to the component.
This CL moves a bit of translate logic from chrome/ to the translate component. Some IPC messages are still forwarded to chrome (through ContentTranslateDriver::Observer) because of translate notifications. This is temporary though, because once translate notifications are removed, ChromeTranslateClient will no longer need to be an Observer. Another motivation for this change is that the renderer-side of translate IPC (TranslateHelper) is moving to the component (in another CL), and thus the browser-side has to move too for consistency (this CL). BUG=335087 TBR=msw Review URL: https://codereview.chromium.org/564743002 Cr-Commit-Position: refs/heads/master@{#295073}
Diffstat (limited to 'components/translate')
-rw-r--r--components/translate/content/browser/content_translate_driver.cc64
-rw-r--r--components/translate/content/browser/content_translate_driver.h33
2 files changed, 83 insertions, 14 deletions
diff --git a/components/translate/content/browser/content_translate_driver.cc b/components/translate/content/browser/content_translate_driver.cc
index d135762..ffdd17d 100644
--- a/components/translate/content/browser/content_translate_driver.cc
+++ b/components/translate/content/browser/content_translate_driver.cc
@@ -35,7 +35,6 @@ ContentTranslateDriver::ContentTranslateDriver(
: content::WebContentsObserver(nav_controller->GetWebContents()),
navigation_controller_(nav_controller),
translate_manager_(NULL),
- observer_(NULL),
max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts),
weak_pointer_factory_(this) {
DCHECK(navigation_controller_);
@@ -43,6 +42,14 @@ ContentTranslateDriver::ContentTranslateDriver(
ContentTranslateDriver::~ContentTranslateDriver() {}
+void ContentTranslateDriver::AddObserver(Observer* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void ContentTranslateDriver::RemoveObserver(Observer* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang,
int attempt) {
if (translate_manager_->GetLanguageState().translation_pending())
@@ -77,19 +84,16 @@ bool ContentTranslateDriver::IsLinkNavigation() {
}
void ContentTranslateDriver::OnTranslateEnabledChanged() {
- if (observer_) {
- content::WebContents* web_contents =
- navigation_controller_->GetWebContents();
- observer_->OnTranslateEnabledChanged(web_contents);
- }
+ content::WebContents* web_contents = navigation_controller_->GetWebContents();
+ FOR_EACH_OBSERVER(
+ Observer, observer_list_, OnTranslateEnabledChanged(web_contents));
}
void ContentTranslateDriver::OnIsPageTranslatedChanged() {
- if (observer_) {
content::WebContents* web_contents =
navigation_controller_->GetWebContents();
- observer_->OnIsPageTranslatedChanged(web_contents);
- }
+ FOR_EACH_OBSERVER(
+ Observer, observer_list_, OnIsPageTranslatedChanged(web_contents));
}
void ContentTranslateDriver::TranslatePage(int page_seq_no,
@@ -212,4 +216,46 @@ void ContentTranslateDriver::DidNavigateAnyFrame(
details.is_in_page, details.is_main_frame, reload);
}
+bool ContentTranslateDriver::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(ContentTranslateDriver, message)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateAssignedSequenceNumber,
+ OnTranslateAssignedSequenceNumber)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateLanguageDetermined,
+ OnLanguageDetermined)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PageTranslated, OnPageTranslated)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void ContentTranslateDriver::OnTranslateAssignedSequenceNumber(
+ int page_seq_no) {
+ translate_manager_->set_current_seq_no(page_seq_no);
+}
+
+void ContentTranslateDriver::OnLanguageDetermined(
+ const LanguageDetectionDetails& details,
+ bool page_needs_translation) {
+ translate_manager_->GetLanguageState().LanguageDetermined(
+ details.adopted_language, page_needs_translation);
+
+ if (web_contents())
+ translate_manager_->InitiateTranslation(details.adopted_language);
+
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetermined(details));
+}
+
+void ContentTranslateDriver::OnPageTranslated(
+ const std::string& original_lang,
+ const std::string& translated_lang,
+ TranslateErrors::Type error_type) {
+ translate_manager_->PageTranslated(
+ original_lang, translated_lang, error_type);
+ FOR_EACH_OBSERVER(
+ Observer,
+ observer_list_,
+ OnPageTranslated(original_lang, translated_lang, error_type));
+}
+
} // namespace translate
diff --git a/components/translate/content/browser/content_translate_driver.h b/components/translate/content/browser/content_translate_driver.h
index d9ef2c2..ea77e42 100644
--- a/components/translate/content/browser/content_translate_driver.h
+++ b/components/translate/content/browser/content_translate_driver.h
@@ -7,7 +7,9 @@
#include "base/basictypes.h"
#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
#include "components/translate/core/browser/translate_driver.h"
+#include "components/translate/core/common/translate_errors.h"
#include "content/public/browser/web_contents_observer.h"
namespace content {
@@ -17,6 +19,7 @@ class WebContents;
namespace translate {
+struct LanguageDetectionDetails;
class TranslateManager;
// Content implementation of TranslateDriver.
@@ -28,10 +31,20 @@ class ContentTranslateDriver : public TranslateDriver,
class Observer {
public:
// Handles when the value of IsPageTranslated is changed.
- virtual void OnIsPageTranslatedChanged(content::WebContents* source) = 0;
+ virtual void OnIsPageTranslatedChanged(content::WebContents* source) {};
// Handles when the value of translate_enabled is changed.
- virtual void OnTranslateEnabledChanged(content::WebContents* source) = 0;
+ virtual void OnTranslateEnabledChanged(content::WebContents* source) {};
+
+ // Called when the page language has been determined.
+ virtual void OnLanguageDetermined(
+ const translate::LanguageDetectionDetails& details) {};
+
+ // Called when the page has been translated.
+ virtual void OnPageTranslated(
+ const std::string& original_lang,
+ const std::string& translated_lang,
+ translate::TranslateErrors::Type error_type) {};
protected:
virtual ~Observer() {}
@@ -40,8 +53,9 @@ class ContentTranslateDriver : public TranslateDriver,
ContentTranslateDriver(content::NavigationController* nav_controller);
virtual ~ContentTranslateDriver();
- // Sets the Observer. Calling this method is optional.
- void set_observer(Observer* observer) { observer_ = observer; }
+ // Adds or Removes observers.
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
// Number of attempts before waiting for a page to be fully reloaded.
void set_translate_max_reload_attempts(int attempts) {
@@ -79,6 +93,15 @@ class ContentTranslateDriver : public TranslateDriver,
virtual void DidNavigateAnyFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) OVERRIDE;
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ // IPC handlers.
+ void OnTranslateAssignedSequenceNumber(int page_seq_no);
+ void OnLanguageDetermined(const LanguageDetectionDetails& details,
+ bool page_needs_translation);
+ void OnPageTranslated(const std::string& original_lang,
+ const std::string& translated_lang,
+ TranslateErrors::Type error_type);
private:
// The navigation controller of the tab we are associated with.
@@ -86,7 +109,7 @@ class ContentTranslateDriver : public TranslateDriver,
TranslateManager* translate_manager_;
- Observer* observer_;
+ ObserverList<Observer, true> observer_list_;
// Max number of attempts before checking if a page has been reloaded.
int max_reload_check_attempts_;