Index: components/translate/content/browser/content_translate_driver.h |
diff --git a/components/translate/content/browser/content_translate_driver.h b/components/translate/content/browser/content_translate_driver.h |
index 685f8e61daadc6b5762f65103605a59ac2960c2d..a6a9faa7bdabbf7fc71b3a08cc74112a0e2c0f5c 100644 |
--- a/components/translate/content/browser/content_translate_driver.h |
+++ b/components/translate/content/browser/content_translate_driver.h |
@@ -5,12 +5,16 @@ |
#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_ |
#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_ |
+#include <map> |
+ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
+#include "components/translate/content/common/translate.mojom.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" |
+#include "mojo/public/cpp/bindings/binding_set.h" |
namespace content { |
class NavigationController; |
@@ -22,12 +26,11 @@ namespace translate { |
struct LanguageDetectionDetails; |
class TranslateManager; |
- |
// Content implementation of TranslateDriver. |
class ContentTranslateDriver : public TranslateDriver, |
- public content::WebContentsObserver { |
+ public content::WebContentsObserver, |
+ public mojom::ContentTranslateDriver { |
public: |
- |
// The observer for the ContentTranslateDriver. |
class Observer { |
public: |
@@ -51,9 +54,12 @@ class ContentTranslateDriver : public TranslateDriver, |
virtual ~Observer() {} |
}; |
- ContentTranslateDriver(content::NavigationController* nav_controller); |
+ explicit ContentTranslateDriver( |
+ content::NavigationController* nav_controller); |
~ContentTranslateDriver() override; |
+ void BindRequest(mojom::ContentTranslateDriverRequest request); |
+ |
// Adds or Removes observers. |
void AddObserver(Observer* observer); |
void RemoveObserver(Observer* observer); |
@@ -93,18 +99,20 @@ class ContentTranslateDriver : public TranslateDriver, |
void DidNavigateAnyFrame(content::RenderFrameHost* render_frame_host, |
const content::LoadCommittedDetails& details, |
const content::FrameNavigateParams& params) override; |
- bool OnMessageReceived(const IPC::Message& message, |
- content::RenderFrameHost* render_frame_host) 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, |
+ |
+ void OnPageTranslated(bool cancelled, |
+ const std::string& original_lang, |
const std::string& translated_lang, |
TranslateErrors::Type error_type); |
+ // mojom::ContentTranslateDriver implementation. |
+ void RegisterPage(mojom::PagePtr page, |
+ const LanguageDetectionDetails& details, |
+ bool page_needs_translation) override; |
+ |
private: |
+ void OnPageAway(int page_seq_no); |
+ |
// The navigation controller of the tab we are associated with. |
content::NavigationController* navigation_controller_; |
@@ -115,6 +123,14 @@ class ContentTranslateDriver : public TranslateDriver, |
// Max number of attempts before checking if a page has been reloaded. |
int max_reload_check_attempts_; |
+ // Records mojo connections with all current alive pages. |
+ int next_page_seq_no_; |
+ std::map<int, mojom::PagePtr> pages_; |
+ |
+ // ContentTranslateDriver is singleton per web contents , |
+ // serve for multiple render frames. |
+ mojo::BindingSet<mojom::ContentTranslateDriver> bindings_; |
+ |
base::WeakPtrFactory<ContentTranslateDriver> weak_pointer_factory_; |
DISALLOW_COPY_AND_ASSIGN(ContentTranslateDriver); |