Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 2034663002: ServiceWorker: Keep the worker alive until FetchEvent.waitUntil settles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Separate DispathEvent into two part Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 15 matching lines...) Expand all
26 26
27 #define IPC_MESSAGE_IMPL 27 #define IPC_MESSAGE_IMPL
28 #include "ipc/ipc_message_macros.h" 28 #include "ipc/ipc_message_macros.h"
29 29
30 #define IPC_MESSAGE_START TestMsgStart 30 #define IPC_MESSAGE_START TestMsgStart
31 31
32 IPC_MESSAGE_CONTROL0(TestMsg_Message) 32 IPC_MESSAGE_CONTROL0(TestMsg_Message)
33 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) 33 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int)
34 34
35 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) 35 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int)
36 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int)
36 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) 37 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string)
37 IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult, 38 IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult,
38 int, 39 int,
39 blink::WebServiceWorkerEventResult) 40 blink::WebServiceWorkerEventResult)
40 41
41 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult, 42 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult,
42 blink::WebServiceWorkerEventResultLast) 43 blink::WebServiceWorkerEventResultLast)
43 44
44 // --------------------------------------------------------------------------- 45 // ---------------------------------------------------------------------------
45 46
(...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 EXPECT_EQ(SERVICE_WORKER_OK, status); 1225 EXPECT_EQ(SERVICE_WORKER_OK, status);
1225 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1226 EXPECT_EQ(ServiceWorkerVersion::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,
1236 base::Bind(&ReceiveTestEventResult, &received_request_id, &received_data, 1237 base::Bind(&ReceiveTestEventResult, &received_request_id, &received_data,
1237 runner->QuitClosure())); 1238 runner->QuitClosure()));
1239 version_->DispatchEvent(TestMsg_TestEvent(request_id), request_id);
1238 1240
1239 // Verify event got dispatched to worker. 1241 // Verify event got dispatched to worker.
1240 base::RunLoop().RunUntilIdle(); 1242 base::RunLoop().RunUntilIdle();
1241 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); 1243 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1242 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1244 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1243 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); 1245 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
1244 1246
1245 // Simulate sending reply to event. 1247 // Simulate sending reply to event.
1246 std::string reply("foobar"); 1248 std::string reply("foobar");
1247 helper_->SimulateSendEventResult( 1249 helper_->SimulateSendEventResult(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1331 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1330 1332
1331 // Start first request and dispatch test event. 1333 // Start first request and dispatch test event.
1332 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner); 1334 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
1333 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value 1335 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value
1334 int request_id1 = version_->StartRequest( 1336 int request_id1 = version_->StartRequest(
1335 ServiceWorkerMetrics::EventType::SYNC, 1337 ServiceWorkerMetrics::EventType::SYNC,
1336 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); 1338 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
1337 int received_request_id1 = 0; 1339 int received_request_id1 = 0;
1338 std::string received_data1; 1340 std::string received_data1;
1339 version_->DispatchEvent<TestMsg_TestEventResult>( 1341 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1340 request_id1, TestMsg_TestEvent(request_id1), 1342 request_id1,
1341 base::Bind(&ReceiveTestEventResult, &received_request_id1, 1343 base::Bind(&ReceiveTestEventResult, &received_request_id1,
1342 &received_data1, runner1->QuitClosure())); 1344 &received_data1, runner1->QuitClosure()));
1345 version_->DispatchEvent(TestMsg_TestEvent(request_id1), request_id1);
1343 1346
1344 // Start second request and dispatch test event. 1347 // Start second request and dispatch test event.
1345 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner); 1348 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner);
1346 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value 1349 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value
1347 int request_id2 = version_->StartRequest( 1350 int request_id2 = version_->StartRequest(
1348 ServiceWorkerMetrics::EventType::SYNC, 1351 ServiceWorkerMetrics::EventType::SYNC,
1349 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure())); 1352 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
1350 int received_request_id2 = 0; 1353 int received_request_id2 = 0;
1351 std::string received_data2; 1354 std::string received_data2;
1352 version_->DispatchEvent<TestMsg_TestEventResult>( 1355 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1353 request_id2, TestMsg_TestEvent(request_id2), 1356 request_id2,
1354 base::Bind(&ReceiveTestEventResult, &received_request_id2, 1357 base::Bind(&ReceiveTestEventResult, &received_request_id2,
1355 &received_data2, runner2->QuitClosure())); 1358 &received_data2, runner2->QuitClosure()));
1359 version_->DispatchEvent(TestMsg_TestEvent(request_id2), request_id2);
1356 1360
1357 // Make sure events got dispatched in same order. 1361 // Make sure events got dispatched in same order.
1358 base::RunLoop().RunUntilIdle(); 1362 base::RunLoop().RunUntilIdle();
1359 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count()); 1363 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count());
1360 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1364 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1361 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type()); 1365 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type());
1362 TestMsg_TestEvent::Param params; 1366 TestMsg_TestEvent::Param params;
1363 TestMsg_TestEvent::Read(msg, &params); 1367 TestMsg_TestEvent::Read(msg, &params);
1364 EXPECT_EQ(request_id1, base::get<0>(params)); 1368 EXPECT_EQ(request_id1, base::get<0>(params));
1365 msg = helper_->inner_ipc_sink()->GetMessageAt(1); 1369 msg = helper_->inner_ipc_sink()->GetMessageAt(1);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 // Simulate sending reply to event. 1465 // Simulate sending reply to event.
1462 helper_->SimulateSendSimpleEventResult( 1466 helper_->SimulateSendSimpleEventResult(
1463 version_->embedded_worker()->embedded_worker_id(), request_id, 1467 version_->embedded_worker()->embedded_worker_id(), request_id,
1464 blink::WebServiceWorkerEventResultRejected); 1468 blink::WebServiceWorkerEventResultRejected);
1465 runner->Run(); 1469 runner->Run();
1466 1470
1467 // Verify callback was called with correct status. 1471 // Verify callback was called with correct status.
1468 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 1472 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
1469 } 1473 }
1470 1474
1475 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) {
1476 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy
1477
1478 // Activate and start worker.
1479 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1480 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1481 CreateReceiverOnCurrentThread(&status));
1482 base::RunLoop().RunUntilIdle();
1483 EXPECT_EQ(SERVICE_WORKER_OK, status);
1484 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1485
1486 // Start request and dispatch test event.
1487 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1488 int request_id1 = version_->StartRequest(
1489 ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
1490 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1491 int request_id2 = version_->StartRequest(
1492 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL,
1493 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1494 int received_request_id1 = 0;
1495 int received_request_id2 = 0;
1496 std::string received_data1;
1497 std::string received_data2;
1498 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1499 request_id1,
1500 base::Bind(&ReceiveTestEventResult, &received_request_id1,
1501 &received_data1, runner->QuitClosure()));
1502 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1503 request_id2,
1504 base::Bind(&ReceiveTestEventResult, &received_request_id2,
1505 &received_data2, runner->QuitClosure()));
1506 version_->DispatchEvent(TestMsg_TestEvent_Multiple(request_id1, request_id2),
1507 request_id1, request_id2);
1508
1509 // Verify event got dispatched to worker.
1510 base::RunLoop().RunUntilIdle();
1511 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1512 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1513 EXPECT_EQ(TestMsg_TestEvent_Multiple::ID, msg->type());
1514
1515 // Simulate sending reply to event.
1516 std::string reply1("foobar1");
1517 std::string reply2("foobar2");
1518 helper_->SimulateSendEventResult(
1519 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1);
1520 runner->Run();
1521
1522 // Verify message callback got called with correct reply.
1523 EXPECT_EQ(request_id1, received_request_id1);
1524 EXPECT_EQ(reply1, received_data1);
1525 EXPECT_NE(request_id2, received_request_id2);
1526 EXPECT_NE(reply2, received_data2);
1527
1528 // Simulate sending reply to event.
1529 helper_->SimulateSendEventResult(
1530 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1531 runner->Run();
1532
1533 // Verify message callback got called with correct reply.
1534 EXPECT_EQ(request_id2, received_request_id2);
1535 EXPECT_EQ(reply2, received_data2);
1536
1537 // Should not have timed out, so error callback should not have been
1538 // called and FinishRequest should return true.
1539 EXPECT_EQ(SERVICE_WORKER_OK, status);
1540 EXPECT_TRUE(version_->FinishRequest(request_id1, true));
1541 EXPECT_TRUE(version_->FinishRequest(request_id2, true));
1542 }
1543
1471 } // namespace content 1544 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698