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

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: Rebase Created 4 years, 5 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 #include <tuple> 8 #include <tuple>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 17 matching lines...) Expand all
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 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 EXPECT_EQ(SERVICE_WORKER_OK, status); 1234 EXPECT_EQ(SERVICE_WORKER_OK, status);
1234 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1235 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1235 1236
1236 // Start request and dispatch test event. 1237 // Start request and dispatch test event.
1237 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1238 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1238 int request_id = version_->StartRequest( 1239 int request_id = version_->StartRequest(
1239 ServiceWorkerMetrics::EventType::SYNC, 1240 ServiceWorkerMetrics::EventType::SYNC,
1240 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1241 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1241 int received_request_id = 0; 1242 int received_request_id = 0;
1242 std::string received_data; 1243 std::string received_data;
1243 version_->DispatchEvent<TestMsg_TestEventResult>( 1244 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1244 request_id, TestMsg_TestEvent(request_id), 1245 request_id, base::Bind(&ReceiveTestEventResult, &received_request_id,
1245 base::Bind(&ReceiveTestEventResult, &received_request_id, &received_data, 1246 &received_data, runner->QuitClosure()));
1246 runner->QuitClosure())); 1247 version_->DispatchEvent({request_id}, TestMsg_TestEvent(request_id));
1247 1248
1248 // Verify event got dispatched to worker. 1249 // Verify event got dispatched to worker.
1249 base::RunLoop().RunUntilIdle(); 1250 base::RunLoop().RunUntilIdle();
1250 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); 1251 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1251 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1252 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1252 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); 1253 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
1253 1254
1254 // Simulate sending reply to event. 1255 // Simulate sending reply to event.
1255 std::string reply("foobar"); 1256 std::string reply("foobar");
1256 helper_->SimulateSendEventResult( 1257 helper_->SimulateSendEventResult(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1339 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1339 1340
1340 // Start first request and dispatch test event. 1341 // Start first request and dispatch test event.
1341 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner); 1342 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
1342 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value 1343 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value
1343 int request_id1 = version_->StartRequest( 1344 int request_id1 = version_->StartRequest(
1344 ServiceWorkerMetrics::EventType::SYNC, 1345 ServiceWorkerMetrics::EventType::SYNC,
1345 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); 1346 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
1346 int received_request_id1 = 0; 1347 int received_request_id1 = 0;
1347 std::string received_data1; 1348 std::string received_data1;
1348 version_->DispatchEvent<TestMsg_TestEventResult>( 1349 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1349 request_id1, TestMsg_TestEvent(request_id1), 1350 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1,
1350 base::Bind(&ReceiveTestEventResult, &received_request_id1, 1351 &received_data1, runner1->QuitClosure()));
1351 &received_data1, runner1->QuitClosure())); 1352 version_->DispatchEvent({request_id1}, TestMsg_TestEvent(request_id1));
1352 1353
1353 // Start second request and dispatch test event. 1354 // Start second request and dispatch test event.
1354 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner); 1355 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner);
1355 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value 1356 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value
1356 int request_id2 = version_->StartRequest( 1357 int request_id2 = version_->StartRequest(
1357 ServiceWorkerMetrics::EventType::SYNC, 1358 ServiceWorkerMetrics::EventType::SYNC,
1358 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure())); 1359 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
1359 int received_request_id2 = 0; 1360 int received_request_id2 = 0;
1360 std::string received_data2; 1361 std::string received_data2;
1361 version_->DispatchEvent<TestMsg_TestEventResult>( 1362 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1362 request_id2, TestMsg_TestEvent(request_id2), 1363 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2,
1363 base::Bind(&ReceiveTestEventResult, &received_request_id2, 1364 &received_data2, runner2->QuitClosure()));
1364 &received_data2, runner2->QuitClosure())); 1365 version_->DispatchEvent({request_id2}, TestMsg_TestEvent(request_id2));
1365 1366
1366 // Make sure events got dispatched in same order. 1367 // Make sure events got dispatched in same order.
1367 base::RunLoop().RunUntilIdle(); 1368 base::RunLoop().RunUntilIdle();
1368 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count()); 1369 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count());
1369 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1370 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1370 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type()); 1371 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type());
1371 TestMsg_TestEvent::Param params; 1372 TestMsg_TestEvent::Param params;
1372 TestMsg_TestEvent::Read(msg, &params); 1373 TestMsg_TestEvent::Read(msg, &params);
1373 EXPECT_EQ(request_id1, std::get<0>(params)); 1374 EXPECT_EQ(request_id1, std::get<0>(params));
1374 msg = helper_->inner_ipc_sink()->GetMessageAt(1); 1375 msg = helper_->inner_ipc_sink()->GetMessageAt(1);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 // Simulate sending reply to event. 1471 // Simulate sending reply to event.
1471 helper_->SimulateSendSimpleEventResult( 1472 helper_->SimulateSendSimpleEventResult(
1472 version_->embedded_worker()->embedded_worker_id(), request_id, 1473 version_->embedded_worker()->embedded_worker_id(), request_id,
1473 blink::WebServiceWorkerEventResultRejected); 1474 blink::WebServiceWorkerEventResultRejected);
1474 runner->Run(); 1475 runner->Run();
1475 1476
1476 // Verify callback was called with correct status. 1477 // Verify callback was called with correct status.
1477 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 1478 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
1478 } 1479 }
1479 1480
1481 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) {
1482 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1483
1484 // Activate and start worker.
1485 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1486 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1487 CreateReceiverOnCurrentThread(&status));
1488 base::RunLoop().RunUntilIdle();
1489 EXPECT_EQ(SERVICE_WORKER_OK, status);
1490 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1491
1492 // Start request and dispatch test event.
1493 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1494 int request_id1 = version_->StartRequest(
1495 ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
1496 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1497 int request_id2 = version_->StartRequest(
1498 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL,
1499 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1500 int received_request_id1 = 0;
1501 int received_request_id2 = 0;
1502 std::string received_data1;
1503 std::string received_data2;
1504 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1505 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1,
1506 &received_data1, runner->QuitClosure()));
1507 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1508 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2,
1509 &received_data2, runner->QuitClosure()));
1510 version_->DispatchEvent({request_id1, request_id2},
1511 TestMsg_TestEvent_Multiple(request_id1, request_id2));
1512
1513 // Verify event got dispatched to worker.
1514 base::RunLoop().RunUntilIdle();
1515 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1516 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1517 EXPECT_EQ(TestMsg_TestEvent_Multiple::ID, msg->type());
1518
1519 // Simulate sending reply to event.
1520 std::string reply1("foobar1");
1521 std::string reply2("foobar2");
1522 helper_->SimulateSendEventResult(
1523 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1);
1524 runner->Run();
1525
1526 // Verify message callback got called with correct reply.
1527 EXPECT_EQ(request_id1, received_request_id1);
1528 EXPECT_EQ(reply1, received_data1);
1529 EXPECT_NE(request_id2, received_request_id2);
1530 EXPECT_NE(reply2, received_data2);
1531
1532 // Simulate sending reply to event.
1533 helper_->SimulateSendEventResult(
1534 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1535 runner->Run();
1536
1537 // Verify message callback got called with correct reply.
1538 EXPECT_EQ(request_id2, received_request_id2);
1539 EXPECT_EQ(reply2, received_data2);
1540
1541 // Should not have timed out, so error callback should not have been
1542 // called and FinishRequest should return true.
1543 EXPECT_EQ(SERVICE_WORKER_OK, status);
1544 EXPECT_TRUE(version_->FinishRequest(request_id1, true));
1545 EXPECT_TRUE(version_->FinishRequest(request_id2, true));
1546 }
1547
1480 } // namespace content 1548 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | content/common/service_worker/service_worker_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698