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 18ContentTranslateDriver::ContentTranslateDriver( 19 content::NavigationController* nav_controller) 20 : navigation_controller_(nav_controller), 21 observer_(NULL) { 22 DCHECK(navigation_controller_); 23} 24 25ContentTranslateDriver::~ContentTranslateDriver() {} 26 27// TranslateDriver methods 28 29bool ContentTranslateDriver::IsLinkNavigation() { 30 return navigation_controller_ && navigation_controller_->GetActiveEntry() && 31 navigation_controller_->GetActiveEntry()->GetTransitionType() == 32 content::PAGE_TRANSITION_LINK; 33} 34 35void ContentTranslateDriver::OnTranslateEnabledChanged() { 36 if (observer_) { 37 content::WebContents* web_contents = 38 navigation_controller_->GetWebContents(); 39 observer_->OnTranslateEnabledChanged(web_contents); 40 } 41} 42 43void ContentTranslateDriver::OnIsPageTranslatedChanged() { 44 if (observer_) { 45 content::WebContents* web_contents = 46 navigation_controller_->GetWebContents(); 47 observer_->OnIsPageTranslatedChanged(web_contents); 48 } 49} 50 51void 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 69void 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 81bool ContentTranslateDriver::IsOffTheRecord() { 82 return navigation_controller_->GetBrowserContext()->IsOffTheRecord(); 83} 84 85const std::string& ContentTranslateDriver::GetContentsMimeType() { 86 return navigation_controller_->GetWebContents()->GetContentsMimeType(); 87} 88 89const GURL& ContentTranslateDriver::GetLastCommittedURL() { 90 return navigation_controller_->GetWebContents()->GetLastCommittedURL(); 91} 92 93const GURL& ContentTranslateDriver::GetActiveURL() { 94 content::NavigationEntry* entry = navigation_controller_->GetActiveEntry(); 95 if (!entry) 96 return GURL::EmptyGURL(); 97 return entry->GetURL(); 98} 99 100const GURL& ContentTranslateDriver::GetVisibleURL() { 101 return navigation_controller_->GetWebContents()->GetVisibleURL(); 102} 103 104bool ContentTranslateDriver::HasCurrentPage() { 105 return (navigation_controller_->GetActiveEntry() != NULL); 106} 107 108int ContentTranslateDriver::GetCurrentPageID() { 109 DCHECK(HasCurrentPage()); 110 content::NavigationEntry* entry = navigation_controller_->GetActiveEntry(); 111 return entry->GetPageID(); 112} 113 114void 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