Home | History | Annotate | Download | only in translate
      1 // Copyright (c) 2011 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 #include "chrome/browser/translate/translate_tab_helper.h"
      6 
      7 #include "chrome/browser/chrome_notification_types.h"
      8 #include "chrome/browser/translate/page_translated_details.h"
      9 #include "chrome/common/render_messages.h"
     10 #include "chrome/common/translate/language_detection_details.h"
     11 #include "content/public/browser/notification_service.h"
     12 #include "content/public/browser/web_contents.h"
     13 
     14 using content::WebContents;
     15 
     16 DEFINE_WEB_CONTENTS_USER_DATA_KEY(TranslateTabHelper);
     17 
     18 TranslateTabHelper::TranslateTabHelper(WebContents* web_contents)
     19     : content::WebContentsObserver(web_contents),
     20       language_state_(&web_contents->GetController()) {
     21 }
     22 
     23 TranslateTabHelper::~TranslateTabHelper() {
     24 }
     25 
     26 bool TranslateTabHelper::OnMessageReceived(const IPC::Message& message) {
     27   bool handled = true;
     28   IPC_BEGIN_MESSAGE_MAP(TranslateTabHelper, message)
     29     IPC_MESSAGE_HANDLER(ChromeViewHostMsg_TranslateLanguageDetermined,
     30                         OnLanguageDetermined)
     31     IPC_MESSAGE_HANDLER(ChromeViewHostMsg_PageTranslated, OnPageTranslated)
     32     IPC_MESSAGE_UNHANDLED(handled = false)
     33   IPC_END_MESSAGE_MAP()
     34 
     35   return handled;
     36 }
     37 
     38 void TranslateTabHelper::DidNavigateAnyFrame(
     39     const content::LoadCommittedDetails& details,
     40     const content::FrameNavigateParams& params) {
     41   // Let the LanguageState clear its state.
     42   language_state_.DidNavigate(details);
     43 }
     44 
     45 void TranslateTabHelper::OnLanguageDetermined(
     46     const LanguageDetectionDetails& details,
     47     bool page_needs_translation) {
     48   language_state_.LanguageDetermined(details.adopted_language,
     49                                      page_needs_translation);
     50 
     51   content::NotificationService::current()->Notify(
     52       chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
     53       content::Source<WebContents>(web_contents()),
     54       content::Details<const LanguageDetectionDetails>(&details));
     55 }
     56 
     57 void TranslateTabHelper::OnPageTranslated(int32 page_id,
     58                                           const std::string& original_lang,
     59                                           const std::string& translated_lang,
     60                                           TranslateErrors::Type error_type) {
     61   language_state_.SetCurrentLanguage(translated_lang);
     62   language_state_.set_translation_pending(false);
     63   PageTranslatedDetails details;
     64   details.source_language = original_lang;
     65   details.target_language = translated_lang;
     66   details.error_type = error_type;
     67   content::NotificationService::current()->Notify(
     68       chrome::NOTIFICATION_PAGE_TRANSLATED,
     69       content::Source<WebContents>(web_contents()),
     70       content::Details<PageTranslatedDetails>(&details));
     71 }
     72