Index: content/browser/service_worker/embedded_worker_test_helper.cc |
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc |
index daf636dca162db2d012c8e4d9c7c0eac13bdb3e9..1315de59459df0bd152672de2b3efad2e0cf13ca 100644 |
--- a/content/browser/service_worker/embedded_worker_test_helper.cc |
+++ b/content/browser/service_worker/embedded_worker_test_helper.cc |
@@ -21,6 +21,7 @@ |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
#include "content/common/service_worker/embedded_worker_messages.h" |
#include "content/common/service_worker/embedded_worker_setup.mojom.h" |
+#include "content/common/service_worker/fetch_event_dispatcher.mojom.h" |
#include "content/common/service_worker/service_worker_messages.h" |
#include "content/public/common/push_event_payload.h" |
#include "content/public/test/mock_render_process_host.h" |
@@ -58,16 +59,18 @@ class MockMessagePortMessageFilter : public MessagePortMessageFilter { |
class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup |
: public mojom::EmbeddedWorkerSetup { |
public: |
- explicit MockEmbeddedWorkerSetup( |
- const base::WeakPtr<EmbeddedWorkerTestHelper>& helper) |
- : helper_(helper) {} |
- |
static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, |
mojom::EmbeddedWorkerSetupRequest request) { |
mojo::MakeStrongBinding(base::MakeUnique<MockEmbeddedWorkerSetup>(helper), |
std::move(request)); |
} |
+ explicit MockEmbeddedWorkerSetup( |
+ const base::WeakPtr<EmbeddedWorkerTestHelper>& helper) |
+ : helper_(helper) {} |
+ |
+ ~MockEmbeddedWorkerSetup() override {} |
+ |
void ExchangeInterfaceProviders( |
int32_t thread_id, |
shell::mojom::InterfaceProviderRequest request, |
@@ -82,6 +85,37 @@ class EmbeddedWorkerTestHelper::MockEmbeddedWorkerSetup |
base::WeakPtr<EmbeddedWorkerTestHelper> helper_; |
}; |
+class EmbeddedWorkerTestHelper::MockFetchEventDispatcher |
+ : public NON_EXPORTED_BASE(mojom::FetchEventDispatcher) { |
+ public: |
+ static void Create(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, |
+ int thread_id, |
+ mojom::FetchEventDispatcherRequest request) { |
+ mojo::MakeStrongBinding( |
+ base::MakeUnique<MockFetchEventDispatcher>(helper, thread_id), |
+ std::move(request)); |
+ } |
+ |
+ MockFetchEventDispatcher( |
+ const base::WeakPtr<EmbeddedWorkerTestHelper>& helper, |
+ int thread_id) |
+ : helper_(helper), thread_id_(thread_id) {} |
+ |
+ ~MockFetchEventDispatcher() override {} |
+ |
+ void DispatchFetchEvent(int response_id, |
+ const ServiceWorkerFetchRequest& request, |
+ const DispatchFetchEventCallback& callback) override { |
+ if (!helper_) |
+ return; |
+ helper_->OnFetchEventStub(thread_id_, response_id, request, callback); |
+ } |
+ |
+ private: |
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper_; |
+ const int thread_id_; |
+}; |
+ |
EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
const base::FilePath& user_data_directory) |
: browser_context_(new TestBrowserContext), |
@@ -195,7 +229,6 @@ bool EmbeddedWorkerTestHelper::OnMessageToWorker(int thread_id, |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ExtendableMessageEvent, |
OnExtendableMessageEventStub) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEventStub) |
- IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEventStub) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEventStub) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
@@ -205,7 +238,12 @@ bool EmbeddedWorkerTestHelper::OnMessageToWorker(int thread_id, |
} |
void EmbeddedWorkerTestHelper::OnSetupMojo( |
- shell::InterfaceRegistry* interface_registry) {} |
+ int thread_id, |
+ shell::InterfaceRegistry* interface_registry) { |
+ interface_registry->AddInterface(base::Bind(&MockFetchEventDispatcher::Create, |
+ weak_factory_.GetWeakPtr(), |
+ thread_id)); |
+} |
void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id, |
int request_id) { |
@@ -234,8 +272,8 @@ void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id, |
void EmbeddedWorkerTestHelper::OnFetchEvent( |
int embedded_worker_id, |
int response_id, |
- int event_finish_id, |
- const ServiceWorkerFetchRequest& request) { |
+ const ServiceWorkerFetchRequest& request, |
+ const FetchCallback& callback) { |
SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
embedded_worker_id, response_id, |
SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
@@ -247,9 +285,8 @@ void EmbeddedWorkerTestHelper::OnFetchEvent( |
std::string() /* cache_storage_cache_name */, |
ServiceWorkerHeaderList() /* cors_exposed_header_names */), |
base::Time::Now())); |
- SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished( |
- embedded_worker_id, event_finish_id, |
- blink::WebServiceWorkerEventResultCompleted, base::Time::Now())); |
+ callback.Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED, |
+ base::Time::Now()); |
} |
void EmbeddedWorkerTestHelper::OnPushEvent(int embedded_worker_id, |
@@ -294,6 +331,7 @@ void EmbeddedWorkerTestHelper::SimulateWorkerScriptLoaded( |
void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted( |
int thread_id, |
int embedded_worker_id) { |
+ thread_id_embedded_worker_id_map_[thread_id] = embedded_worker_id; |
EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |
ASSERT_TRUE(worker != NULL); |
registry()->OnWorkerThreadStarted(worker->process_id(), thread_id, |
@@ -395,14 +433,15 @@ void EmbeddedWorkerTestHelper::OnInstallEventStub(int request_id) { |
} |
void EmbeddedWorkerTestHelper::OnFetchEventStub( |
+ int thread_id, |
int response_id, |
- int event_finish_id, |
- const ServiceWorkerFetchRequest& request) { |
+ const ServiceWorkerFetchRequest& request, |
+ const FetchCallback& callback) { |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, |
- base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent, |
- weak_factory_.GetWeakPtr(), current_embedded_worker_id_, |
- response_id, event_finish_id, request)); |
+ FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnFetchEvent, |
+ weak_factory_.GetWeakPtr(), |
+ thread_id_embedded_worker_id_map_[thread_id], |
+ response_id, request, callback)); |
} |
void EmbeddedWorkerTestHelper::OnPushEventStub( |
@@ -426,7 +465,7 @@ void EmbeddedWorkerTestHelper::OnSetupMojoStub( |
new shell::InterfaceProvider); |
remote->Bind(std::move(remote_interfaces)); |
- OnSetupMojo(local.get()); |
+ OnSetupMojo(thread_id, local.get()); |
InterfaceRegistryAndProvider pair(std::move(local), std::move(remote)); |
thread_id_service_registry_map_[thread_id] = std::move(pair); |
} |