blob: 4acb00d3d5fc7907c0525def4f0c91980b7068b2 [file] [log] [blame]
// 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_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_
#define COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_
#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 {
class NavigationController;
class WebContents;
}
namespace translate {
struct LanguageDetectionDetails;
class TranslateManager;
// Content implementation of TranslateDriver.
class ContentTranslateDriver : public TranslateDriver,
public content::WebContentsObserver {
public:
// The observer for the ContentTranslateDriver.
class Observer {
public:
// Handles when the value of IsPageTranslated is changed.
virtual void OnIsPageTranslatedChanged(content::WebContents* source) {};
// Handles when the value of translate_enabled is changed.
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() {}
};
ContentTranslateDriver(content::NavigationController* nav_controller);
~ContentTranslateDriver() override;
// 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) {
max_reload_check_attempts_ = attempts;
}
// Sets the TranslateManager associated with this driver.
void set_translate_manager(TranslateManager* manager) {
translate_manager_ = manager;
}
// Initiates translation once the page is finished loading.
void InitiateTranslation(const std::string& page_lang, int attempt);
// TranslateDriver methods.
void OnIsPageTranslatedChanged() override;
void OnTranslateEnabledChanged() override;
bool IsLinkNavigation() override;
void TranslatePage(int page_seq_no,
const std::string& translate_script,
const std::string& source_lang,
const std::string& target_lang) override;
void RevertTranslation(int page_seq_no) override;
bool IsOffTheRecord() override;
const std::string& GetContentsMimeType() override;
const GURL& GetLastCommittedURL() override;
const GURL& GetActiveURL() override;
const GURL& GetVisibleURL() override;
bool HasCurrentPage() override;
void OpenUrlInNewTab(const GURL& url) override;
// content::WebContentsObserver implementation.
void NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) override;
void DidNavigateAnyFrame(content::RenderFrameHost* render_frame_host,
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) override;
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.
content::NavigationController* navigation_controller_;
TranslateManager* translate_manager_;
ObserverList<Observer, true> observer_list_;
// Max number of attempts before checking if a page has been reloaded.
int max_reload_check_attempts_;
base::WeakPtrFactory<ContentTranslateDriver> weak_pointer_factory_;
DISALLOW_COPY_AND_ASSIGN(ContentTranslateDriver);
};
} // namespace translate
#endif // COMPONENTS_TRANSLATE_CONTENT_BROWSER_CONTENT_TRANSLATE_DRIVER_H_