Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <tuple> | 8 #include <tuple> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 | 28 |
| 29 #define IPC_MESSAGE_IMPL | 29 #define IPC_MESSAGE_IMPL |
| 30 #include "ipc/ipc_message_macros.h" | 30 #include "ipc/ipc_message_macros.h" |
| 31 | 31 |
| 32 #define IPC_MESSAGE_START TestMsgStart | 32 #define IPC_MESSAGE_START TestMsgStart |
| 33 | 33 |
| 34 IPC_MESSAGE_CONTROL0(TestMsg_Message) | 34 IPC_MESSAGE_CONTROL0(TestMsg_Message) |
| 35 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) | 35 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) |
| 36 | 36 |
| 37 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) | 37 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) |
| 38 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int) | |
| 38 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) | 39 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) |
| 39 IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult, | 40 IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult, |
| 40 int, | 41 int, |
| 41 blink::WebServiceWorkerEventResult) | 42 blink::WebServiceWorkerEventResult) |
| 42 | 43 |
| 43 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult, | 44 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult, |
| 44 blink::WebServiceWorkerEventResultLast) | 45 blink::WebServiceWorkerEventResultLast) |
| 45 | 46 |
| 46 // --------------------------------------------------------------------------- | 47 // --------------------------------------------------------------------------- |
| 47 | 48 |
| (...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1224 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1225 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1225 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1226 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1226 | 1227 |
| 1227 // Start request and dispatch test event. | 1228 // Start request and dispatch test event. |
| 1228 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | 1229 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); |
| 1229 int request_id = version_->StartRequest( | 1230 int request_id = version_->StartRequest( |
| 1230 ServiceWorkerMetrics::EventType::SYNC, | 1231 ServiceWorkerMetrics::EventType::SYNC, |
| 1231 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | 1232 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); |
| 1232 int received_request_id = 0; | 1233 int received_request_id = 0; |
| 1233 std::string received_data; | 1234 std::string received_data; |
| 1234 version_->DispatchEvent<TestMsg_TestEventResult>( | 1235 version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| 1235 request_id, TestMsg_TestEvent(request_id), | 1236 request_id, base::Bind(&ReceiveTestEventResult, &received_request_id, |
| 1236 base::Bind(&ReceiveTestEventResult, &received_request_id, &received_data, | 1237 &received_data, runner->QuitClosure())); |
| 1237 runner->QuitClosure())); | 1238 version_->DispatchEvent({request_id}, TestMsg_TestEvent(request_id)); |
| 1238 | 1239 |
| 1239 // Verify event got dispatched to worker. | 1240 // Verify event got dispatched to worker. |
| 1240 base::RunLoop().RunUntilIdle(); | 1241 base::RunLoop().RunUntilIdle(); |
| 1241 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); | 1242 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); |
| 1242 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); | 1243 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); |
| 1243 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); | 1244 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); |
| 1244 | 1245 |
| 1245 // Simulate sending reply to event. | 1246 // Simulate sending reply to event. |
| 1246 std::string reply("foobar"); | 1247 std::string reply("foobar"); |
| 1247 helper_->SimulateSendEventResult( | 1248 helper_->SimulateSendEventResult( |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1329 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1330 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1330 | 1331 |
| 1331 // Start first request and dispatch test event. | 1332 // Start first request and dispatch test event. |
| 1332 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner); | 1333 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner); |
| 1333 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value | 1334 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value |
| 1334 int request_id1 = version_->StartRequest( | 1335 int request_id1 = version_->StartRequest( |
| 1335 ServiceWorkerMetrics::EventType::SYNC, | 1336 ServiceWorkerMetrics::EventType::SYNC, |
| 1336 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); | 1337 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); |
| 1337 int received_request_id1 = 0; | 1338 int received_request_id1 = 0; |
| 1338 std::string received_data1; | 1339 std::string received_data1; |
| 1339 version_->DispatchEvent<TestMsg_TestEventResult>( | 1340 version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| 1340 request_id1, TestMsg_TestEvent(request_id1), | 1341 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1, |
| 1341 base::Bind(&ReceiveTestEventResult, &received_request_id1, | 1342 &received_data1, runner1->QuitClosure())); |
| 1342 &received_data1, runner1->QuitClosure())); | 1343 version_->DispatchEvent({request_id1}, TestMsg_TestEvent(request_id1)); |
| 1343 | 1344 |
| 1344 // Start second request and dispatch test event. | 1345 // Start second request and dispatch test event. |
| 1345 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner); | 1346 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner); |
| 1346 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value | 1347 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value |
| 1347 int request_id2 = version_->StartRequest( | 1348 int request_id2 = version_->StartRequest( |
| 1348 ServiceWorkerMetrics::EventType::SYNC, | 1349 ServiceWorkerMetrics::EventType::SYNC, |
| 1349 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure())); | 1350 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure())); |
| 1350 int received_request_id2 = 0; | 1351 int received_request_id2 = 0; |
| 1351 std::string received_data2; | 1352 std::string received_data2; |
| 1352 version_->DispatchEvent<TestMsg_TestEventResult>( | 1353 version_->RegisterRequestCallback<TestMsg_TestEventResult>( |
| 1353 request_id2, TestMsg_TestEvent(request_id2), | 1354 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2, |
| 1354 base::Bind(&ReceiveTestEventResult, &received_request_id2, | 1355 &received_data2, runner2->QuitClosure())); |
| 1355 &received_data2, runner2->QuitClosure())); | 1356 version_->DispatchEvent({request_id2}, TestMsg_TestEvent(request_id2)); |
| 1356 | 1357 |
| 1357 // Make sure events got dispatched in same order. | 1358 // Make sure events got dispatched in same order. |
| 1358 base::RunLoop().RunUntilIdle(); | 1359 base::RunLoop().RunUntilIdle(); |
| 1359 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count()); | 1360 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count()); |
| 1360 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); | 1361 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); |
| 1361 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type()); | 1362 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type()); |
| 1362 TestMsg_TestEvent::Param params; | 1363 TestMsg_TestEvent::Param params; |
| 1363 TestMsg_TestEvent::Read(msg, ¶ms); | 1364 TestMsg_TestEvent::Read(msg, ¶ms); |
| 1364 EXPECT_EQ(request_id1, std::get<0>(params)); | 1365 EXPECT_EQ(request_id1, std::get<0>(params)); |
| 1365 msg = helper_->inner_ipc_sink()->GetMessageAt(1); | 1366 msg = helper_->inner_ipc_sink()->GetMessageAt(1); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1461 // Simulate sending reply to event. | 1462 // Simulate sending reply to event. |
| 1462 helper_->SimulateSendSimpleEventResult( | 1463 helper_->SimulateSendSimpleEventResult( |
| 1463 version_->embedded_worker()->embedded_worker_id(), request_id, | 1464 version_->embedded_worker()->embedded_worker_id(), request_id, |
| 1464 blink::WebServiceWorkerEventResultRejected); | 1465 blink::WebServiceWorkerEventResultRejected); |
| 1465 runner->Run(); | 1466 runner->Run(); |
| 1466 | 1467 |
| 1467 // Verify callback was called with correct status. | 1468 // Verify callback was called with correct status. |
| 1468 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); | 1469 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); |
| 1469 } | 1470 } |
| 1470 | 1471 |
| 1472 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { | |
| 1473 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.
| |
| 1474 | |
| 1475 // Activate and start worker. | |
| 1476 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1477 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.
| |
| 1478 CreateReceiverOnCurrentThread(&status)); | |
| 1479 base::RunLoop().RunUntilIdle(); | |
| 1480 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1481 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1482 | |
| 1483 // Start request and dispatch test event. | |
| 1484 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1485 int request_id1 = version_->StartRequest( | |
| 1486 ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | |
| 1487 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1488 int request_id2 = version_->StartRequest( | |
| 1489 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL, | |
| 1490 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1491 int received_request_id1 = 0; | |
| 1492 int received_request_id2 = 0; | |
| 1493 std::string received_data1; | |
| 1494 std::string received_data2; | |
| 1495 version_->RegisterRequestCallback<TestMsg_TestEventResult>( | |
| 1496 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1, | |
| 1497 &received_data1, runner->QuitClosure())); | |
| 1498 version_->RegisterRequestCallback<TestMsg_TestEventResult>( | |
| 1499 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2, | |
| 1500 &received_data2, runner->QuitClosure())); | |
| 1501 version_->DispatchEvent({request_id1, request_id2}, | |
| 1502 TestMsg_TestEvent_Multiple(request_id1, request_id2)); | |
| 1503 | |
| 1504 // Verify event got dispatched to worker. | |
| 1505 base::RunLoop().RunUntilIdle(); | |
| 1506 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); | |
| 1507 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); | |
| 1508 EXPECT_EQ(TestMsg_TestEvent_Multiple::ID, msg->type()); | |
| 1509 | |
| 1510 // Simulate sending reply to event. | |
| 1511 std::string reply1("foobar1"); | |
| 1512 std::string reply2("foobar2"); | |
| 1513 helper_->SimulateSendEventResult( | |
| 1514 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1); | |
| 1515 runner->Run(); | |
| 1516 | |
| 1517 // Verify message callback got called with correct reply. | |
| 1518 EXPECT_EQ(request_id1, received_request_id1); | |
| 1519 EXPECT_EQ(reply1, received_data1); | |
| 1520 EXPECT_NE(request_id2, received_request_id2); | |
| 1521 EXPECT_NE(reply2, received_data2); | |
| 1522 | |
| 1523 // Simulate sending reply to event. | |
| 1524 helper_->SimulateSendEventResult( | |
| 1525 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2); | |
| 1526 runner->Run(); | |
| 1527 | |
| 1528 // Verify message callback got called with correct reply. | |
| 1529 EXPECT_EQ(request_id2, received_request_id2); | |
| 1530 EXPECT_EQ(reply2, received_data2); | |
| 1531 | |
| 1532 // Should not have timed out, so error callback should not have been | |
| 1533 // called and FinishRequest should return true. | |
| 1534 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1535 EXPECT_TRUE(version_->FinishRequest(request_id1, true)); | |
| 1536 EXPECT_TRUE(version_->FinishRequest(request_id2, true)); | |
|
falken
2016/06/16 06:23:11
Nice test!
shimazu
2016/06/21 02:43:38
Thanks!
| |
| 1537 } | |
| 1538 | |
| 1471 } // namespace content | 1539 } // namespace content |
| OLD | NEW |