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 23 matching lines...) Expand all Loading... | |
| 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) |
| 43 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) | 43 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) |
| 44 IPC_MESSAGE_ROUTED3(TestMsg_TestSimpleEventResult, | |
| 45 int, | |
| 46 blink::WebServiceWorkerEventResult, | |
| 47 base::Time) | |
| 48 | |
| 49 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult, | |
| 50 blink::WebServiceWorkerEventResultLast) | |
| 51 | 44 |
| 52 // --------------------------------------------------------------------------- | 45 // --------------------------------------------------------------------------- |
| 53 | 46 |
| 54 namespace content { | 47 namespace content { |
| 55 | 48 |
| 56 namespace { | 49 namespace { |
| 57 | 50 |
| 58 class MessageReceiver : public EmbeddedWorkerTestHelper { | 51 class MessageReceiver : public EmbeddedWorkerTestHelper { |
| 59 public: | 52 public: |
| 60 MessageReceiver() | 53 MessageReceiver() |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 82 SimulateSend(new TestMsg_MessageFromWorker(embedded_worker_id, value)); | 75 SimulateSend(new TestMsg_MessageFromWorker(embedded_worker_id, value)); |
| 83 } | 76 } |
| 84 | 77 |
| 85 void SimulateSendEventResult(int embedded_worker_id, | 78 void SimulateSendEventResult(int embedded_worker_id, |
| 86 int request_id, | 79 int request_id, |
| 87 const std::string& reply) { | 80 const std::string& reply) { |
| 88 SimulateSend( | 81 SimulateSend( |
| 89 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply)); | 82 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply)); |
| 90 } | 83 } |
| 91 | 84 |
| 92 void SimulateSendSimpleEventResult(int embedded_worker_id, | |
| 93 int request_id, | |
| 94 blink::WebServiceWorkerEventResult reply, | |
| 95 base::Time dispatch_event_time) { | |
| 96 SimulateSend(new TestMsg_TestSimpleEventResult( | |
| 97 embedded_worker_id, request_id, reply, dispatch_event_time)); | |
| 98 } | |
| 99 | |
| 100 private: | 85 private: |
| 101 void OnMessage() { | 86 void OnMessage() { |
| 102 // Do nothing. | 87 // Do nothing. |
| 103 } | 88 } |
| 104 | 89 |
| 105 int current_embedded_worker_id_; | 90 int current_embedded_worker_id_; |
| 106 DISALLOW_COPY_AND_ASSIGN(MessageReceiver); | 91 DISALLOW_COPY_AND_ASSIGN(MessageReceiver); |
| 107 }; | 92 }; |
| 108 | 93 |
| 109 void VerifyCalled(bool* called) { | 94 void VerifyCalled(bool* called) { |
| (...skipping 1440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1550 | 1535 |
| 1551 // Verify correct response was received. | 1536 // Verify correct response was received. |
| 1552 EXPECT_EQ(request_id1, received_request_id1); | 1537 EXPECT_EQ(request_id1, received_request_id1); |
| 1553 EXPECT_EQ(request_id2, received_request_id2); | 1538 EXPECT_EQ(request_id2, received_request_id2); |
| 1554 EXPECT_EQ(reply1, received_data1); | 1539 EXPECT_EQ(reply1, received_data1); |
| 1555 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1540 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1556 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, | 1541 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, |
| 1557 base::Time::Now())); | 1542 base::Time::Now())); |
| 1558 } | 1543 } |
| 1559 | 1544 |
| 1560 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) { | |
|
falken
2017/03/30 03:51:39
I assume this test coverage is elsewhere for the M
leonhsl(Using Gerrit)
2017/03/30 07:13:10
This unit test is for testing SWVersion::DispatchS
| |
| 1561 ServiceWorkerStatusCode status = | |
| 1562 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | |
| 1563 | |
| 1564 // Activate and start worker. | |
| 1565 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1566 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1567 CreateReceiverOnCurrentThread(&status)); | |
| 1568 base::RunLoop().RunUntilIdle(); | |
| 1569 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1570 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1571 | |
| 1572 // Start request and dispatch test event. | |
| 1573 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | |
| 1574 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1575 int request_id = version_->StartRequest( | |
| 1576 ServiceWorkerMetrics::EventType::SYNC, | |
| 1577 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1578 version_->DispatchSimpleEvent<TestMsg_TestSimpleEventResult>( | |
| 1579 request_id, TestMsg_TestEvent(request_id)); | |
| 1580 | |
| 1581 // Verify event got dispatched to worker. | |
| 1582 base::RunLoop().RunUntilIdle(); | |
| 1583 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); | |
| 1584 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); | |
| 1585 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); | |
| 1586 | |
| 1587 // Simulate sending reply to event. | |
| 1588 helper_->SimulateSendSimpleEventResult( | |
| 1589 version_->embedded_worker()->embedded_worker_id(), request_id, | |
| 1590 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()); | |
| 1591 runner->Run(); | |
| 1592 | |
| 1593 // Verify callback was called with correct status. | |
| 1594 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1595 } | |
| 1596 | |
| 1597 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { | |
| 1598 ServiceWorkerStatusCode status = | |
| 1599 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | |
| 1600 | |
| 1601 // Activate and start worker. | |
| 1602 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1603 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | |
| 1604 CreateReceiverOnCurrentThread(&status)); | |
| 1605 base::RunLoop().RunUntilIdle(); | |
| 1606 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1607 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | |
| 1608 | |
| 1609 // Start request and dispatch test event. | |
| 1610 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | |
| 1611 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); | |
| 1612 int request_id = version_->StartRequest( | |
| 1613 ServiceWorkerMetrics::EventType::SYNC, | |
| 1614 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); | |
| 1615 version_->DispatchSimpleEvent<TestMsg_TestSimpleEventResult>( | |
| 1616 request_id, TestMsg_TestEvent(request_id)); | |
| 1617 | |
| 1618 // Verify event got dispatched to worker. | |
| 1619 base::RunLoop().RunUntilIdle(); | |
| 1620 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); | |
| 1621 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); | |
| 1622 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); | |
| 1623 | |
| 1624 // Simulate sending reply to event. | |
| 1625 helper_->SimulateSendSimpleEventResult( | |
| 1626 version_->embedded_worker()->embedded_worker_id(), request_id, | |
| 1627 blink::WebServiceWorkerEventResultRejected, base::Time::Now()); | |
| 1628 runner->Run(); | |
| 1629 | |
| 1630 // Verify callback was called with correct status. | |
| 1631 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); | |
| 1632 } | |
| 1633 | |
| 1634 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { | 1545 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { |
| 1635 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1546 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1636 | 1547 |
| 1637 // Activate and start worker. | 1548 // Activate and start worker. |
| 1638 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1549 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1639 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1550 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1640 CreateReceiverOnCurrentThread(&status)); | 1551 CreateReceiverOnCurrentThread(&status)); |
| 1641 base::RunLoop().RunUntilIdle(); | 1552 base::RunLoop().RunUntilIdle(); |
| 1642 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1553 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1643 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1554 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1694 // Should not have timed out, so error callback should not have been | 1605 // Should not have timed out, so error callback should not have been |
| 1695 // called and FinishRequest should return true. | 1606 // called and FinishRequest should return true. |
| 1696 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1607 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1697 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, | 1608 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, |
| 1698 base::Time::Now())); | 1609 base::Time::Now())); |
| 1699 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, | 1610 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, |
| 1700 base::Time::Now())); | 1611 base::Time::Now())); |
| 1701 } | 1612 } |
| 1702 | 1613 |
| 1703 } // namespace content | 1614 } // namespace content |
| OLD | NEW |