15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/basictypes.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/weak_ptr.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/observer_list.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/browser/translate_driver.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/translate/core/common/translate_errors.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/web_contents_observer.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NavigationController; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WebContents; 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace translate { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct LanguageDetectionDetails; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TranslateManager; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Content implementation of TranslateDriver. 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ContentTranslateDriver : public TranslateDriver, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public content::WebContentsObserver { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The observer for the ContentTranslateDriver. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class Observer { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Handles when the value of IsPageTranslated is changed. 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnIsPageTranslatedChanged(content::WebContents* source) {}; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Handles when the value of translate_enabled is changed. 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnTranslateEnabledChanged(content::WebContents* source) {}; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Called when the page language has been determined. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnLanguageDetermined( 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const translate::LanguageDetectionDetails& details) {}; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Called when the page has been translated. 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnPageTranslated( 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& original_lang, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& translated_lang, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci translate::TranslateErrors::Type error_type) {}; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~Observer() {} 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ContentTranslateDriver(content::NavigationController* nav_controller); 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~ContentTranslateDriver(); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Adds or Removes observers. 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void AddObserver(Observer* observer); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RemoveObserver(Observer* observer); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Number of attempts before waiting for a page to be fully reloaded. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_translate_max_reload_attempts(int attempts) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_reload_check_attempts_ = attempts; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Sets the TranslateManager associated with this driver. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void set_translate_manager(TranslateManager* manager) { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci translate_manager_ = manager; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Initiates translation once the page is finished loading. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void InitiateTranslation(const std::string& page_lang, int attempt); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // TranslateDriver methods. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnIsPageTranslatedChanged() OVERRIDE; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnTranslateEnabledChanged() OVERRIDE; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsLinkNavigation() OVERRIDE; 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void TranslatePage(int page_seq_no, 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& translate_script, 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& source_lang, 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& target_lang) OVERRIDE; 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RevertTranslation(int page_seq_no) OVERRIDE; 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool IsOffTheRecord() OVERRIDE; 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual const std::string& GetContentsMimeType() OVERRIDE; 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual const GURL& GetLastCommittedURL() OVERRIDE; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual const GURL& GetActiveURL() OVERRIDE; 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual const GURL& GetVisibleURL() OVERRIDE; 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool HasCurrentPage() OVERRIDE; 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OpenUrlInNewTab(const GURL& url) OVERRIDE; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // content::WebContentsObserver implementation. 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void NavigationEntryCommitted( 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const content::LoadCommittedDetails& load_details) OVERRIDE; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidNavigateAnyFrame( 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const content::LoadCommittedDetails& details, 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const content::FrameNavigateParams& params) OVERRIDE; 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // IPC handlers. 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnTranslateAssignedSequenceNumber(int page_seq_no); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnLanguageDetermined(const LanguageDetectionDetails& details, 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool page_needs_translation); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnPageTranslated(const std::string& original_lang, 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& translated_lang, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TranslateErrors::Type error_type); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The navigation controller of the tab we are associated with. 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::NavigationController* navigation_controller_; 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TranslateManager* translate_manager_; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ObserverList<Observer, true> observer_list_; 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Max number of attempts before checking if a page has been reloaded. 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int max_reload_check_attempts_; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<ContentTranslateDriver> weak_pointer_factory_; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContentTranslateDriver); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace translate 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_ 125