Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Unified Diff: components/translate/content/browser/content_translate_driver_impl.cc

Issue 2066483004: [Wait to be closed] [Translate] Migrate IPCs to Mojo interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ensure TranslateCallback get run Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/translate/content/browser/content_translate_driver_impl.cc
diff --git a/components/translate/content/browser/content_translate_driver.cc b/components/translate/content/browser/content_translate_driver_impl.cc
similarity index 63%
rename from components/translate/content/browser/content_translate_driver.cc
rename to components/translate/content/browser/content_translate_driver_impl.cc
index 24376c16d711385043017b4f44e6a4e94396375c..0aca86adac3e05693996f3db9d7a24b620dee457 100644
--- a/components/translate/content/browser/content_translate_driver.cc
+++ b/components/translate/content/browser/content_translate_driver_impl.cc
@@ -2,14 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "components/translate/content/browser/content_translate_driver.h"
+#include "components/translate/content/browser/content_translate_driver_impl.h"
#include "base/bind.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
-#include "components/translate/content/common/translate_messages.h"
#include "components/translate/core/browser/translate_download_manager.h"
#include "components/translate/core/browser/translate_manager.h"
#include "content/public/browser/browser_context.h"
@@ -33,28 +32,35 @@ const int kMaxTranslateLoadCheckAttempts = 20;
namespace translate {
-ContentTranslateDriver::ContentTranslateDriver(
+ContentTranslateDriverImpl::ContentTranslateDriverImpl(
content::NavigationController* nav_controller)
: content::WebContentsObserver(nav_controller->GetWebContents()),
navigation_controller_(nav_controller),
translate_manager_(NULL),
max_reload_check_attempts_(kMaxTranslateLoadCheckAttempts),
+ next_page_seq_no_(0),
weak_pointer_factory_(this) {
DCHECK(navigation_controller_);
}
-ContentTranslateDriver::~ContentTranslateDriver() {}
+ContentTranslateDriverImpl::~ContentTranslateDriverImpl() {}
-void ContentTranslateDriver::AddObserver(Observer* observer) {
+void ContentTranslateDriverImpl::BindRequest(
+ mojom::ContentTranslateDriverRequest request) {
+ bindings_.AddBinding(this, std::move(request));
+}
+
+void ContentTranslateDriverImpl::AddObserver(Observer* observer) {
observer_list_.AddObserver(observer);
}
-void ContentTranslateDriver::RemoveObserver(Observer* observer) {
+void ContentTranslateDriverImpl::RemoveObserver(Observer* observer) {
observer_list_.RemoveObserver(observer);
}
-void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang,
- int attempt) {
+void ContentTranslateDriverImpl::InitiateTranslation(
+ const std::string& page_lang,
+ int attempt) {
if (translate_manager_->GetLanguageState().translation_pending())
return;
@@ -66,7 +72,7 @@ void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang,
int backoff = attempt * kMaxTranslateLoadCheckAttempts;
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE,
- base::Bind(&ContentTranslateDriver::InitiateTranslation,
+ base::Bind(&ContentTranslateDriverImpl::InitiateTranslation,
weak_pointer_factory_.GetWeakPtr(), page_lang, attempt + 1),
base::TimeDelta::FromMilliseconds(backoff));
return;
@@ -78,7 +84,7 @@ void ContentTranslateDriver::InitiateTranslation(const std::string& page_lang,
// TranslateDriver methods
-bool ContentTranslateDriver::IsLinkNavigation() {
+bool ContentTranslateDriverImpl::IsLinkNavigation() {
return navigation_controller_ &&
navigation_controller_->GetLastCommittedEntry() &&
ui::PageTransitionCoreTypeIs(
@@ -87,67 +93,70 @@ bool ContentTranslateDriver::IsLinkNavigation() {
ui::PAGE_TRANSITION_LINK);
}
-void ContentTranslateDriver::OnTranslateEnabledChanged() {
+void ContentTranslateDriverImpl::OnTranslateEnabledChanged() {
content::WebContents* web_contents = navigation_controller_->GetWebContents();
- FOR_EACH_OBSERVER(
- Observer, observer_list_, OnTranslateEnabledChanged(web_contents));
+ FOR_EACH_OBSERVER(Observer, observer_list_,
+ OnTranslateEnabledChanged(web_contents));
}
-void ContentTranslateDriver::OnIsPageTranslatedChanged() {
- content::WebContents* web_contents =
- navigation_controller_->GetWebContents();
- FOR_EACH_OBSERVER(
- Observer, observer_list_, OnIsPageTranslatedChanged(web_contents));
+void ContentTranslateDriverImpl::OnIsPageTranslatedChanged() {
+ content::WebContents* web_contents = navigation_controller_->GetWebContents();
+ FOR_EACH_OBSERVER(Observer, observer_list_,
+ OnIsPageTranslatedChanged(web_contents));
}
-void ContentTranslateDriver::TranslatePage(int page_seq_no,
- const std::string& translate_script,
- const std::string& source_lang,
- const std::string& target_lang) {
- content::WebContents* web_contents = navigation_controller_->GetWebContents();
- web_contents->GetMainFrame()->Send(new ChromeFrameMsg_TranslatePage(
- web_contents->GetMainFrame()->GetRoutingID(), page_seq_no,
- translate_script, source_lang, target_lang));
+void ContentTranslateDriverImpl::TranslatePage(
+ int page_seq_no,
+ const std::string& translate_script,
+ const std::string& source_lang,
+ const std::string& target_lang) {
+ auto it = mojo_pages_.find(page_seq_no);
+ if (it == mojo_pages_.end())
+ return; // This page has navigated away.
+
+ it->second->Translate(
+ translate_script, source_lang, target_lang,
+ base::Bind(&ContentTranslateDriverImpl::OnPageTranslated,
+ base::Unretained(this)));
}
-void ContentTranslateDriver::RevertTranslation(int page_seq_no) {
- content::WebContents* web_contents = navigation_controller_->GetWebContents();
- web_contents->GetMainFrame()->Send(new ChromeFrameMsg_RevertTranslation(
- web_contents->GetMainFrame()->GetRoutingID(), page_seq_no));
+void ContentTranslateDriverImpl::RevertTranslation(int page_seq_no) {
+ auto it = mojo_pages_.find(page_seq_no);
+ if (it == mojo_pages_.end())
+ return; // This page has navigated away.
+
+ it->second->RevertTranslation();
}
-bool ContentTranslateDriver::IsOffTheRecord() {
+bool ContentTranslateDriverImpl::IsOffTheRecord() {
return navigation_controller_->GetBrowserContext()->IsOffTheRecord();
}
-const std::string& ContentTranslateDriver::GetContentsMimeType() {
+const std::string& ContentTranslateDriverImpl::GetContentsMimeType() {
return navigation_controller_->GetWebContents()->GetContentsMimeType();
}
-const GURL& ContentTranslateDriver::GetLastCommittedURL() {
+const GURL& ContentTranslateDriverImpl::GetLastCommittedURL() {
return navigation_controller_->GetWebContents()->GetLastCommittedURL();
}
-const GURL& ContentTranslateDriver::GetVisibleURL() {
+const GURL& ContentTranslateDriverImpl::GetVisibleURL() {
return navigation_controller_->GetWebContents()->GetVisibleURL();
}
-bool ContentTranslateDriver::HasCurrentPage() {
+bool ContentTranslateDriverImpl::HasCurrentPage() {
return (navigation_controller_->GetLastCommittedEntry() != NULL);
}
-void ContentTranslateDriver::OpenUrlInNewTab(const GURL& url) {
- content::OpenURLParams params(url,
- content::Referrer(),
- NEW_FOREGROUND_TAB,
- ui::PAGE_TRANSITION_LINK,
- false);
+void ContentTranslateDriverImpl::OpenUrlInNewTab(const GURL& url) {
+ content::OpenURLParams params(url, content::Referrer(), NEW_FOREGROUND_TAB,
+ ui::PAGE_TRANSITION_LINK, false);
navigation_controller_->GetWebContents()->OpenURL(params);
}
// content::WebContentsObserver methods
-void ContentTranslateDriver::NavigationEntryCommitted(
+void ContentTranslateDriverImpl::NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) {
// Check whether this is a reload: When doing a page reload, the
// TranslateLanguageDetermined IPC is not sent so the translation needs to be
@@ -191,13 +200,13 @@ void ContentTranslateDriver::NavigationEntryCommitted(
// an infobar, it must be done after that.
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
- base::Bind(&ContentTranslateDriver::InitiateTranslation,
+ base::Bind(&ContentTranslateDriverImpl::InitiateTranslation,
weak_pointer_factory_.GetWeakPtr(),
translate_manager_->GetLanguageState().original_language(),
0));
}
-void ContentTranslateDriver::DidNavigateAnyFrame(
+void ContentTranslateDriverImpl::DidNavigateAnyFrame(
content::RenderFrameHost* render_frame_host,
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
@@ -210,29 +219,36 @@ void ContentTranslateDriver::DidNavigateAnyFrame(
details.is_in_page, details.is_main_frame, reload);
}
-bool ContentTranslateDriver::OnMessageReceived(
- const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(ContentTranslateDriver, message)
- IPC_MESSAGE_HANDLER(ChromeFrameHostMsg_TranslateAssignedSequenceNumber,
- OnTranslateAssignedSequenceNumber)
- IPC_MESSAGE_HANDLER(ChromeFrameHostMsg_TranslateLanguageDetermined,
- OnLanguageDetermined)
- IPC_MESSAGE_HANDLER(ChromeFrameHostMsg_PageTranslated, OnPageTranslated)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
+void ContentTranslateDriverImpl::OnPageTranslated(
groby-ooo-7-16 2016/07/11 22:34:43 Is there a reason this moved up here? (Keeping it
leonhsl(Using Gerrit) 2016/07/12 02:48:17 Ah, I don't remember why it's moved here. I'll mov
leonhsl(Using Gerrit) 2016/07/13 09:56:18 Done.
+ bool cancelled,
+ mojo::String original_lang,
+ mojo::String translated_lang,
+ TranslateErrors::Type error_type) {
+ if (cancelled)
+ return;
+
+ translate_manager_->PageTranslated(original_lang, translated_lang,
+ error_type);
+ FOR_EACH_OBSERVER(
+ Observer, observer_list_,
+ OnPageTranslated(original_lang, translated_lang, error_type));
}
-void ContentTranslateDriver::OnTranslateAssignedSequenceNumber(
- int page_seq_no) {
- translate_manager_->set_current_seq_no(page_seq_no);
+void ContentTranslateDriverImpl::OnPageAway(int page_seq_no) {
groby-ooo-7-16 2016/07/11 22:34:43 Do we actually still need the concept of page sequ
leonhsl(Using Gerrit) 2016/07/12 02:48:17 I think TranslateManager also serves IOSTranslateD
+ mojo_pages_.erase(page_seq_no);
}
-void ContentTranslateDriver::OnLanguageDetermined(
+// mojom::ContentTranslateDriver implementation.
+void ContentTranslateDriverImpl::NewPage(
groby-ooo-7-16 2016/07/11 22:34:43 I take it all functions modifying/reading |mojo_pa
leonhsl(Using Gerrit) 2016/07/12 02:48:17 Yeah, mojo is thread-hostile, all the mojo calls a
+ mojom::PagePtr page,
const LanguageDetectionDetails& details,
bool page_needs_translation) {
+ mojo_pages_[++next_page_seq_no_] = std::move(page);
+ mojo_pages_[next_page_seq_no_].set_connection_error_handler(
groby-ooo-7-16 2016/07/11 22:34:43 I'm new to this mojo thing, so possibly odd questi
leonhsl(Using Gerrit) 2016/07/12 02:48:17 Yeah it's right. TranslateHelper will close the co
+ base::Bind(&ContentTranslateDriverImpl::OnPageAway,
+ base::Unretained(this), next_page_seq_no_));
groby-ooo-7-16 2016/07/11 22:34:43 Are we guaranteed that |this| will be alive until
leonhsl(Using Gerrit) 2016/07/12 02:48:17 Yeah this is guaranteed. Because destroying |this|
+ translate_manager_->set_current_seq_no(next_page_seq_no_);
+
translate_manager_->GetLanguageState().LanguageDetermined(
details.adopted_language, page_needs_translation);
@@ -242,16 +258,4 @@ void ContentTranslateDriver::OnLanguageDetermined(
FOR_EACH_OBSERVER(Observer, observer_list_, OnLanguageDetermined(details));
}
-void ContentTranslateDriver::OnPageTranslated(
- const std::string& original_lang,
- const std::string& translated_lang,
- TranslateErrors::Type error_type) {
- translate_manager_->PageTranslated(
- original_lang, translated_lang, error_type);
- FOR_EACH_OBSERVER(
- Observer,
- observer_list_,
- OnPageTranslated(original_lang, translated_lang, error_type));
-}
-
} // namespace translate

Powered by Google App Engine
This is Rietveld 408576698