Index: content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
diff --git a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
index b1b809a54586840c2f2eb20559218aa82df18558..fec5578f1563e04323c72b229efad7a74f3e2c1d 100644 |
--- a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
+++ b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
@@ -351,6 +351,18 @@ void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, |
EXPECT_EQ(connector->route_id(), msg->routing_id()); |
} |
+void CheckViewMsgCountFeature(MockRendererProcessHost* renderer_host, |
+ MockSharedWorkerConnector* connector, |
+ uint32_t expected_feature) { |
+ std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
+ EXPECT_EQ(ViewMsg_CountFeatureOnSharedWorker::ID, msg->type()); |
+ EXPECT_EQ(connector->route_id(), msg->routing_id()); |
+ ViewMsg_CountFeatureOnSharedWorker::Param params; |
+ EXPECT_TRUE(ViewMsg_CountFeatureOnSharedWorker::Read(msg.get(), ¶ms)); |
+ uint32_t feature = std::get<0>(params); |
+ EXPECT_EQ(expected_feature, feature); |
+} |
+ |
void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, |
MockSharedWorkerConnector* connector) { |
std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
@@ -385,10 +397,15 @@ void CheckMessagePortMsgMessage(MockRendererProcessHost* renderer_host, |
} |
void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, |
- MockSharedWorkerConnector* connector) { |
+ MockSharedWorkerConnector* connector, |
+ std::set<uint32_t> expected_used_features) { |
std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
EXPECT_EQ(ViewMsg_WorkerConnected::ID, msg->type()); |
EXPECT_EQ(connector->route_id(), msg->routing_id()); |
+ ViewMsg_WorkerConnected::Param params; |
+ EXPECT_TRUE(ViewMsg_WorkerConnected::Read(msg.get(), ¶ms)); |
+ std::set<uint32_t> used_features = std::get<0>(params); |
+ EXPECT_EQ(expected_used_features, used_features); |
} |
} // namespace |
@@ -465,7 +482,8 @@ TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
connector->remote_port_id(), worker_route_id))); |
EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
// ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
- CheckViewMsgWorkerConnected(renderer_host.get(), connector.get()); |
+ CheckViewMsgWorkerConnected(renderer_host.get(), connector.get(), |
+ std::set<uint32_t>()); |
// When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
// SharedWorker side shuold receive MessagePortMsg_Message. |
@@ -485,6 +503,28 @@ TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
CheckMessagePortMsgMessage( |
renderer_host.get(), connector->local_port_route_id(), "test2"); |
+ // SharedWorker sends WorkerHostMsg_CountFeature in |
+ // EmbeddedSharedWorkerStub::CountFeature(). |
+ uint32_t feature1 = 124; |
+ EXPECT_TRUE(renderer_host->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
+ EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
+ // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
+ CheckViewMsgCountFeature(renderer_host.get(), connector.get(), feature1); |
+ // A message should be sent only one time per feature. |
+ EXPECT_TRUE(renderer_host->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
+ EXPECT_EQ(0U, renderer_host->QueuedMessageCount()); |
+ |
+ // SharedWorker sends WorkerHostMsg_CountFeature in |
+ // EmbeddedSharedWorkerStub::CountFeature() for another feature use. |
+ uint32_t feature2 = 901; |
+ EXPECT_TRUE(renderer_host->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature2))); |
+ EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
+ // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
+ CheckViewMsgCountFeature(renderer_host.get(), connector.get(), feature2); |
+ |
// UpdateWorkerDependency should not be called. |
EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
} |
@@ -562,7 +602,8 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
connector0->remote_port_id(), worker_route_id))); |
EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
// ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
- CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get()); |
+ CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get(), |
+ std::set<uint32_t>()); |
// When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
// SharedWorker side shuold receive MessagePortMsg_Message. |
@@ -582,6 +623,21 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
CheckMessagePortMsgMessage( |
renderer_host0.get(), connector0->local_port_route_id(), "test2"); |
+ // SharedWorker sends WorkerHostMsg_CountFeature in |
+ // EmbeddedSharedWorkerStub::CountFeature(). |
+ uint32_t feature1 = 124; |
+ EXPECT_TRUE(renderer_host0->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
+ EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
+ // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
+ CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature1); |
+ uint32_t feature2 = 901; |
+ EXPECT_TRUE(renderer_host0->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature2))); |
+ EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
+ // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
+ CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature2); |
+ |
// The second renderer host. |
std::unique_ptr<MockRendererProcessHost> renderer_host1( |
new MockRendererProcessHost(kProcessIDs[1], |
@@ -642,7 +698,8 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
connector1->remote_port_id(), worker_route_id))); |
EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
// ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
- CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get()); |
+ CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get(), |
+ {feature1, feature2}); |
// When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
// SharedWorker side shuold receive MessagePortMsg_Message. |
@@ -661,6 +718,27 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
CheckMessagePortMsgMessage( |
renderer_host1.get(), connector1->local_port_route_id(), "test4"); |
+ // SharedWorker sends WorkerHostMsg_CountFeature in |
+ // EmbeddedSharedWorkerStub::CountFeature(). These used_features are already |
+ // counted in the browser-side, so messages should not be sent to |
+ // SharedWorkerConnectors. |
+ EXPECT_TRUE(renderer_host0->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
+ EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
+ EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
+ |
+ // SharedWorker sends WorkerHostMsg_CountFeature in |
+ // EmbeddedSharedWorkerStub::CountFeature() for another feature use. |
+ uint32_t feature3 = 1019; |
+ EXPECT_TRUE(renderer_host0->OnMessageReceived( |
+ new WorkerHostMsg_CountFeature(worker_route_id, feature3))); |
+ // ViewMsg_CountFeature should be sent to all SharedWorkerConnectors |
+ // connecting to this worker. |
+ EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
+ CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature3); |
+ EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
+ CheckViewMsgCountFeature(renderer_host1.get(), connector1.get(), feature3); |
+ |
EXPECT_EQ(1, s_update_worker_dependency_call_count_); |
renderer_host1.reset(); |
// UpdateWorkerDependency should be called. |