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

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

Issue 2746783002: [ServiceWorker] Mojofy InstallEvent of Service Worker (Closed)
Patch Set: Address shimazu's comment #66 and leon's #69 Created 3 years, 7 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 21 matching lines...) Expand all
32 32
33 #define IPC_MESSAGE_IMPL 33 #define IPC_MESSAGE_IMPL
34 #include "ipc/ipc_message_macros.h" 34 #include "ipc/ipc_message_macros.h"
35 35
36 #define IPC_MESSAGE_START TestMsgStart 36 #define IPC_MESSAGE_START TestMsgStart
37 37
38 IPC_MESSAGE_CONTROL0(TestMsg_Message) 38 IPC_MESSAGE_CONTROL0(TestMsg_Message)
39 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) 39 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int)
40 40
41 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) 41 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int)
42 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int) 42 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int)
leonhsl(Using Gerrit) 2017/04/25 06:53:27 Remove useless messages.
xiaofengzhang 2017/04/25 07:18:15 Acknowledged.
43 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) 43 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string)
44 44
45 // --------------------------------------------------------------------------- 45 // ---------------------------------------------------------------------------
46 46
47 namespace content { 47 namespace content {
48 48
49 namespace { 49 namespace {
50 50
51 class MessageReceiver : public EmbeddedWorkerTestHelper { 51 class MessageReceiver : public EmbeddedWorkerTestHelper {
52 public: 52 public:
53 MessageReceiver() 53 MessageReceiver() : EmbeddedWorkerTestHelper(base::FilePath()) {}
54 : EmbeddedWorkerTestHelper(base::FilePath()),
55 current_embedded_worker_id_(0) {}
56 ~MessageReceiver() override {} 54 ~MessageReceiver() override {}
57 55
58 bool OnMessageToWorker(int thread_id,
59 int embedded_worker_id,
60 const IPC::Message& message) override {
61 if (EmbeddedWorkerTestHelper::OnMessageToWorker(
62 thread_id, embedded_worker_id, message)) {
63 return true;
64 }
65 current_embedded_worker_id_ = embedded_worker_id;
66 bool handled = true;
67 IPC_BEGIN_MESSAGE_MAP(MessageReceiver, message)
68 IPC_MESSAGE_HANDLER(TestMsg_Message, OnMessage)
69 IPC_MESSAGE_UNHANDLED(handled = false)
70 IPC_END_MESSAGE_MAP()
71 return handled;
72 }
73
74 void SimulateSendValueToBrowser(int embedded_worker_id, int value) { 56 void SimulateSendValueToBrowser(int embedded_worker_id, int value) {
75 SimulateSend(new TestMsg_MessageFromWorker(embedded_worker_id, value)); 57 SimulateSend(new TestMsg_MessageFromWorker(embedded_worker_id, value));
76 } 58 }
77 59
78 void SimulateSendEventResult(int embedded_worker_id, 60 void SimulateSendEventResult(int embedded_worker_id,
79 int request_id, 61 int request_id,
80 const std::string& reply) { 62 const std::string& reply) {
81 SimulateSend( 63 SimulateSend(
82 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply)); 64 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply));
83 } 65 }
84 66
85 private: 67 private:
86 void OnMessage() { 68 void OnMessage() {
87 // Do nothing. 69 // Do nothing.
88 } 70 }
89 71
90 int current_embedded_worker_id_;
91 DISALLOW_COPY_AND_ASSIGN(MessageReceiver); 72 DISALLOW_COPY_AND_ASSIGN(MessageReceiver);
92 }; 73 };
93 74
94 void VerifyCalled(bool* called) { 75 void VerifyCalled(bool* called) {
95 *called = true; 76 *called = true;
96 } 77 }
97 78
98 void ObserveStatusChanges(ServiceWorkerVersion* version, 79 void ObserveStatusChanges(ServiceWorkerVersion* version,
99 std::vector<ServiceWorkerVersion::Status>* statuses) { 80 std::vector<ServiceWorkerVersion::Status>* statuses) {
100 statuses->push_back(version->status()); 81 statuses->push_back(version->status());
(...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 std::vector<GURL> valid_scopes; 1230 std::vector<GURL> valid_scopes;
1250 valid_scopes.push_back(valid_scope_1); 1231 valid_scopes.push_back(valid_scope_1);
1251 valid_scopes.push_back(valid_scope_2); 1232 valid_scopes.push_back(valid_scope_2);
1252 1233
1253 std::vector<url::Origin> all_origins; 1234 std::vector<url::Origin> all_origins;
1254 url::Origin valid_origin(GURL("https://chromium.org/")); 1235 url::Origin valid_origin(GURL("https://chromium.org/"));
1255 std::vector<url::Origin> valid_origin_list(1, valid_origin); 1236 std::vector<url::Origin> valid_origin_list(1, valid_origin);
1256 1237
1257 // Invalid subscope, should kill worker (but in tests will only increase bad 1238 // Invalid subscope, should kill worker (but in tests will only increase bad
1258 // message count). 1239 // message count).
1259 version_->OnRegisterForeignFetchScopes(std::vector<GURL>(1, GURL()), 1240 version_->RegisterForeignFetchScopes(std::vector<GURL>(1, GURL()),
1260 valid_origin_list); 1241 valid_origin_list);
1261 base::RunLoop().RunUntilIdle(); 1242 base::RunLoop().RunUntilIdle();
1262 EXPECT_EQ(1, helper_->mock_render_process_host()->bad_msg_count()); 1243 EXPECT_EQ(1, helper_->mock_render_process_host()->bad_msg_count());
1263 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size()); 1244 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size());
1264 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size()); 1245 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size());
1265 1246
1266 // Subscope outside the scope of the worker. 1247 // Subscope outside the scope of the worker.
1267 version_->OnRegisterForeignFetchScopes( 1248 version_->RegisterForeignFetchScopes(
1268 std::vector<GURL>(1, GURL("http://www.example.com/wrong")), 1249 std::vector<GURL>(1, GURL("http://www.example.com/wrong")),
1269 valid_origin_list); 1250 valid_origin_list);
1270 base::RunLoop().RunUntilIdle(); 1251 base::RunLoop().RunUntilIdle();
1271 EXPECT_EQ(2, helper_->mock_render_process_host()->bad_msg_count()); 1252 EXPECT_EQ(2, helper_->mock_render_process_host()->bad_msg_count());
1272 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size()); 1253 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size());
1273 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size()); 1254 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size());
1274 1255
1275 // Subscope on wrong origin. 1256 // Subscope on wrong origin.
1276 version_->OnRegisterForeignFetchScopes( 1257 version_->RegisterForeignFetchScopes(
1277 std::vector<GURL>(1, GURL("http://example.com/test/")), 1258 std::vector<GURL>(1, GURL("http://example.com/test/")),
1278 valid_origin_list); 1259 valid_origin_list);
1279 base::RunLoop().RunUntilIdle(); 1260 base::RunLoop().RunUntilIdle();
1280 EXPECT_EQ(3, helper_->mock_render_process_host()->bad_msg_count()); 1261 EXPECT_EQ(3, helper_->mock_render_process_host()->bad_msg_count());
1281 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size()); 1262 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size());
1282 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size()); 1263 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size());
1283 1264
1284 // Invalid origin. 1265 // Invalid origin.
1285 version_->OnRegisterForeignFetchScopes( 1266 version_->RegisterForeignFetchScopes(
1286 valid_scopes, std::vector<url::Origin>(1, url::Origin())); 1267 valid_scopes, std::vector<url::Origin>(1, url::Origin()));
1287 base::RunLoop().RunUntilIdle(); 1268 base::RunLoop().RunUntilIdle();
1288 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); 1269 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count());
1289 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size()); 1270 EXPECT_EQ(0u, version_->foreign_fetch_scopes_.size());
1290 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size()); 1271 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size());
1291 1272
1292 // Valid subscope, no origins. 1273 // Valid subscope, no origins.
1293 version_->OnRegisterForeignFetchScopes(std::vector<GURL>(1, valid_scope_1), 1274 version_->RegisterForeignFetchScopes(std::vector<GURL>(1, valid_scope_1),
1294 all_origins); 1275 all_origins);
1295 base::RunLoop().RunUntilIdle(); 1276 base::RunLoop().RunUntilIdle();
1296 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); 1277 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count());
1297 EXPECT_EQ(1u, version_->foreign_fetch_scopes_.size()); 1278 EXPECT_EQ(1u, version_->foreign_fetch_scopes_.size());
1298 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); 1279 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]);
1299 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size()); 1280 EXPECT_EQ(0u, version_->foreign_fetch_origins_.size());
1300 1281
1301 // Valid subscope, explicit origins. 1282 // Valid subscope, explicit origins.
1302 version_->OnRegisterForeignFetchScopes(valid_scopes, valid_origin_list); 1283 version_->RegisterForeignFetchScopes(valid_scopes, valid_origin_list);
1303 base::RunLoop().RunUntilIdle(); 1284 base::RunLoop().RunUntilIdle();
1304 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); 1285 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count());
1305 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size()); 1286 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size());
1306 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); 1287 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]);
1307 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]); 1288 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]);
1308 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size()); 1289 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size());
1309 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]); 1290 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]);
1310 } 1291 }
1311 1292
1312 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) { 1293 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) {
(...skipping 21 matching lines...) Expand all
1334 1315
1335 // Callback completed. 1316 // Callback completed.
1336 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1317 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1337 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 1318 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
1338 1319
1339 // Request already failed, calling finsh should return false. 1320 // Request already failed, calling finsh should return false.
1340 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 1321 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
1341 base::Time::Now())); 1322 base::Time::Now()));
1342 } 1323 }
1343 1324
1344 TEST_F(ServiceWorkerVersionTest, DispatchEvent) { 1325 TEST_F(ServiceWorkerVersionTest, RegisterRequestCallback) {
1345 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1326 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1346 1327
1347 // Activate and start worker. 1328 // Activate and start worker.
1348 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1329 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1349 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1330 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1350 CreateReceiverOnCurrentThread(&status)); 1331 CreateReceiverOnCurrentThread(&status));
1351 base::RunLoop().RunUntilIdle(); 1332 base::RunLoop().RunUntilIdle();
1352 EXPECT_EQ(SERVICE_WORKER_OK, status); 1333 EXPECT_EQ(SERVICE_WORKER_OK, status);
1353 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1334 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1354 1335
1355 // Start request and dispatch test event. 1336 // Start request and dispatch test event.
1356 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1337 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1357 int request_id = version_->StartRequest( 1338 int request_id = version_->StartRequest(
1358 ServiceWorkerMetrics::EventType::SYNC, 1339 ServiceWorkerMetrics::EventType::SYNC,
1359 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1340 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1360 int received_request_id = 0; 1341 int received_request_id = 0;
1361 std::string received_data; 1342 std::string received_data;
1362 version_->RegisterRequestCallback<TestMsg_TestEventResult>( 1343 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1363 request_id, base::Bind(&ReceiveTestEventResult, &received_request_id, 1344 request_id, base::Bind(&ReceiveTestEventResult, &received_request_id,
1364 &received_data, runner->QuitClosure())); 1345 &received_data, runner->QuitClosure()));
1365 version_->DispatchEvent({request_id}, TestMsg_TestEvent(request_id));
1366
1367 // Verify event got dispatched to worker.
1368 base::RunLoop().RunUntilIdle();
1369 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1370 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1371 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
1372 1346
1373 // Simulate sending reply to event. 1347 // Simulate sending reply to event.
1374 std::string reply("foobar"); 1348 std::string reply("foobar");
1375 helper_->SimulateSendEventResult( 1349 helper_->SimulateSendEventResult(
1376 version_->embedded_worker()->embedded_worker_id(), request_id, reply); 1350 version_->embedded_worker()->embedded_worker_id(), request_id, reply);
1377 runner->Run(); 1351 runner->Run();
1378 1352
1379 // Verify message callback got called with correct reply. 1353 // Verify message callback got called with correct reply.
1380 EXPECT_EQ(request_id, received_request_id); 1354 EXPECT_EQ(request_id, received_request_id);
1381 EXPECT_EQ(reply, received_data); 1355 EXPECT_EQ(reply, received_data);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 // StartWorker message will be sent again because OnStopped is called before 1436 // StartWorker message will be sent again because OnStopped is called before
1463 // OnStarted. 1437 // OnStarted.
1464 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 1438 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
1465 base::RunLoop().RunUntilIdle(); 1439 base::RunLoop().RunUntilIdle();
1466 1440
1467 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1441 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1468 EXPECT_EQ(SERVICE_WORKER_OK, status2); 1442 EXPECT_EQ(SERVICE_WORKER_OK, status2);
1469 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1443 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1470 } 1444 }
1471 1445
1472 TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) {
1473 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1474
1475 // Activate and start worker.
1476 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1477 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
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 first request and dispatch test event.
1484 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
1485 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value
1486 int request_id1 = version_->StartRequest(
1487 ServiceWorkerMetrics::EventType::SYNC,
1488 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
1489 int received_request_id1 = 0;
1490 std::string received_data1;
1491 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1492 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1,
1493 &received_data1, runner1->QuitClosure()));
1494 version_->DispatchEvent({request_id1}, TestMsg_TestEvent(request_id1));
1495
1496 // Start second request and dispatch test event.
1497 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner);
1498 ServiceWorkerStatusCode status2 = SERVICE_WORKER_OK; // dummy value
1499 int request_id2 = version_->StartRequest(
1500 ServiceWorkerMetrics::EventType::SYNC,
1501 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
1502 int received_request_id2 = 0;
1503 std::string received_data2;
1504 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1505 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2,
1506 &received_data2, runner2->QuitClosure()));
1507 version_->DispatchEvent({request_id2}, TestMsg_TestEvent(request_id2));
1508
1509 // Make sure events got dispatched in same order.
1510 base::RunLoop().RunUntilIdle();
1511 ASSERT_EQ(2u, helper_->inner_ipc_sink()->message_count());
1512 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1513 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type());
1514 TestMsg_TestEvent::Param params;
1515 TestMsg_TestEvent::Read(msg, &params);
1516 EXPECT_EQ(request_id1, std::get<0>(params));
1517 msg = helper_->inner_ipc_sink()->GetMessageAt(1);
1518 ASSERT_EQ(TestMsg_TestEvent::ID, msg->type());
1519 TestMsg_TestEvent::Read(msg, &params);
1520 EXPECT_EQ(request_id2, std::get<0>(params));
1521
1522 // Reply to second event.
1523 std::string reply2("foobar");
1524 helper_->SimulateSendEventResult(
1525 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1526 runner2->Run();
1527
1528 // Verify correct message callback got called with correct reply.
1529 EXPECT_EQ(0, received_request_id1);
1530 EXPECT_EQ(request_id2, received_request_id2);
1531 EXPECT_EQ(reply2, received_data2);
1532 EXPECT_EQ(SERVICE_WORKER_OK, status2);
1533 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */,
1534 base::Time::Now()));
1535
1536 // Reply to first event.
1537 std::string reply1("hello world");
1538 helper_->SimulateSendEventResult(
1539 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1);
1540 runner1->Run();
1541
1542 // Verify correct response was received.
1543 EXPECT_EQ(request_id1, received_request_id1);
1544 EXPECT_EQ(request_id2, received_request_id2);
1545 EXPECT_EQ(reply1, received_data1);
1546 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1547 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1548 base::Time::Now()));
1549 }
1550
1551 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) {
1552 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1553
1554 // Activate and start worker.
1555 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1556 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1557 CreateReceiverOnCurrentThread(&status));
1558 base::RunLoop().RunUntilIdle();
1559 EXPECT_EQ(SERVICE_WORKER_OK, status);
1560 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1561
1562 // Start request and dispatch test event.
1563 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1564 int request_id1 = version_->StartRequest(
1565 ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
1566 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1567 int request_id2 = version_->StartRequest(
1568 ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL,
1569 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1570 int received_request_id1 = 0;
1571 int received_request_id2 = 0;
1572 std::string received_data1;
1573 std::string received_data2;
1574 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1575 request_id1, base::Bind(&ReceiveTestEventResult, &received_request_id1,
1576 &received_data1, runner->QuitClosure()));
1577 version_->RegisterRequestCallback<TestMsg_TestEventResult>(
1578 request_id2, base::Bind(&ReceiveTestEventResult, &received_request_id2,
1579 &received_data2, runner->QuitClosure()));
1580 version_->DispatchEvent({request_id1, request_id2},
1581 TestMsg_TestEvent_Multiple(request_id1, request_id2));
1582
1583 // Verify event got dispatched to worker.
1584 base::RunLoop().RunUntilIdle();
1585 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1586 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1587 EXPECT_EQ(TestMsg_TestEvent_Multiple::ID, msg->type());
1588
1589 // Simulate sending reply to event.
1590 std::string reply1("foobar1");
1591 std::string reply2("foobar2");
1592 helper_->SimulateSendEventResult(
1593 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1);
1594 runner->Run();
1595
1596 // Verify message callback got called with correct reply.
1597 EXPECT_EQ(request_id1, received_request_id1);
1598 EXPECT_EQ(reply1, received_data1);
1599 EXPECT_NE(request_id2, received_request_id2);
1600 EXPECT_NE(reply2, received_data2);
1601
1602 // Simulate sending reply to event.
1603 helper_->SimulateSendEventResult(
1604 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1605 runner->Run();
1606
1607 // Verify message callback got called with correct reply.
1608 EXPECT_EQ(request_id2, received_request_id2);
1609 EXPECT_EQ(reply2, received_data2);
1610
1611 // Should not have timed out, so error callback should not have been
1612 // called and FinishRequest should return true.
1613 EXPECT_EQ(SERVICE_WORKER_OK, status);
1614 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1615 base::Time::Now()));
1616 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */,
1617 base::Time::Now()));
1618 }
1619
1620 } // namespace content 1446 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698