Chromium Code Reviews| 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..7bcfc8f1edff556253d3d3fcb0da18a7fbddc553 100644 |
| --- a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
| +++ b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc |
| @@ -18,10 +18,9 @@ |
| #include "base/strings/string16.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/synchronization/lock.h" |
| -#include "content/browser/message_port_message_filter.h" |
| +#include "base/synchronization/waitable_event.h" |
| #include "content/browser/shared_worker/shared_worker_message_filter.h" |
| #include "content/browser/shared_worker/worker_storage_partition.h" |
| -#include "content/common/message_port_messages.h" |
| #include "content/common/view_messages.h" |
| #include "content/common/worker_messages.h" |
| #include "content/public/browser/storage_partition.h" |
| @@ -33,6 +32,8 @@ |
| namespace content { |
| +typedef std::pair<base::string16, std::vector<MessagePort>> QueuedMessage; |
|
kinuko
2017/02/08 09:45:06
nit: using QueuedMessage = ...
darin (slow to review)
2017/02/08 17:09:17
Actually, looks like I can just delete this altoge
|
| + |
| class SharedWorkerServiceImplTest : public testing::Test { |
| public: |
| static void RegisterRunningProcessID(int process_id) { |
| @@ -112,30 +113,17 @@ static const int kProcessIDs[] = {100, 101, 102}; |
| static const unsigned long long kDocumentIDs[] = {200, 201, 202}; |
| static const int kRenderFrameRouteIDs[] = {300, 301, 302}; |
| -class MockMessagePortMessageFilter : public MessagePortMessageFilter { |
| - public: |
| - MockMessagePortMessageFilter( |
| - const NextRoutingIDCallback& callback, |
| - std::vector<std::unique_ptr<IPC::Message>>* message_queue) |
| - : MessagePortMessageFilter(callback), message_queue_(message_queue) {} |
| - |
| - bool Send(IPC::Message* message) override { |
| - std::unique_ptr<IPC::Message> owned(message); |
| - if (!message_queue_) |
| - return false; |
| - message_queue_->push_back(std::move(owned)); |
| - return true; |
| - } |
| - |
| - void Close() { |
| - message_queue_ = nullptr; |
| - OnChannelClosing(); |
| - } |
| +void BlockingReadFromMessagePort(MessagePort port, base::string16* message) { |
| + base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| + base::WaitableEvent::InitialState::NOT_SIGNALED); |
| + port.SetCallback( |
| + base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event))); |
| + event.Wait(); |
| - private: |
| - ~MockMessagePortMessageFilter() override {} |
| - std::vector<std::unique_ptr<IPC::Message>>* message_queue_; |
| -}; |
| + std::vector<MessagePort> should_be_empty; |
| + EXPECT_TRUE(port.GetMessage(message, &should_be_empty)); |
| + EXPECT_TRUE(should_be_empty.empty()); |
| +} |
| class MockSharedWorkerMessageFilter : public SharedWorkerMessageFilter { |
| public: |
| @@ -143,12 +131,12 @@ class MockSharedWorkerMessageFilter : public SharedWorkerMessageFilter { |
| int render_process_id, |
| ResourceContext* resource_context, |
| const WorkerStoragePartition& partition, |
| - MessagePortMessageFilter* message_port_filter, |
| + SharedWorkerMessageFilter::NextRoutingIDCallback callback, |
|
kinuko
2017/02/08 09:45:06
nit: const ref
darin (slow to review)
2017/02/08 17:09:17
Done.
|
| std::vector<std::unique_ptr<IPC::Message>>* message_queue) |
| : SharedWorkerMessageFilter(render_process_id, |
| resource_context, |
| partition, |
| - message_port_filter), |
| + callback), |
| message_queue_(message_queue) {} |
| bool Send(IPC::Message* message) override { |
| @@ -175,28 +163,24 @@ class MockRendererProcessHost { |
| ResourceContext* resource_context, |
| const WorkerStoragePartition& partition) |
| : process_id_(process_id), |
| - message_filter_(new MockMessagePortMessageFilter( |
| + worker_filter_(new MockSharedWorkerMessageFilter( |
| + process_id, |
| + resource_context, |
| + partition, |
| base::Bind(&base::AtomicSequenceNumber::GetNext, |
| base::Unretained(&next_routing_id_)), |
| - &queued_messages_)), |
| - worker_filter_(new MockSharedWorkerMessageFilter(process_id, |
| - resource_context, |
| - partition, |
| - message_filter_.get(), |
| - &queued_messages_)) { |
| + &queued_messages_)) { |
| SharedWorkerServiceImplTest::RegisterRunningProcessID(process_id); |
| } |
| ~MockRendererProcessHost() { |
| SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_); |
| - message_filter_->Close(); |
| worker_filter_->Close(); |
| } |
| bool OnMessageReceived(IPC::Message* message) { |
| std::unique_ptr<IPC::Message> msg(message); |
| - const bool ret = message_filter_->OnMessageReceived(*message) || |
| - worker_filter_->OnMessageReceived(*message); |
| + const bool ret = worker_filter_->OnMessageReceived(*message); |
| if (message->is_sync()) { |
| CHECK(!queued_messages_.empty()); |
| std::unique_ptr<IPC::Message> response_msg( |
| @@ -228,25 +212,9 @@ class MockRendererProcessHost { |
| const int process_id_; |
| std::vector<std::unique_ptr<IPC::Message>> queued_messages_; |
| base::AtomicSequenceNumber next_routing_id_; |
| - scoped_refptr<MockMessagePortMessageFilter> message_filter_; |
| scoped_refptr<MockSharedWorkerMessageFilter> worker_filter_; |
| }; |
| -void CreateMessagePortPair(MockRendererProcessHost* renderer, |
| - int* route_1, |
| - int* port_1, |
| - int* route_2, |
| - int* port_2) { |
| - EXPECT_TRUE(renderer->OnMessageReceived( |
| - new MessagePortHostMsg_CreateMessagePort(route_1, port_1))); |
| - EXPECT_TRUE(renderer->OnMessageReceived( |
| - new MessagePortHostMsg_CreateMessagePort(route_2, port_2))); |
| - EXPECT_TRUE(renderer->OnMessageReceived( |
| - new MessagePortHostMsg_Entangle(*port_1, *port_2))); |
| - EXPECT_TRUE(renderer->OnMessageReceived( |
| - new MessagePortHostMsg_Entangle(*port_2, *port_1))); |
| -} |
| - |
| void PostCreateWorker(MockRendererProcessHost* renderer, |
| const std::string& url, |
| const std::string& name, |
| @@ -269,61 +237,31 @@ void PostCreateWorker(MockRendererProcessHost* renderer, |
| class MockSharedWorkerConnector { |
| public: |
| MockSharedWorkerConnector(MockRendererProcessHost* renderer_host) |
| - : renderer_host_(renderer_host), |
| - temporary_remote_port_route_id_(0), |
| - remote_port_id_(0), |
| - local_port_route_id_(0), |
| - local_port_id_(0) {} |
| + : renderer_host_(renderer_host) {} |
| void Create(const std::string& url, |
| const std::string& name, |
| unsigned long long document_id, |
| int render_frame_route_id) { |
| - CreateMessagePortPair(renderer_host_, |
| - &temporary_remote_port_route_id_, |
| - &remote_port_id_, |
| - &local_port_route_id_, |
| - &local_port_id_); |
| PostCreateWorker(renderer_host_, url, name, document_id, |
| render_frame_route_id, &create_worker_reply_); |
| } |
| - void SendQueueMessages() { |
| - EXPECT_TRUE(renderer_host_->OnMessageReceived( |
| - new MessagePortHostMsg_QueueMessages(remote_port_id_))); |
| - } |
| - void SendPostMessage(const std::string& data) { |
| - const std::vector<int> empty_ports; |
| - EXPECT_TRUE( |
| - renderer_host_->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
| - local_port_id_, base::ASCIIToUTF16(data), empty_ports))); |
| - } |
| void SendConnect() { |
| + mojo::MessagePipe message_pipe; |
| + local_port_ = MessagePort(std::move(message_pipe.handle0)); |
| + |
| EXPECT_TRUE( |
| renderer_host_->OnMessageReceived(new ViewHostMsg_ConnectToWorker( |
| - create_worker_reply_.route_id, remote_port_id_))); |
| - } |
| - void SendSendQueuedMessages( |
| - const std::vector<QueuedMessage>& queued_messages) { |
| - EXPECT_TRUE(renderer_host_->OnMessageReceived( |
| - new MessagePortHostMsg_SendQueuedMessages(remote_port_id_, |
| - queued_messages))); |
| - } |
| - int temporary_remote_port_route_id() { |
| - return temporary_remote_port_route_id_; |
| + create_worker_reply_.route_id, |
| + MessagePort(std::move(message_pipe.handle1))))); |
| } |
| - int remote_port_id() { return remote_port_id_; } |
| - int local_port_route_id() { return local_port_route_id_; } |
| - int local_port_id() { return local_port_id_; } |
| + MessagePort local_port() { return local_port_; } |
| int route_id() { return create_worker_reply_.route_id; } |
| blink::WebWorkerCreationError creation_error() { |
| return create_worker_reply_.error; |
| } |
| - |
| private: |
| MockRendererProcessHost* renderer_host_; |
| - int temporary_remote_port_route_id_; |
| - int remote_port_id_; |
| - int local_port_route_id_; |
| - int local_port_id_; |
| + MessagePort local_port_; |
| ViewHostMsg_CreateWorker_Reply create_worker_reply_; |
| }; |
| @@ -351,37 +289,17 @@ void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, |
| EXPECT_EQ(connector->route_id(), msg->routing_id()); |
| } |
| -void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, |
| - MockSharedWorkerConnector* connector) { |
| - std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| - EXPECT_EQ(MessagePortMsg_MessagesQueued::ID, msg->type()); |
| - EXPECT_EQ(connector->temporary_remote_port_route_id(), msg->routing_id()); |
| -} |
| - |
| void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host, |
| int expected_msg_route_id, |
| - int expected_sent_message_port_id, |
| - int* routing_id) { |
| + int* connection_request_id, |
| + MessagePort* port) { |
| std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| EXPECT_EQ(WorkerMsg_Connect::ID, msg->type()); |
| EXPECT_EQ(expected_msg_route_id, msg->routing_id()); |
| WorkerMsg_Connect::Param params; |
| EXPECT_TRUE(WorkerMsg_Connect::Read(msg.get(), ¶ms)); |
| - int port_id = std::get<0>(params); |
| - *routing_id = std::get<1>(params); |
| - EXPECT_EQ(expected_sent_message_port_id, port_id); |
| -} |
| - |
| -void CheckMessagePortMsgMessage(MockRendererProcessHost* renderer_host, |
| - int expected_msg_route_id, |
| - std::string expected_data) { |
| - std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| - EXPECT_EQ(MessagePortMsg_Message::ID, msg->type()); |
| - EXPECT_EQ(expected_msg_route_id, msg->routing_id()); |
| - MessagePortMsg_Message::Param params; |
| - EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), ¶ms)); |
| - base::string16 data = std::get<0>(params); |
| - EXPECT_EQ(base::ASCIIToUTF16(expected_data), data); |
| + *connection_request_id = std::get<0>(params); |
| + *port = std::get<1>(params); |
| } |
| void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, |
| @@ -401,15 +319,12 @@ TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
| std::unique_ptr<MockSharedWorkerConnector> connector( |
| new MockSharedWorkerConnector(renderer_host.get())); |
| int worker_route_id; |
| - int worker_msg_port_route_id; |
| - // SharedWorkerConnector creates two message ports and sends |
| - // ViewHostMsg_CreateWorker. |
| + // Sends ViewHostMsg_CreateWorker. |
| connector->Create("http://example.com/w.js", |
| "name", |
| kDocumentIDs[0], |
| kRenderFrameRouteIDs[0]); |
| - // We need to go to UI thread to call ReserveRenderProcessOnUI(). |
| RunAllPendingInMessageLoop(); |
| EXPECT_EQ(2U, renderer_host->QueuedMessageCount()); |
| // WorkerProcessMsg_CreateWorker should be sent to the renderer in which |
| @@ -422,29 +337,15 @@ TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
| // ViewMsg_WorkerCreated(1) should be sent back to SharedWorkerConnector side. |
| CheckViewMsgWorkerCreated(renderer_host.get(), connector.get()); |
| - // SharedWorkerConnector side sends MessagePortHostMsg_QueueMessages in |
| - // WebSharedWorkerProxy::connect. |
| - connector->SendQueueMessages(); |
| - EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| - // MessagePortMsg_MessagesQueued(2) should be sent back to |
| - // SharedWorkerConnector side. |
| - CheckMessagePortMsgMessagesQueued(renderer_host.get(), connector.get()); |
| - |
| // When SharedWorkerConnector receives ViewMsg_WorkerCreated(1), it sends |
| - // WorkerMsg_Connect wrapped in ViewHostMsg_ForwardToWorker. |
| + // WorkerMsg_Connect via ViewHostMsg_ConnectToWorker. |
| connector->SendConnect(); |
| EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| // WorkerMsg_Connect should be sent to SharedWorker side. |
| - CheckWorkerMsgConnect(renderer_host.get(), |
| - worker_route_id, |
| - connector->remote_port_id(), |
| - &worker_msg_port_route_id); |
| - |
| - // When SharedWorkerConnector receives MessagePortMsg_MessagesQueued(2), it |
| - // sends MessagePortHostMsg_SendQueuedMessages. |
| - std::vector<QueuedMessage> empty_messages; |
| - connector->SendSendQueuedMessages(empty_messages); |
| - EXPECT_EQ(0U, renderer_host->QueuedMessageCount()); |
| + int worker_msg_connection_request_id; |
| + MessagePort worker_msg_port; |
| + CheckWorkerMsgConnect(renderer_host.get(), worker_route_id, |
| + &worker_msg_connection_request_id, &worker_msg_port); |
| // SharedWorker sends WorkerHostMsg_WorkerReadyForInspection in |
| // EmbeddedSharedWorkerStub::WorkerReadyForInspection(). |
| @@ -462,28 +363,18 @@ TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
| // EmbeddedSharedWorkerStub::workerScriptLoaded(). |
| EXPECT_TRUE( |
| renderer_host->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
| - connector->remote_port_id(), worker_route_id))); |
| + worker_msg_connection_request_id, worker_route_id))); |
| EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
| CheckViewMsgWorkerConnected(renderer_host.get(), connector.get()); |
| - // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorker side shuold receive MessagePortMsg_Message. |
| - connector->SendPostMessage("test1"); |
| - EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host.get(), worker_msg_port_route_id, "test1"); |
| - |
| - // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
| - const std::vector<int> empty_ports; |
| - EXPECT_TRUE( |
| - renderer_host->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
| - connector->remote_port_id(), |
| - base::ASCIIToUTF16("test2"), empty_ports))); |
| - EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host.get(), connector->local_port_route_id(), "test2"); |
| + // Verify that |worker_msg_port| corresponds to |connector->local_port()|. |
| + base::string16 expected_message(base::ASCIIToUTF16("test1")); |
| + connector->local_port().PostMessage(expected_message, |
| + std::vector<MessagePort>()); |
| + base::string16 received_message; |
| + BlockingReadFromMessagePort(worker_msg_port, &received_message); |
| + EXPECT_EQ(expected_message, received_message); |
| // UpdateWorkerDependency should not be called. |
| EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
| @@ -498,15 +389,12 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| std::unique_ptr<MockSharedWorkerConnector> connector0( |
| new MockSharedWorkerConnector(renderer_host0.get())); |
| int worker_route_id; |
| - int worker_msg_port_route_id1; |
| - // SharedWorkerConnector creates two message ports and sends |
| - // ViewHostMsg_CreateWorker. |
| + // Sends ViewHostMsg_CreateWorker. |
| connector0->Create("http://example.com/w.js", |
| "name", |
| kDocumentIDs[0], |
| kRenderFrameRouteIDs[0]); |
| - // We need to go to UI thread to call ReserveRenderProcessOnUI(). |
| RunAllPendingInMessageLoop(); |
| EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| // WorkerProcessMsg_CreateWorker should be sent to the renderer in which |
| @@ -519,29 +407,15 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| // ViewMsg_WorkerCreated(1) should be sent back to SharedWorkerConnector side. |
| CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| - // SharedWorkerConnector side sends MessagePortHostMsg_QueueMessages in |
| - // WebSharedWorkerProxy::connect. |
| - connector0->SendQueueMessages(); |
| - EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| - // MessagePortMsg_MessagesQueued(2) should be sent back to |
| - // SharedWorkerConnector side. |
| - CheckMessagePortMsgMessagesQueued(renderer_host0.get(), connector0.get()); |
| - |
| // When SharedWorkerConnector receives ViewMsg_WorkerCreated(1), it sends |
| // WorkerMsg_Connect wrapped in ViewHostMsg_ForwardToWorker. |
| connector0->SendConnect(); |
| EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| // WorkerMsg_Connect should be sent to SharedWorker side. |
| - CheckWorkerMsgConnect(renderer_host0.get(), |
| - worker_route_id, |
| - connector0->remote_port_id(), |
| - &worker_msg_port_route_id1); |
| - |
| - // When SharedWorkerConnector receives MessagePortMsg_MessagesQueued(2), it |
| - // sends MessagePortHostMsg_SendQueuedMessages. |
| - std::vector<QueuedMessage> empty_messages; |
| - connector0->SendSendQueuedMessages(empty_messages); |
| - EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| + int worker_msg_connection_request_id1; |
| + MessagePort worker_msg_port1; |
| + CheckWorkerMsgConnect(renderer_host0.get(), worker_route_id, |
| + &worker_msg_connection_request_id1, &worker_msg_port1); |
| // SharedWorker sends WorkerHostMsg_WorkerReadyForInspection in |
| // EmbeddedSharedWorkerStub::WorkerReadyForInspection(). |
| @@ -559,28 +433,18 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| // EmbeddedSharedWorkerStub::workerScriptLoaded(). |
| EXPECT_TRUE( |
| renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
| - connector0->remote_port_id(), worker_route_id))); |
| + worker_msg_connection_request_id1, worker_route_id))); |
| EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
| CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get()); |
| - // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorker side shuold receive MessagePortMsg_Message. |
| - connector0->SendPostMessage("test1"); |
| - EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host0.get(), worker_msg_port_route_id1, "test1"); |
| - |
| - // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
| - const std::vector<int> empty_ports; |
| - EXPECT_TRUE( |
| - renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
| - connector0->remote_port_id(), |
| - base::ASCIIToUTF16("test2"), empty_ports))); |
| - EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host0.get(), connector0->local_port_route_id(), "test2"); |
| + // Verify that |worker_msg_port1| corresponds to |connector0->local_port()|. |
| + base::string16 expected_message1(base::ASCIIToUTF16("test1")); |
| + connector0->local_port().PostMessage(expected_message1, |
| + std::vector<MessagePort>()); |
| + base::string16 received_message1; |
| + BlockingReadFromMessagePort(worker_msg_port1, &received_message1); |
| + EXPECT_EQ(expected_message1, received_message1); |
| // The second renderer host. |
| std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| @@ -589,7 +453,6 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| *partition_.get())); |
| std::unique_ptr<MockSharedWorkerConnector> connector1( |
| new MockSharedWorkerConnector(renderer_host1.get())); |
| - int worker_msg_port_route_id2; |
| // UpdateWorkerDependency should not be called yet. |
| EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
| @@ -612,54 +475,32 @@ TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| EXPECT_EQ(kProcessIDs[0], s_worker_dependency_added_ids_[0]); |
| EXPECT_EQ(0U, s_worker_dependency_removed_ids_.size()); |
| - // SharedWorkerConnector side sends MessagePortHostMsg_QueueMessages in |
| - // WebSharedWorkerProxy::connect. |
| - connector1->SendQueueMessages(); |
| - EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| - // MessagePortMsg_MessagesQueued(4) should be sent back to |
| - // SharedWorkerConnector side. |
| - CheckMessagePortMsgMessagesQueued(renderer_host1.get(), connector1.get()); |
| - |
| // When SharedWorkerConnector receives ViewMsg_WorkerCreated(3), it sends |
| // WorkerMsg_Connect wrapped in ViewHostMsg_ForwardToWorker. |
| connector1->SendConnect(); |
| EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| // WorkerMsg_Connect should be sent to SharedWorker side. |
| - CheckWorkerMsgConnect(renderer_host0.get(), |
| - worker_route_id, |
| - connector1->remote_port_id(), |
| - &worker_msg_port_route_id2); |
| - |
| - // When SharedWorkerConnector receives MessagePortMsg_MessagesQueued(4), it |
| - // sends MessagePortHostMsg_SendQueuedMessages. |
| - connector1->SendSendQueuedMessages(empty_messages); |
| - EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| + int worker_msg_connection_request_id2; |
| + MessagePort worker_msg_port2; |
| + CheckWorkerMsgConnect(renderer_host0.get(), worker_route_id, |
| + &worker_msg_connection_request_id2, &worker_msg_port2); |
| // SharedWorker sends WorkerHostMsg_WorkerConnected in |
| // EmbeddedSharedWorkerStub::OnConnect(). |
| EXPECT_TRUE( |
| renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
| - connector1->remote_port_id(), worker_route_id))); |
| + worker_msg_connection_request_id2, worker_route_id))); |
| EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
| CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get()); |
| - // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorker side shuold receive MessagePortMsg_Message. |
| - connector1->SendPostMessage("test3"); |
| - EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host0.get(), worker_msg_port_route_id2, "test3"); |
| - |
| - // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
| - // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
| - EXPECT_TRUE( |
| - renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
| - connector1->remote_port_id(), |
| - base::ASCIIToUTF16("test4"), empty_ports))); |
| - EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| - CheckMessagePortMsgMessage( |
| - renderer_host1.get(), connector1->local_port_route_id(), "test4"); |
| + // Verify that |worker_msg_port2| corresponds to |connector1->local_port()|. |
| + base::string16 expected_message2(base::ASCIIToUTF16("test2")); |
| + connector1->local_port().PostMessage(expected_message2, |
| + std::vector<MessagePort>()); |
| + base::string16 received_message2; |
| + BlockingReadFromMessagePort(worker_msg_port2, &received_message2); |
| + EXPECT_EQ(expected_message2, received_message2); |
| EXPECT_EQ(1, s_update_worker_dependency_call_count_); |
| renderer_host1.reset(); |