| Index: components/translate/content/browser/content_translate_driver.cc
|
| diff --git a/components/translate/content/browser/content_translate_driver.cc b/components/translate/content/browser/content_translate_driver.cc
|
| index d1357620d1a5df6fe7bfc86091139ec0819156e0..ffdd17d157d746047b138b1164692a1302469e78 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
|
|
|