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 #include "components/translate/content/browser/content_translate_driver.h"
      6 
      7 #include "base/logging.h"
      8 #include "components/translate/content/common/translate_messages.h"
      9 #include "content/public/browser/browser_context.h"
     10 #include "content/public/browser/navigation_controller.h"
     11 #include "content/public/browser/navigation_entry.h"
     12 #include "content/public/browser/page_navigator.h"
     13 #include "content/public/browser/render_view_host.h"
     14 #include "content/public/browser/web_contents.h"
     15 #include "content/public/common/referrer.h"
     16 #include "url/gurl.h"
     17 
     18 ContentTranslateDriver::ContentTranslateDriver(
     19     content::NavigationController* nav_controller)
     20     : navigation_controller_(nav_controller),
     21       observer_(NULL) {
     22   DCHECK(navigation_controller_);
     23 }
     24 
     25 ContentTranslateDriver::~ContentTranslateDriver() {}
     26 
     27 // TranslateDriver methods
     28 
     29 bool ContentTranslateDriver::IsLinkNavigation() {
     30   return navigation_controller_ && navigation_controller_->GetActiveEntry() &&
     31          navigation_controller_->GetActiveEntry()->GetTransitionType() ==
     32              content::PAGE_TRANSITION_LINK;
     33 }
     34 
     35 void ContentTranslateDriver::OnTranslateEnabledChanged() {
     36   if (observer_) {
     37     content::WebContents* web_contents =
     38         navigation_controller_->GetWebContents();
     39     observer_->OnTranslateEnabledChanged(web_contents);
     40   }
     41 }
     42 
     43 void ContentTranslateDriver::OnIsPageTranslatedChanged() {
     44   if (observer_) {
     45     content::WebContents* web_contents =
     46         navigation_controller_->GetWebContents();
     47     observer_->OnIsPageTranslatedChanged(web_contents);
     48   }
     49 }
     50 
     51 void ContentTranslateDriver::TranslatePage(const std::string& translate_script,
     52                                            const std::string& source_lang,
     53                                            const std::string& target_lang) {
     54   content::NavigationEntry* entry = navigation_controller_->GetActiveEntry();
     55   if (!entry) {
     56     NOTREACHED();
     57     return;
     58   }
     59 
     60   content::WebContents* web_contents = navigation_controller_->GetWebContents();
     61   web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage(
     62       web_contents->GetRenderViewHost()->GetRoutingID(),
     63       entry->GetPageID(),
     64       translate_script,
     65       source_lang,
     66       target_lang));
     67 }
     68 
     69 void ContentTranslateDriver::RevertTranslation() {
     70   content::NavigationEntry* entry = navigation_controller_->GetActiveEntry();
     71   if (!entry) {
     72     NOTREACHED();
     73     return;
     74   }
     75 
     76   content::WebContents* web_contents = navigation_controller_->GetWebContents();
     77   web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation(
     78       web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID()));
     79 }
     80 
     81 bool ContentTranslateDriver::IsOffTheRecord() {
     82   return navigation_controller_->GetBrowserContext()->IsOffTheRecord();
     83 }
     84 
     85 const std::string& ContentTranslateDriver::GetContentsMimeType() {
     86   return navigation_controller_->GetWebContents()->GetContentsMimeType();
     87 }
     88 
     89 const GURL& ContentTranslateDriver::GetLastCommittedURL() {
     90   return navigation_controller_->GetWebContents()->GetLastCommittedURL();
     91 }
     92 
     93 const GURL& ContentTranslateDriver::GetActiveURL() {
     94   content::NavigationEntry* entry = navigation_controller_->GetActiveEntry();
     95   if (!entry)
     96     return GURL::EmptyGURL();
     97   return entry->GetURL();
     98 }
     99 
    100 const GURL& ContentTranslateDriver::GetVisibleURL() {
    101   return navigation_controller_->GetWebContents()->GetVisibleURL();
    102 }
    103 
    104 bool ContentTranslateDriver::HasCurrentPage() {
    105   return (navigation_controller_->GetActiveEntry() != NULL);
    106 }
    107 
    108 int ContentTranslateDriver::GetCurrentPageID() {
    109   DCHECK(HasCurrentPage());
    110   content::NavigationEntry* entry = navigation_controller_->GetActiveEntry();
    111   return entry->GetPageID();
    112 }
    113 
    114 void ContentTranslateDriver::OpenUrlInNewTab(const GURL& url) {
    115   content::OpenURLParams params(url,
    116                                 content::Referrer(),
    117                                 NEW_FOREGROUND_TAB,
    118                                 content::PAGE_TRANSITION_LINK,
    119                                 false);
    120   navigation_controller_->GetWebContents()->OpenURL(params);
    121 }
    122