| Index: content/browser/loader/test_url_loader_client.cc
|
| diff --git a/content/browser/loader/test_url_loader_client.cc b/content/browser/loader/test_url_loader_client.cc
|
| index 035a050d28a1bc73d118524dea052668d1de001d..8703b4cdc365ad93d8d649d3a2e9e71af2d44e28 100644
|
| --- a/content/browser/loader/test_url_loader_client.cc
|
| +++ b/content/browser/loader/test_url_loader_client.cc
|
| @@ -4,10 +4,73 @@
|
|
|
| #include "content/browser/loader/test_url_loader_client.h"
|
|
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/run_loop.h"
|
| +#include "mojo/public/cpp/bindings/strong_binding.h"
|
|
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +class TestURLLoaderFactory final : public mojom::URLLoaderFactory {
|
| + public:
|
| + class Waiter final : public base::RefCounted<Waiter> {
|
| + public:
|
| + Waiter() = default;
|
| + void Signal(mojom::URLLoaderClientAssociatedPtrInfo client_ptr) {
|
| + client_ptr_ = std::move(client_ptr);
|
| + run_loop_.Quit();
|
| + }
|
| + mojom::URLLoaderClientAssociatedPtrInfo Wait() {
|
| + run_loop_.Run();
|
| + return std::move(client_ptr_);
|
| + }
|
| +
|
| + private:
|
| + friend class base::RefCounted<Waiter>;
|
| + ~Waiter() {}
|
| +
|
| + base::RunLoop run_loop_;
|
| + mojom::URLLoaderClientAssociatedPtrInfo client_ptr_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Waiter);
|
| + };
|
| +
|
| + explicit TestURLLoaderFactory(scoped_refptr<Waiter> waiter)
|
| + : waiter_(waiter) {}
|
| + ~TestURLLoaderFactory() override {}
|
| +
|
| + void CreateLoaderAndStart(
|
| + mojom::URLLoaderAssociatedRequest request,
|
| + int32_t routing_id,
|
| + int32_t request_id,
|
| + const ResourceRequest& url_request,
|
| + mojom::URLLoaderClientAssociatedPtrInfo client_ptr_info) override {
|
| + waiter_->Signal(std::move(client_ptr_info));
|
| + }
|
| +
|
| + void SyncLoad(int32_t routing_id,
|
| + int32_t request_id,
|
| + const ResourceRequest& url_request,
|
| + const SyncLoadCallback& callback) override {
|
| + NOTREACHED();
|
| + }
|
| +
|
| + private:
|
| + scoped_refptr<Waiter> waiter_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestURLLoaderFactory);
|
| +};
|
| +
|
| +void CreateURLLoaderFactory(scoped_refptr<TestURLLoaderFactory::Waiter> waiter,
|
| + mojom::URLLoaderFactoryRequest request) {
|
| + mojo::MakeStrongBinding(
|
| + base::MakeUnique<TestURLLoaderFactory>(std::move(waiter)),
|
| + std::move(request));
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| TestURLLoaderClient::TestURLLoaderClient() : binding_(this) {}
|
| TestURLLoaderClient::~TestURLLoaderClient() {}
|
|
|
| @@ -34,8 +97,29 @@ void TestURLLoaderClient::OnComplete(
|
| quit_closure_for_on_complete_.Run();
|
| }
|
|
|
| -mojom::URLLoaderClientPtr TestURLLoaderClient::CreateInterfacePtrAndBind() {
|
| - return binding_.CreateInterfacePtrAndBind();
|
| +mojom::URLLoaderClientAssociatedPtrInfo
|
| +TestURLLoaderClient::CreateLocalAssociatedPtrInfo() {
|
| + scoped_refptr<TestURLLoaderFactory::Waiter> waiter(
|
| + new TestURLLoaderFactory::Waiter());
|
| + CreateURLLoaderFactory(waiter, mojo::GetProxy(&url_loader_factory_));
|
| + ResourceRequest request;
|
| + mojom::URLLoaderAssociatedPtr loader_proxy;
|
| +
|
| + mojom::URLLoaderClientAssociatedPtrInfo info;
|
| + binding_.Bind(&info, url_loader_factory_.associated_group());
|
| + url_loader_factory_->CreateLoaderAndStart(
|
| + mojo::GetProxy(&loader_proxy, url_loader_factory_.associated_group()), 0,
|
| + 0, request, std::move(info));
|
| +
|
| + return waiter->Wait();
|
| +}
|
| +
|
| +mojom::URLLoaderClientAssociatedPtrInfo
|
| +TestURLLoaderClient::CreateRemoteAssociatedPtrInfo(
|
| + mojo::AssociatedGroup* associated_group) {
|
| + mojom::URLLoaderClientAssociatedPtrInfo client_ptr_info;
|
| + binding_.Bind(&client_ptr_info, associated_group);
|
| + return client_ptr_info;
|
| }
|
|
|
| void TestURLLoaderClient::Unbind() {
|
|
|