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