Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_
      6 #define COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "base/observer_list.h"
     11 #include "components/translate/core/browser/translate_driver.h"
     12 #include "components/translate/core/common/translate_errors.h"
     13 #include "content/public/browser/web_contents_observer.h"
     14 
     15 namespace content {
     16 class NavigationController;
     17 class WebContents;
     18 }
     19 
     20 namespace translate {
     21 
     22 struct LanguageDetectionDetails;
     23 class TranslateManager;
     24 
     25 // Content implementation of TranslateDriver.
     26 class ContentTranslateDriver : public TranslateDriver,
     27                                public content::WebContentsObserver {
     28  public:
     29 
     30   // The observer for the ContentTranslateDriver.
     31   class Observer {
     32    public:
     33     // Handles when the value of IsPageTranslated is changed.
     34     virtual void OnIsPageTranslatedChanged(content::WebContents* source) {};
     35 
     36     // Handles when the value of translate_enabled is changed.
     37     virtual void OnTranslateEnabledChanged(content::WebContents* source) {};
     38 
     39     // Called when the page language has been determined.
     40     virtual void OnLanguageDetermined(
     41         const translate::LanguageDetectionDetails& details) {};
     42 
     43     // Called when the page has been translated.
     44     virtual void OnPageTranslated(
     45         const std::string& original_lang,
     46         const std::string& translated_lang,
     47         translate::TranslateErrors::Type error_type) {};
     48 
     49    protected:
     50     virtual ~Observer() {}
     51   };
     52 
     53   ContentTranslateDriver(content::NavigationController* nav_controller);
     54   virtual ~ContentTranslateDriver();
     55 
     56   // Adds or Removes observers.
     57   void AddObserver(Observer* observer);
     58   void RemoveObserver(Observer* observer);
     59 
     60   // Number of attempts before waiting for a page to be fully reloaded.
     61   void set_translate_max_reload_attempts(int attempts) {
     62     max_reload_check_attempts_ = attempts;
     63   }
     64 
     65   // Sets the TranslateManager associated with this driver.
     66   void set_translate_manager(TranslateManager* manager) {
     67     translate_manager_ = manager;
     68   }
     69 
     70   // Initiates translation once the page is finished loading.
     71   void InitiateTranslation(const std::string& page_lang, int attempt);
     72 
     73   // TranslateDriver methods.
     74   virtual void OnIsPageTranslatedChanged() OVERRIDE;
     75   virtual void OnTranslateEnabledChanged() OVERRIDE;
     76   virtual bool IsLinkNavigation() OVERRIDE;
     77   virtual void TranslatePage(int page_seq_no,
     78                              const std::string& translate_script,
     79                              const std::string& source_lang,
     80                              const std::string& target_lang) OVERRIDE;
     81   virtual void RevertTranslation(int page_seq_no) OVERRIDE;
     82   virtual bool IsOffTheRecord() OVERRIDE;
     83   virtual const std::string& GetContentsMimeType() OVERRIDE;
     84   virtual const GURL& GetLastCommittedURL() OVERRIDE;
     85   virtual const GURL& GetActiveURL() OVERRIDE;
     86   virtual const GURL& GetVisibleURL() OVERRIDE;
     87   virtual bool HasCurrentPage() OVERRIDE;
     88   virtual void OpenUrlInNewTab(const GURL& url) OVERRIDE;
     89 
     90   // content::WebContentsObserver implementation.
     91   virtual void NavigationEntryCommitted(
     92       const content::LoadCommittedDetails& load_details) OVERRIDE;
     93   virtual void DidNavigateAnyFrame(
     94       const content::LoadCommittedDetails& details,
     95       const content::FrameNavigateParams& params) OVERRIDE;
     96   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     97 
     98   // IPC handlers.
     99   void OnTranslateAssignedSequenceNumber(int page_seq_no);
    100   void OnLanguageDetermined(const LanguageDetectionDetails& details,
    101                             bool page_needs_translation);
    102   void OnPageTranslated(const std::string& original_lang,
    103                         const std::string& translated_lang,
    104                         TranslateErrors::Type error_type);
    105 
    106  private:
    107   // The navigation controller of the tab we are associated with.
    108   content::NavigationController* navigation_controller_;
    109 
    110   TranslateManager* translate_manager_;
    111 
    112   ObserverList<Observer, true> observer_list_;
    113 
    114   // Max number of attempts before checking if a page has been reloaded.
    115   int max_reload_check_attempts_;
    116 
    117   base::WeakPtrFactory<ContentTranslateDriver> weak_pointer_factory_;
    118 
    119   DISALLOW_COPY_AND_ASSIGN(ContentTranslateDriver);
    120 };
    121 
    122 }  // namespace translate
    123 
    124 #endif  // COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_
    125