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

Unified Diff: content/browser/loader/mojo_async_resource_handler.cc

Issue 2496193002: Implement transfer navigation with mojo (Closed)
Patch Set: fix Created 4 years, 1 month 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: content/browser/loader/mojo_async_resource_handler.cc
diff --git a/content/browser/loader/mojo_async_resource_handler.cc b/content/browser/loader/mojo_async_resource_handler.cc
index 1288fe45136fb67142fa4ca4383a058c83eb14e9..958656e520a03207d891f0cdac6d0a2cd22d1d69 100644
--- a/content/browser/loader/mojo_async_resource_handler.cc
+++ b/content/browser/loader/mojo_async_resource_handler.cc
@@ -111,7 +111,8 @@ MojoAsyncResourceHandler::MojoAsyncResourceHandler(
: ResourceHandler(request),
rdh_(rdh),
binding_(this, std::move(mojo_request)),
- url_loader_client_(std::move(url_loader_client)) {
+ url_loader_client_(std::move(url_loader_client)),
+ weak_factory_(this) {
DCHECK(url_loader_client_);
InitializeResourceBufferConstants();
// This unretained pointer is safe, because |binding_| is owned by |this| and
@@ -125,6 +126,12 @@ MojoAsyncResourceHandler::~MojoAsyncResourceHandler() {
rdh_->FinishedWithResourcesForRequest(request());
}
+MojoAsyncResourceHandler::TransferCallback
+MojoAsyncResourceHandler::GetTransferCallback() {
+ return base::Bind(&MojoAsyncResourceHandler::OnTransfer,
+ weak_factory_.GetWeakPtr());
+}
+
bool MojoAsyncResourceHandler::OnRequestRedirected(
const net::RedirectInfo& redirect_info,
ResourceResponse* response,
@@ -438,4 +445,19 @@ void MojoAsyncResourceHandler::ReportBadMessage(const std::string& error) {
mojo::ReportBadMessage(error);
}
+void MojoAsyncResourceHandler::OnTransfer(
+ mojom::URLLoaderAssociatedRequest mojo_request,
+ mojom::URLLoaderClientAssociatedPtr url_loader_client) {
+ if (!url_loader_client) {
+ // Resumes the request without transferring it to a new process.
+ return;
+ }
+
+ binding_.Unbind();
+ binding_.Bind(std::move(mojo_request));
+ binding_.set_connection_error_handler(
+ base::Bind(&MojoAsyncResourceHandler::Cancel, base::Unretained(this)));
+ url_loader_client_ = std::move(url_loader_client);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698