Chromium Code Reviews| Index: content/browser/service_worker/service_worker_version_unittest.cc |
| diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc |
| index 3240d541fae42dd4328195e819268a089a1e0b2f..ef98d79c96c910b4e513c9d30d260777b3f7efe3 100644 |
| --- a/content/browser/service_worker/service_worker_version_unittest.cc |
| +++ b/content/browser/service_worker/service_worker_version_unittest.cc |
| @@ -35,6 +35,7 @@ IPC_MESSAGE_CONTROL0(TestMsg_Message) |
| IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) |
| IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) |
| +IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int) |
| IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) |
| IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult, |
| int, |
| @@ -1231,10 +1232,10 @@ TEST_F(ServiceWorkerVersionTest, DispatchEvent) { |
| CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); |
| int received_request_id = 0; |
| std::string received_data; |
| - version_->DispatchEvent<TestMsg_TestEventResult>( |
| - request_id, TestMsg_TestEvent(request_id), |
| - base::Bind(&ReceiveTestEventResult, &received_request_id, &received_data, |
| - runner->QuitClosure())); |
| + version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| + request_id, base::Bind(&ReceiveTestEventResult, &received_request_id, |
| + &received_data, runner->QuitClosure())); |
| + version_->DispatchEvent({request_id}, TestMsg_TestEvent(request_id)); |
| // Verify event got dispatched to worker. |
| base::RunLoop().RunUntilIdle(); |
| @@ -1336,10 +1337,10 @@ TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) { |
| CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); |
| int received_request_id1 = 0; |
| std::string received_data1; |
| - version_->DispatchEvent<TestMsg_TestEventResult>( |
| - request_id1, TestMsg_TestEvent(request_id1), |
| - base::Bind(&ReceiveTestEventResult, &received_request_id1, |
| - &received_data1, runner1->QuitClosure())); |
| + version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| + request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1, |
| + &received_data1, runner1->QuitClosure())); |
| + version_->DispatchEvent({request_id1}, TestMsg_TestEvent(request_id1)); |
| // Start second request and dispatch test event. |
| scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner); |
| @@ -1349,10 +1350,10 @@ TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) { |
| CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure())); |
| int received_request_id2 = 0; |
| std::string received_data2; |
| - version_->DispatchEvent<TestMsg_TestEventResult>( |
| - request_id2, TestMsg_TestEvent(request_id2), |
| - base::Bind(&ReceiveTestEventResult, &received_request_id2, |
| - &received_data2, runner2->QuitClosure())); |
| + version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| + request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2, |
| + &received_data2, runner2->QuitClosure())); |
| + version_->DispatchEvent({request_id2}, TestMsg_TestEvent(request_id2)); |
| // Make sure events got dispatched in same order. |
| base::RunLoop().RunUntilIdle(); |
| @@ -1468,4 +1469,71 @@ TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { |
| EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); |
| } |
| +TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { |
| + ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy |
|
falken
2016/06/16 06:23:10
Lately it's common to use status = SERVICE_WORKER_
shimazu
2016/06/21 02:43:38
Done.
|
| + |
| + // Activate and start worker. |
| + version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| + version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
|
falken
2016/06/16 06:23:11
nit: I'd use UNKNOWN for a dummy event type.
shimazu
2016/06/21 02:43:38
Done.
|
| + CreateReceiverOnCurrentThread(&status)); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(SERVICE_WORKER_OK, status); |
| + EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| + |
| + // Start request and dispatch test event. |
| + scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); |
| + int request_id1 = version_->StartRequest( |
| + ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| + CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); |
| + int request_id2 = version_->StartRequest( |
| + ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL, |
| + CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); |
| + int received_request_id1 = 0; |
| + int received_request_id2 = 0; |
| + std::string received_data1; |
| + std::string received_data2; |
| + version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| + request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1, |
| + &received_data1, runner->QuitClosure())); |
| + version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| + request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2, |
| + &received_data2, runner->QuitClosure())); |
| + version_->DispatchEvent({request_id1, request_id2}, |
| + TestMsg_TestEvent_Multiple(request_id1, request_id2)); |
| + |
| + // Verify event got dispatched to worker. |
| + base::RunLoop().RunUntilIdle(); |
| + ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); |
| + const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); |
| + EXPECT_EQ(TestMsg_TestEvent_Multiple::ID, msg->type()); |
| + |
| + // Simulate sending reply to event. |
| + std::string reply1("foobar1"); |
| + std::string reply2("foobar2"); |
| + helper_->SimulateSendEventResult( |
| + version_->embedded_worker()->embedded_worker_id(), request_id1, reply1); |
| + runner->Run(); |
| + |
| + // Verify message callback got called with correct reply. |
| + EXPECT_EQ(request_id1, received_request_id1); |
| + EXPECT_EQ(reply1, received_data1); |
| + EXPECT_NE(request_id2, received_request_id2); |
| + EXPECT_NE(reply2, received_data2); |
| + |
| + // Simulate sending reply to event. |
| + helper_->SimulateSendEventResult( |
| + version_->embedded_worker()->embedded_worker_id(), request_id2, reply2); |
| + runner->Run(); |
| + |
| + // Verify message callback got called with correct reply. |
| + EXPECT_EQ(request_id2, received_request_id2); |
| + EXPECT_EQ(reply2, received_data2); |
| + |
| + // Should not have timed out, so error callback should not have been |
| + // called and FinishRequest should return true. |
| + EXPECT_EQ(SERVICE_WORKER_OK, status); |
| + EXPECT_TRUE(version_->FinishRequest(request_id1, true)); |
| + EXPECT_TRUE(version_->FinishRequest(request_id2, true)); |
|
falken
2016/06/16 06:23:11
Nice test!
shimazu
2016/06/21 02:43:38
Thanks!
|
| +} |
| + |
| } // namespace content |