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