Commit f56bd5f1 authored by Minggang Wang's avatar Minggang Wang Committed by Commit Bot

Replace the old Mojo types with the new Mojo types for MimeSniffingURLLoader

This CL converts old Mojo types used by MimeSniffingURLLoader and its unit
test to new Mojo types.

Bug: 955171
Change-Id: I142abf816370adba3ad44fa26cbaf0e86a1e61c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1817956Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Commit-Queue: Minggang Wang <minggang.wang@intel.com>
Cr-Commit-Position: refs/heads/master@{#700184}
parent adb3068a
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "content/common/mime_sniffing_throttle.h" #include "content/common/mime_sniffing_throttle.h"
#include "content/common/mime_sniffing_url_loader.h" #include "content/common/mime_sniffing_url_loader.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "net/base/mime_sniffer.h" #include "net/base/mime_sniffer.h"
namespace content { namespace content {
...@@ -37,19 +39,19 @@ void MimeSniffingThrottle::WillProcessResponse( ...@@ -37,19 +39,19 @@ void MimeSniffingThrottle::WillProcessResponse(
// Pause the response until the mime type becomes ready. // Pause the response until the mime type becomes ready.
*defer = true; *defer = true;
network::mojom::URLLoaderPtr new_loader; mojo::PendingRemote<network::mojom::URLLoader> new_remote;
network::mojom::URLLoaderClientRequest new_loader_request; mojo::PendingReceiver<network::mojom::URLLoaderClient> new_receiver;
network::mojom::URLLoaderPtr source_loader; network::mojom::URLLoaderPtr source_loader;
network::mojom::URLLoaderClientRequest source_client_request; network::mojom::URLLoaderClientRequest source_client_request;
MimeSniffingURLLoader* mime_sniffing_loader; MimeSniffingURLLoader* mime_sniffing_loader;
std::tie(new_loader, new_loader_request, mime_sniffing_loader) = std::tie(new_remote, new_receiver, mime_sniffing_loader) =
MimeSniffingURLLoader::CreateLoader(weak_factory_.GetWeakPtr(), MimeSniffingURLLoader::CreateLoader(weak_factory_.GetWeakPtr(),
response_url, *response_head, response_url, *response_head,
task_runner_); task_runner_);
delegate_->InterceptResponse(std::move(new_loader), delegate_->InterceptResponse(
std::move(new_loader_request), &source_loader, network::mojom::URLLoaderPtr(std::move(new_remote)),
&source_client_request); std::move(new_receiver), &source_loader, &source_client_request);
mime_sniffing_loader->Start(std::move(source_loader), mime_sniffing_loader->Start(source_loader.PassInterface(),
std::move(source_client_request)); std::move(source_client_request));
} }
} }
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "content/common/mime_sniffing_url_loader.h" #include "content/common/mime_sniffing_url_loader.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/data_pipe_utils.h" #include "mojo/public/cpp/system/data_pipe_utils.h"
#include "services/network/test/test_url_loader_client.h" #include "services/network/test/test_url_loader_client.h"
#include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
...@@ -106,8 +109,13 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate { ...@@ -106,8 +109,13 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate {
ASSERT_TRUE(mojo::FuseInterface( ASSERT_TRUE(mojo::FuseInterface(
std::move(new_client_request), std::move(new_client_request),
destination_loader_client_.CreateInterfacePtr().PassInterface())); destination_loader_client_.CreateInterfacePtr().PassInterface()));
source_loader_request_ = mojo::MakeRequest(original_loader);
*original_client_request = mojo::MakeRequest(&source_loader_client_ptr_); mojo::PendingRemote<network::mojom::URLLoader> pending_remote;
pending_receiver_ = pending_remote.InitWithNewPipeAndPassReceiver();
original_loader->Bind(std::move(pending_remote));
*original_client_request =
source_loader_client_remote_.BindNewPipeAndPassReceiver();
} }
void LoadResponseBody(const std::string& body) { void LoadResponseBody(const std::string& body) {
...@@ -116,7 +124,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate { ...@@ -116,7 +124,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate {
mojo::ScopedDataPipeConsumerHandle consumer; mojo::ScopedDataPipeConsumerHandle consumer;
EXPECT_EQ(MOJO_RESULT_OK, EXPECT_EQ(MOJO_RESULT_OK,
mojo::CreateDataPipe(nullptr, &source_body_handle_, &consumer)); mojo::CreateDataPipe(nullptr, &source_body_handle_, &consumer));
source_loader_client()->OnStartLoadingResponseBody(std::move(consumer)); source_loader_client_remote()->OnStartLoadingResponseBody(
std::move(consumer));
} }
MojoDataPipeSender sender(std::move(source_body_handle_)); MojoDataPipeSender sender(std::move(source_body_handle_));
...@@ -129,7 +138,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate { ...@@ -129,7 +138,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate {
} }
void CompleteResponse() { void CompleteResponse() {
source_loader_client()->OnComplete(network::URLLoaderCompletionStatus()); source_loader_client_remote()->OnComplete(
network::URLLoaderCompletionStatus());
source_body_handle_.reset(); source_body_handle_.reset();
} }
...@@ -162,8 +172,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate { ...@@ -162,8 +172,8 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate {
return &destination_loader_client_; return &destination_loader_client_;
} }
network::mojom::URLLoaderClient* source_loader_client() { mojo::Remote<network::mojom::URLLoaderClient>& source_loader_client_remote() {
return source_loader_client_ptr_.get(); return source_loader_client_remote_;
} }
private: private:
...@@ -175,9 +185,9 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate { ...@@ -175,9 +185,9 @@ class MockDelegate : public blink::URLLoaderThrottle::Delegate {
network::mojom::URLLoaderPtr destination_loader_ptr_; network::mojom::URLLoaderPtr destination_loader_ptr_;
network::TestURLLoaderClient destination_loader_client_; network::TestURLLoaderClient destination_loader_client_;
// A pair of a loader and a loader client for source of the response. // A pair of a receiver and a remote for source of the response.
network::mojom::URLLoaderClientPtr source_loader_client_ptr_; mojo::PendingReceiver<network::mojom::URLLoader> pending_receiver_;
network::mojom::URLLoaderRequest source_loader_request_; mojo::Remote<network::mojom::URLLoaderClient> source_loader_client_remote_;
mojo::ScopedDataPipeProducerHandle source_body_handle_; mojo::ScopedDataPipeProducerHandle source_body_handle_;
}; };
...@@ -308,7 +318,7 @@ TEST_F(MimeSniffingThrottleTest, NoBody) { ...@@ -308,7 +318,7 @@ TEST_F(MimeSniffingThrottleTest, NoBody) {
EXPECT_TRUE(delegate->is_intercepted()); EXPECT_TRUE(delegate->is_intercepted());
// Call OnComplete() without sending body. // Call OnComplete() without sending body.
delegate->source_loader_client()->OnComplete( delegate->source_loader_client_remote()->OnComplete(
network::URLLoaderCompletionStatus(net::ERR_FAILED)); network::URLLoaderCompletionStatus(net::ERR_FAILED));
delegate->destination_loader_client()->RunUntilComplete(); delegate->destination_loader_client()->RunUntilComplete();
...@@ -332,11 +342,11 @@ TEST_F(MimeSniffingThrottleTest, EmptyBody) { ...@@ -332,11 +342,11 @@ TEST_F(MimeSniffingThrottleTest, EmptyBody) {
EXPECT_TRUE(delegate->is_intercepted()); EXPECT_TRUE(delegate->is_intercepted());
mojo::DataPipe pipe; mojo::DataPipe pipe;
delegate->source_loader_client()->OnStartLoadingResponseBody( delegate->source_loader_client_remote()->OnStartLoadingResponseBody(
std::move(pipe.consumer_handle)); std::move(pipe.consumer_handle));
pipe.producer_handle.reset(); // The pipe is empty. pipe.producer_handle.reset(); // The pipe is empty.
delegate->source_loader_client()->OnComplete( delegate->source_loader_client_remote()->OnComplete(
network::URLLoaderCompletionStatus()); network::URLLoaderCompletionStatus());
delegate->destination_loader_client()->RunUntilComplete(); delegate->destination_loader_client()->RunUntilComplete();
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "content/common/mime_sniffing_throttle.h" #include "content/common/mime_sniffing_throttle.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "net/base/mime_sniffer.h" #include "net/base/mime_sniffer.h"
namespace content { namespace content {
...@@ -15,35 +15,38 @@ namespace content { ...@@ -15,35 +15,38 @@ namespace content {
const char MimeSniffingURLLoader::kDefaultMimeType[] = "text/plain"; const char MimeSniffingURLLoader::kDefaultMimeType[] = "text/plain";
// static // static
std::tuple<network::mojom::URLLoaderPtr, std::tuple<mojo::PendingRemote<network::mojom::URLLoader>,
network::mojom::URLLoaderClientRequest, mojo::PendingReceiver<network::mojom::URLLoaderClient>,
MimeSniffingURLLoader*> MimeSniffingURLLoader*>
MimeSniffingURLLoader::CreateLoader( MimeSniffingURLLoader::CreateLoader(
base::WeakPtr<MimeSniffingThrottle> throttle, base::WeakPtr<MimeSniffingThrottle> throttle,
const GURL& response_url, const GURL& response_url,
const network::ResourceResponseHead& response_head, const network::ResourceResponseHead& response_head,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) { scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
network::mojom::URLLoaderPtr url_loader; mojo::PendingRemote<network::mojom::URLLoader> url_loader;
network::mojom::URLLoaderClientPtr url_loader_client; mojo::PendingRemote<network::mojom::URLLoaderClient> url_loader_client;
network::mojom::URLLoaderClientRequest url_loader_client_request = mojo::PendingReceiver<network::mojom::URLLoaderClient>
mojo::MakeRequest(&url_loader_client); url_loader_client_receiver =
url_loader_client.InitWithNewPipeAndPassReceiver();
auto loader = base::WrapUnique(new MimeSniffingURLLoader( auto loader = base::WrapUnique(new MimeSniffingURLLoader(
std::move(throttle), response_url, response_head, std::move(throttle), response_url, response_head,
std::move(url_loader_client), std::move(task_runner))); std::move(url_loader_client), std::move(task_runner)));
MimeSniffingURLLoader* loader_rawptr = loader.get(); MimeSniffingURLLoader* loader_rawptr = loader.get();
mojo::MakeStrongBinding(std::move(loader), mojo::MakeRequest(&url_loader)); mojo::MakeSelfOwnedReceiver(std::move(loader),
url_loader.InitWithNewPipeAndPassReceiver());
return std::make_tuple(std::move(url_loader), return std::make_tuple(std::move(url_loader),
std::move(url_loader_client_request), loader_rawptr); std::move(url_loader_client_receiver), loader_rawptr);
} }
MimeSniffingURLLoader::MimeSniffingURLLoader( MimeSniffingURLLoader::MimeSniffingURLLoader(
base::WeakPtr<MimeSniffingThrottle> throttle, base::WeakPtr<MimeSniffingThrottle> throttle,
const GURL& response_url, const GURL& response_url,
const network::ResourceResponseHead& response_head, const network::ResourceResponseHead& response_head,
network::mojom::URLLoaderClientPtr destination_url_loader_client, mojo::PendingRemote<network::mojom::URLLoaderClient>
destination_url_loader_client,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) scoped_refptr<base::SingleThreadTaskRunner> task_runner)
: throttle_(throttle), : throttle_(throttle),
source_url_client_binding_(this),
destination_url_loader_client_(std::move(destination_url_loader_client)), destination_url_loader_client_(std::move(destination_url_loader_client)),
response_url_(response_url), response_url_(response_url),
response_head_(response_head), response_head_(response_head),
...@@ -58,11 +61,12 @@ MimeSniffingURLLoader::MimeSniffingURLLoader( ...@@ -58,11 +61,12 @@ MimeSniffingURLLoader::MimeSniffingURLLoader(
MimeSniffingURLLoader::~MimeSniffingURLLoader() = default; MimeSniffingURLLoader::~MimeSniffingURLLoader() = default;
void MimeSniffingURLLoader::Start( void MimeSniffingURLLoader::Start(
network::mojom::URLLoaderPtr source_url_loader, mojo::PendingRemote<network::mojom::URLLoader> source_url_loader_remote,
network::mojom::URLLoaderClientRequest source_url_loader_client_request) { mojo::PendingReceiver<network::mojom::URLLoaderClient>
source_url_loader_ = std::move(source_url_loader); source_url_client_receiver) {
source_url_client_binding_.Bind(std::move(source_url_loader_client_request), source_url_loader_.Bind(std::move(source_url_loader_remote));
task_runner_); source_url_client_receiver_.Bind(std::move(source_url_client_receiver),
task_runner_);
} }
void MimeSniffingURLLoader::OnReceiveResponse( void MimeSniffingURLLoader::OnReceiveResponse(
...@@ -359,7 +363,7 @@ void MimeSniffingURLLoader::Abort() { ...@@ -359,7 +363,7 @@ void MimeSniffingURLLoader::Abort() {
body_consumer_watcher_.Cancel(); body_consumer_watcher_.Cancel();
body_producer_watcher_.Cancel(); body_producer_watcher_.Cancel();
source_url_loader_.reset(); source_url_loader_.reset();
source_url_client_binding_.Close(); source_url_client_receiver_.reset();
destination_url_loader_client_.reset(); destination_url_loader_client_.reset();
// |this| should be removed since the owner will destroy |this| or the owner // |this| should be removed since the owner will destroy |this| or the owner
// has already been destroyed by some reason. // has already been destroyed by some reason.
......
...@@ -13,6 +13,10 @@ ...@@ -13,6 +13,10 @@
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "content/common/content_export.h" #include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/data_pipe.h" #include "mojo/public/cpp/system/data_pipe.h"
#include "mojo/public/cpp/system/simple_watcher.h" #include "mojo/public/cpp/system/simple_watcher.h"
#include "services/network/public/cpp/resource_response.h" #include "services/network/public/cpp/resource_response.h"
...@@ -58,12 +62,14 @@ class CONTENT_EXPORT MimeSniffingURLLoader ...@@ -58,12 +62,14 @@ class CONTENT_EXPORT MimeSniffingURLLoader
// Start waiting for the body. // Start waiting for the body.
void Start( void Start(
network::mojom::URLLoaderPtr source_url_loader, mojo::PendingRemote<network::mojom::URLLoader> source_url_loader_remote,
network::mojom::URLLoaderClientRequest source_url_loader_client_request); mojo::PendingReceiver<network::mojom::URLLoaderClient>
source_url_client_receiver);
// network::mojom::URLLoaderPtr controls the lifetime of the loader.
static std::tuple<network::mojom::URLLoaderPtr, // mojo::PendingRemote<network::mojom::URLLoader> controls the lifetime of the
network::mojom::URLLoaderClientRequest, // loader.
static std::tuple<mojo::PendingRemote<network::mojom::URLLoader>,
mojo::PendingReceiver<network::mojom::URLLoaderClient>,
MimeSniffingURLLoader*> MimeSniffingURLLoader*>
CreateLoader(base::WeakPtr<MimeSniffingThrottle> throttle, CreateLoader(base::WeakPtr<MimeSniffingThrottle> throttle,
const GURL& response_url, const GURL& response_url,
...@@ -75,7 +81,8 @@ class CONTENT_EXPORT MimeSniffingURLLoader ...@@ -75,7 +81,8 @@ class CONTENT_EXPORT MimeSniffingURLLoader
base::WeakPtr<MimeSniffingThrottle> throttle, base::WeakPtr<MimeSniffingThrottle> throttle,
const GURL& response_url, const GURL& response_url,
const network::ResourceResponseHead& response_head, const network::ResourceResponseHead& response_head,
network::mojom::URLLoaderClientPtr destination_url_loader_client, mojo::PendingRemote<network::mojom::URLLoaderClient>
destination_url_loader_client,
scoped_refptr<base::SingleThreadTaskRunner> task_runner); scoped_refptr<base::SingleThreadTaskRunner> task_runner);
// network::mojom::URLLoaderClient implementation (called from the source of // network::mojom::URLLoaderClient implementation (called from the source of
...@@ -117,9 +124,10 @@ class CONTENT_EXPORT MimeSniffingURLLoader ...@@ -117,9 +124,10 @@ class CONTENT_EXPORT MimeSniffingURLLoader
base::WeakPtr<MimeSniffingThrottle> throttle_; base::WeakPtr<MimeSniffingThrottle> throttle_;
mojo::Binding<network::mojom::URLLoaderClient> source_url_client_binding_; mojo::Receiver<network::mojom::URLLoaderClient> source_url_client_receiver_{
network::mojom::URLLoaderPtr source_url_loader_; this};
network::mojom::URLLoaderClientPtr destination_url_loader_client_; mojo::Remote<network::mojom::URLLoader> source_url_loader_;
mojo::Remote<network::mojom::URLLoaderClient> destination_url_loader_client_;
GURL response_url_; GURL response_url_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment