| 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/shared_worker/shared_worker_service_impl.h" |
| 6 |
| 5 #include <stddef.h> | 7 #include <stddef.h> |
| 6 | 8 |
| 7 #include <map> | 9 #include <map> |
| 10 #include <memory> |
| 8 #include <set> | 11 #include <set> |
| 9 #include <vector> | 12 #include <vector> |
| 10 | 13 |
| 11 #include "base/atomic_sequence_num.h" | 14 #include "base/atomic_sequence_num.h" |
| 12 #include "base/macros.h" | 15 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/memory/scoped_vector.h" | 16 #include "base/memory/scoped_vector.h" |
| 15 #include "base/strings/string16.h" | 17 #include "base/strings/string16.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 17 #include "base/synchronization/lock.h" | 19 #include "base/synchronization/lock.h" |
| 18 #include "content/browser/message_port_message_filter.h" | 20 #include "content/browser/message_port_message_filter.h" |
| 19 #include "content/browser/shared_worker/shared_worker_message_filter.h" | 21 #include "content/browser/shared_worker/shared_worker_message_filter.h" |
| 20 #include "content/browser/shared_worker/shared_worker_service_impl.h" | |
| 21 #include "content/browser/shared_worker/worker_storage_partition.h" | 22 #include "content/browser/shared_worker/worker_storage_partition.h" |
| 22 #include "content/common/message_port_messages.h" | 23 #include "content/common/message_port_messages.h" |
| 23 #include "content/common/view_messages.h" | 24 #include "content/common/view_messages.h" |
| 24 #include "content/common/worker_messages.h" | 25 #include "content/common/worker_messages.h" |
| 25 #include "content/public/test/test_browser_context.h" | 26 #include "content/public/test/test_browser_context.h" |
| 26 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
| 27 #include "content/public/test/test_utils.h" | 28 #include "content/public/test/test_utils.h" |
| 28 #include "ipc/ipc_sync_message.h" | 29 #include "ipc/ipc_sync_message.h" |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
| 30 | 31 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 s_worker_dependency_added_ids_ = added_ids; | 77 s_worker_dependency_added_ids_ = added_ids; |
| 77 s_worker_dependency_removed_ids_ = removed_ids; | 78 s_worker_dependency_removed_ids_ = removed_ids; |
| 78 } | 79 } |
| 79 static bool MockTryIncrementWorkerRefCount(int worker_process_id) { | 80 static bool MockTryIncrementWorkerRefCount(int worker_process_id) { |
| 80 base::AutoLock lock(s_lock_); | 81 base::AutoLock lock(s_lock_); |
| 81 return s_running_process_id_set_.find(worker_process_id) != | 82 return s_running_process_id_set_.find(worker_process_id) != |
| 82 s_running_process_id_set_.end(); | 83 s_running_process_id_set_.end(); |
| 83 } | 84 } |
| 84 | 85 |
| 85 TestBrowserThreadBundle browser_thread_bundle_; | 86 TestBrowserThreadBundle browser_thread_bundle_; |
| 86 scoped_ptr<TestBrowserContext> browser_context_; | 87 std::unique_ptr<TestBrowserContext> browser_context_; |
| 87 scoped_ptr<WorkerStoragePartition> partition_; | 88 std::unique_ptr<WorkerStoragePartition> partition_; |
| 88 static int s_update_worker_dependency_call_count_; | 89 static int s_update_worker_dependency_call_count_; |
| 89 static std::vector<int> s_worker_dependency_added_ids_; | 90 static std::vector<int> s_worker_dependency_added_ids_; |
| 90 static std::vector<int> s_worker_dependency_removed_ids_; | 91 static std::vector<int> s_worker_dependency_removed_ids_; |
| 91 static base::Lock s_lock_; | 92 static base::Lock s_lock_; |
| 92 static std::set<int> s_running_process_id_set_; | 93 static std::set<int> s_running_process_id_set_; |
| 93 DISALLOW_COPY_AND_ASSIGN(SharedWorkerServiceImplTest); | 94 DISALLOW_COPY_AND_ASSIGN(SharedWorkerServiceImplTest); |
| 94 }; | 95 }; |
| 95 | 96 |
| 96 // static | 97 // static |
| 97 int SharedWorkerServiceImplTest::s_update_worker_dependency_call_count_; | 98 int SharedWorkerServiceImplTest::s_update_worker_dependency_call_count_; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 SharedWorkerServiceImplTest::RegisterRunningProcessID(process_id); | 182 SharedWorkerServiceImplTest::RegisterRunningProcessID(process_id); |
| 182 } | 183 } |
| 183 | 184 |
| 184 ~MockRendererProcessHost() { | 185 ~MockRendererProcessHost() { |
| 185 SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_); | 186 SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_); |
| 186 message_filter_->Close(); | 187 message_filter_->Close(); |
| 187 worker_filter_->Close(); | 188 worker_filter_->Close(); |
| 188 } | 189 } |
| 189 | 190 |
| 190 bool OnMessageReceived(IPC::Message* message) { | 191 bool OnMessageReceived(IPC::Message* message) { |
| 191 scoped_ptr<IPC::Message> msg(message); | 192 std::unique_ptr<IPC::Message> msg(message); |
| 192 const bool ret = message_filter_->OnMessageReceived(*message) || | 193 const bool ret = message_filter_->OnMessageReceived(*message) || |
| 193 worker_filter_->OnMessageReceived(*message); | 194 worker_filter_->OnMessageReceived(*message); |
| 194 if (message->is_sync()) { | 195 if (message->is_sync()) { |
| 195 CHECK(!queued_messages_.empty()); | 196 CHECK(!queued_messages_.empty()); |
| 196 const IPC::Message* response_msg = queued_messages_.back(); | 197 const IPC::Message* response_msg = queued_messages_.back(); |
| 197 IPC::SyncMessage* sync_msg = static_cast<IPC::SyncMessage*>(message); | 198 IPC::SyncMessage* sync_msg = static_cast<IPC::SyncMessage*>(message); |
| 198 scoped_ptr<IPC::MessageReplyDeserializer> reply_serializer( | 199 std::unique_ptr<IPC::MessageReplyDeserializer> reply_serializer( |
| 199 sync_msg->GetReplyDeserializer()); | 200 sync_msg->GetReplyDeserializer()); |
| 200 bool result = reply_serializer->SerializeOutputParameters(*response_msg); | 201 bool result = reply_serializer->SerializeOutputParameters(*response_msg); |
| 201 CHECK(result); | 202 CHECK(result); |
| 202 queued_messages_.pop_back(); | 203 queued_messages_.pop_back(); |
| 203 } | 204 } |
| 204 return ret; | 205 return ret; |
| 205 } | 206 } |
| 206 | 207 |
| 207 size_t QueuedMessageCount() const { return queued_messages_.size(); } | 208 size_t QueuedMessageCount() const { return queued_messages_.size(); } |
| 208 | 209 |
| 209 scoped_ptr<IPC::Message> PopMessage() { | 210 std::unique_ptr<IPC::Message> PopMessage() { |
| 210 CHECK(queued_messages_.size()); | 211 CHECK(queued_messages_.size()); |
| 211 scoped_ptr<IPC::Message> msg(*queued_messages_.begin()); | 212 std::unique_ptr<IPC::Message> msg(*queued_messages_.begin()); |
| 212 queued_messages_.weak_erase(queued_messages_.begin()); | 213 queued_messages_.weak_erase(queued_messages_.begin()); |
| 213 return msg; | 214 return msg; |
| 214 } | 215 } |
| 215 | 216 |
| 216 void FastShutdownIfPossible() { | 217 void FastShutdownIfPossible() { |
| 217 SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_); | 218 SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_); |
| 218 } | 219 } |
| 219 | 220 |
| 220 private: | 221 private: |
| 221 const int process_id_; | 222 const int process_id_; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 int local_port_id_; | 322 int local_port_id_; |
| 322 ViewHostMsg_CreateWorker_Reply create_worker_reply_; | 323 ViewHostMsg_CreateWorker_Reply create_worker_reply_; |
| 323 }; | 324 }; |
| 324 | 325 |
| 325 void CheckWorkerProcessMsgCreateWorker( | 326 void CheckWorkerProcessMsgCreateWorker( |
| 326 MockRendererProcessHost* renderer_host, | 327 MockRendererProcessHost* renderer_host, |
| 327 const std::string& expected_url, | 328 const std::string& expected_url, |
| 328 const std::string& expected_name, | 329 const std::string& expected_name, |
| 329 blink::WebContentSecurityPolicyType expected_security_policy_type, | 330 blink::WebContentSecurityPolicyType expected_security_policy_type, |
| 330 int* route_id) { | 331 int* route_id) { |
| 331 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 332 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 332 EXPECT_EQ(WorkerProcessMsg_CreateWorker::ID, msg->type()); | 333 EXPECT_EQ(WorkerProcessMsg_CreateWorker::ID, msg->type()); |
| 333 base::Tuple<WorkerProcessMsg_CreateWorker_Params> param; | 334 base::Tuple<WorkerProcessMsg_CreateWorker_Params> param; |
| 334 EXPECT_TRUE(WorkerProcessMsg_CreateWorker::Read(msg.get(), ¶m)); | 335 EXPECT_TRUE(WorkerProcessMsg_CreateWorker::Read(msg.get(), ¶m)); |
| 335 EXPECT_EQ(GURL(expected_url), base::get<0>(param).url); | 336 EXPECT_EQ(GURL(expected_url), base::get<0>(param).url); |
| 336 EXPECT_EQ(base::ASCIIToUTF16(expected_name), base::get<0>(param).name); | 337 EXPECT_EQ(base::ASCIIToUTF16(expected_name), base::get<0>(param).name); |
| 337 EXPECT_EQ(expected_security_policy_type, | 338 EXPECT_EQ(expected_security_policy_type, |
| 338 base::get<0>(param).security_policy_type); | 339 base::get<0>(param).security_policy_type); |
| 339 *route_id = base::get<0>(param).route_id; | 340 *route_id = base::get<0>(param).route_id; |
| 340 } | 341 } |
| 341 | 342 |
| 342 void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, | 343 void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, |
| 343 MockSharedWorkerConnector* connector) { | 344 MockSharedWorkerConnector* connector) { |
| 344 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 345 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 345 EXPECT_EQ(ViewMsg_WorkerCreated::ID, msg->type()); | 346 EXPECT_EQ(ViewMsg_WorkerCreated::ID, msg->type()); |
| 346 EXPECT_EQ(connector->route_id(), msg->routing_id()); | 347 EXPECT_EQ(connector->route_id(), msg->routing_id()); |
| 347 } | 348 } |
| 348 | 349 |
| 349 void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, | 350 void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, |
| 350 MockSharedWorkerConnector* connector) { | 351 MockSharedWorkerConnector* connector) { |
| 351 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 352 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 352 EXPECT_EQ(MessagePortMsg_MessagesQueued::ID, msg->type()); | 353 EXPECT_EQ(MessagePortMsg_MessagesQueued::ID, msg->type()); |
| 353 EXPECT_EQ(connector->temporary_remote_port_route_id(), msg->routing_id()); | 354 EXPECT_EQ(connector->temporary_remote_port_route_id(), msg->routing_id()); |
| 354 } | 355 } |
| 355 | 356 |
| 356 void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host, | 357 void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host, |
| 357 int expected_msg_route_id, | 358 int expected_msg_route_id, |
| 358 int expected_sent_message_port_id, | 359 int expected_sent_message_port_id, |
| 359 int* routing_id) { | 360 int* routing_id) { |
| 360 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 361 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 361 EXPECT_EQ(WorkerMsg_Connect::ID, msg->type()); | 362 EXPECT_EQ(WorkerMsg_Connect::ID, msg->type()); |
| 362 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); | 363 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); |
| 363 WorkerMsg_Connect::Param params; | 364 WorkerMsg_Connect::Param params; |
| 364 EXPECT_TRUE(WorkerMsg_Connect::Read(msg.get(), ¶ms)); | 365 EXPECT_TRUE(WorkerMsg_Connect::Read(msg.get(), ¶ms)); |
| 365 int port_id = base::get<0>(params); | 366 int port_id = base::get<0>(params); |
| 366 *routing_id = base::get<1>(params); | 367 *routing_id = base::get<1>(params); |
| 367 EXPECT_EQ(expected_sent_message_port_id, port_id); | 368 EXPECT_EQ(expected_sent_message_port_id, port_id); |
| 368 } | 369 } |
| 369 | 370 |
| 370 void CheckMessagePortMsgMessage(MockRendererProcessHost* renderer_host, | 371 void CheckMessagePortMsgMessage(MockRendererProcessHost* renderer_host, |
| 371 int expected_msg_route_id, | 372 int expected_msg_route_id, |
| 372 std::string expected_data) { | 373 std::string expected_data) { |
| 373 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 374 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 374 EXPECT_EQ(MessagePortMsg_Message::ID, msg->type()); | 375 EXPECT_EQ(MessagePortMsg_Message::ID, msg->type()); |
| 375 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); | 376 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); |
| 376 MessagePortMsg_Message::Param params; | 377 MessagePortMsg_Message::Param params; |
| 377 EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), ¶ms)); | 378 EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), ¶ms)); |
| 378 base::string16 data = base::get<0>(params).message_as_string; | 379 base::string16 data = base::get<0>(params).message_as_string; |
| 379 EXPECT_EQ(base::ASCIIToUTF16(expected_data), data); | 380 EXPECT_EQ(base::ASCIIToUTF16(expected_data), data); |
| 380 } | 381 } |
| 381 | 382 |
| 382 void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, | 383 void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, |
| 383 MockSharedWorkerConnector* connector) { | 384 MockSharedWorkerConnector* connector) { |
| 384 scoped_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 385 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 385 EXPECT_EQ(ViewMsg_WorkerConnected::ID, msg->type()); | 386 EXPECT_EQ(ViewMsg_WorkerConnected::ID, msg->type()); |
| 386 EXPECT_EQ(connector->route_id(), msg->routing_id()); | 387 EXPECT_EQ(connector->route_id(), msg->routing_id()); |
| 387 } | 388 } |
| 388 | 389 |
| 389 } // namespace | 390 } // namespace |
| 390 | 391 |
| 391 TEST_F(SharedWorkerServiceImplTest, BasicTest) { | 392 TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
| 392 scoped_ptr<MockRendererProcessHost> renderer_host( | 393 std::unique_ptr<MockRendererProcessHost> renderer_host( |
| 393 new MockRendererProcessHost(kProcessIDs[0], | 394 new MockRendererProcessHost(kProcessIDs[0], |
| 394 browser_context_->GetResourceContext(), | 395 browser_context_->GetResourceContext(), |
| 395 *partition_.get())); | 396 *partition_.get())); |
| 396 scoped_ptr<MockSharedWorkerConnector> connector( | 397 std::unique_ptr<MockSharedWorkerConnector> connector( |
| 397 new MockSharedWorkerConnector(renderer_host.get())); | 398 new MockSharedWorkerConnector(renderer_host.get())); |
| 398 int worker_route_id; | 399 int worker_route_id; |
| 399 int worker_msg_port_route_id; | 400 int worker_msg_port_route_id; |
| 400 | 401 |
| 401 // SharedWorkerConnector creates two message ports and sends | 402 // SharedWorkerConnector creates two message ports and sends |
| 402 // ViewHostMsg_CreateWorker. | 403 // ViewHostMsg_CreateWorker. |
| 403 connector->Create("http://example.com/w.js", | 404 connector->Create("http://example.com/w.js", |
| 404 "name", | 405 "name", |
| 405 kDocumentIDs[0], | 406 kDocumentIDs[0], |
| 406 kRenderFrameRouteIDs[0]); | 407 kRenderFrameRouteIDs[0]); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); | 480 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| 480 CheckMessagePortMsgMessage( | 481 CheckMessagePortMsgMessage( |
| 481 renderer_host.get(), connector->local_port_route_id(), "test2"); | 482 renderer_host.get(), connector->local_port_route_id(), "test2"); |
| 482 | 483 |
| 483 // UpdateWorkerDependency should not be called. | 484 // UpdateWorkerDependency should not be called. |
| 484 EXPECT_EQ(0, s_update_worker_dependency_call_count_); | 485 EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
| 485 } | 486 } |
| 486 | 487 |
| 487 TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { | 488 TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
| 488 // The first renderer host. | 489 // The first renderer host. |
| 489 scoped_ptr<MockRendererProcessHost> renderer_host0( | 490 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
| 490 new MockRendererProcessHost(kProcessIDs[0], | 491 new MockRendererProcessHost(kProcessIDs[0], |
| 491 browser_context_->GetResourceContext(), | 492 browser_context_->GetResourceContext(), |
| 492 *partition_.get())); | 493 *partition_.get())); |
| 493 scoped_ptr<MockSharedWorkerConnector> connector0( | 494 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 494 new MockSharedWorkerConnector(renderer_host0.get())); | 495 new MockSharedWorkerConnector(renderer_host0.get())); |
| 495 int worker_route_id; | 496 int worker_route_id; |
| 496 int worker_msg_port_route_id1; | 497 int worker_msg_port_route_id1; |
| 497 | 498 |
| 498 // SharedWorkerConnector creates two message ports and sends | 499 // SharedWorkerConnector creates two message ports and sends |
| 499 // ViewHostMsg_CreateWorker. | 500 // ViewHostMsg_CreateWorker. |
| 500 connector0->Create("http://example.com/w.js", | 501 connector0->Create("http://example.com/w.js", |
| 501 "name", | 502 "name", |
| 502 kDocumentIDs[0], | 503 kDocumentIDs[0], |
| 503 kRenderFrameRouteIDs[0]); | 504 kRenderFrameRouteIDs[0]); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 const std::vector<TransferredMessagePort> empty_ports; | 572 const std::vector<TransferredMessagePort> empty_ports; |
| 572 EXPECT_TRUE( | 573 EXPECT_TRUE( |
| 573 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( | 574 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
| 574 connector0->remote_port_id(), | 575 connector0->remote_port_id(), |
| 575 MessagePortMessage(base::ASCIIToUTF16("test2")), empty_ports))); | 576 MessagePortMessage(base::ASCIIToUTF16("test2")), empty_ports))); |
| 576 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); | 577 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| 577 CheckMessagePortMsgMessage( | 578 CheckMessagePortMsgMessage( |
| 578 renderer_host0.get(), connector0->local_port_route_id(), "test2"); | 579 renderer_host0.get(), connector0->local_port_route_id(), "test2"); |
| 579 | 580 |
| 580 // The second renderer host. | 581 // The second renderer host. |
| 581 scoped_ptr<MockRendererProcessHost> renderer_host1( | 582 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| 582 new MockRendererProcessHost(kProcessIDs[1], | 583 new MockRendererProcessHost(kProcessIDs[1], |
| 583 browser_context_->GetResourceContext(), | 584 browser_context_->GetResourceContext(), |
| 584 *partition_.get())); | 585 *partition_.get())); |
| 585 scoped_ptr<MockSharedWorkerConnector> connector1( | 586 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 586 new MockSharedWorkerConnector(renderer_host1.get())); | 587 new MockSharedWorkerConnector(renderer_host1.get())); |
| 587 int worker_msg_port_route_id2; | 588 int worker_msg_port_route_id2; |
| 588 | 589 |
| 589 // UpdateWorkerDependency should not be called yet. | 590 // UpdateWorkerDependency should not be called yet. |
| 590 EXPECT_EQ(0, s_update_worker_dependency_call_count_); | 591 EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
| 591 | 592 |
| 592 // SharedWorkerConnector creates two message ports and sends | 593 // SharedWorkerConnector creates two message ports and sends |
| 593 // ViewHostMsg_CreateWorker. | 594 // ViewHostMsg_CreateWorker. |
| 594 connector1->Create("http://example.com/w.js", | 595 connector1->Create("http://example.com/w.js", |
| 595 "name", | 596 "name", |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 renderer_host1.reset(); | 661 renderer_host1.reset(); |
| 661 // UpdateWorkerDependency should be called. | 662 // UpdateWorkerDependency should be called. |
| 662 EXPECT_EQ(2, s_update_worker_dependency_call_count_); | 663 EXPECT_EQ(2, s_update_worker_dependency_call_count_); |
| 663 EXPECT_EQ(0U, s_worker_dependency_added_ids_.size()); | 664 EXPECT_EQ(0U, s_worker_dependency_added_ids_.size()); |
| 664 EXPECT_EQ(1U, s_worker_dependency_removed_ids_.size()); | 665 EXPECT_EQ(1U, s_worker_dependency_removed_ids_.size()); |
| 665 EXPECT_EQ(kProcessIDs[0], s_worker_dependency_removed_ids_[0]); | 666 EXPECT_EQ(kProcessIDs[0], s_worker_dependency_removed_ids_[0]); |
| 666 } | 667 } |
| 667 | 668 |
| 668 TEST_F(SharedWorkerServiceImplTest, CreateWorkerTest) { | 669 TEST_F(SharedWorkerServiceImplTest, CreateWorkerTest) { |
| 669 // The first renderer host. | 670 // The first renderer host. |
| 670 scoped_ptr<MockRendererProcessHost> renderer_host0( | 671 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
| 671 new MockRendererProcessHost(kProcessIDs[0], | 672 new MockRendererProcessHost(kProcessIDs[0], |
| 672 browser_context_->GetResourceContext(), | 673 browser_context_->GetResourceContext(), |
| 673 *partition_.get())); | 674 *partition_.get())); |
| 674 // The second renderer host. | 675 // The second renderer host. |
| 675 scoped_ptr<MockRendererProcessHost> renderer_host1( | 676 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| 676 new MockRendererProcessHost(kProcessIDs[1], | 677 new MockRendererProcessHost(kProcessIDs[1], |
| 677 browser_context_->GetResourceContext(), | 678 browser_context_->GetResourceContext(), |
| 678 *partition_.get())); | 679 *partition_.get())); |
| 679 int worker_route_id; | 680 int worker_route_id; |
| 680 | 681 |
| 681 // Normal case. | 682 // Normal case. |
| 682 { | 683 { |
| 683 scoped_ptr<MockSharedWorkerConnector> connector0( | 684 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 684 new MockSharedWorkerConnector(renderer_host0.get())); | 685 new MockSharedWorkerConnector(renderer_host0.get())); |
| 685 scoped_ptr<MockSharedWorkerConnector> connector1( | 686 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 686 new MockSharedWorkerConnector(renderer_host1.get())); | 687 new MockSharedWorkerConnector(renderer_host1.get())); |
| 687 connector0->Create("http://example.com/w1.js", | 688 connector0->Create("http://example.com/w1.js", |
| 688 "name1", | 689 "name1", |
| 689 kDocumentIDs[0], | 690 kDocumentIDs[0], |
| 690 kRenderFrameRouteIDs[0]); | 691 kRenderFrameRouteIDs[0]); |
| 691 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 692 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 692 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 693 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 693 RunAllPendingInMessageLoop(); | 694 RunAllPendingInMessageLoop(); |
| 694 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 695 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 695 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 696 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 696 "http://example.com/w1.js", | 697 "http://example.com/w1.js", |
| 697 "name1", | 698 "name1", |
| 698 blink::WebContentSecurityPolicyTypeReport, | 699 blink::WebContentSecurityPolicyTypeReport, |
| 699 &worker_route_id); | 700 &worker_route_id); |
| 700 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 701 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 701 connector1->Create("http://example.com/w1.js", | 702 connector1->Create("http://example.com/w1.js", |
| 702 "name1", | 703 "name1", |
| 703 kDocumentIDs[1], | 704 kDocumentIDs[1], |
| 704 kRenderFrameRouteIDs[1]); | 705 kRenderFrameRouteIDs[1]); |
| 705 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); | 706 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 706 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 707 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 707 RunAllPendingInMessageLoop(); | 708 RunAllPendingInMessageLoop(); |
| 708 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); | 709 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| 709 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); | 710 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 710 } | 711 } |
| 711 | 712 |
| 712 // Normal case (URL mismatch). | 713 // Normal case (URL mismatch). |
| 713 { | 714 { |
| 714 scoped_ptr<MockSharedWorkerConnector> connector0( | 715 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 715 new MockSharedWorkerConnector(renderer_host0.get())); | 716 new MockSharedWorkerConnector(renderer_host0.get())); |
| 716 scoped_ptr<MockSharedWorkerConnector> connector1( | 717 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 717 new MockSharedWorkerConnector(renderer_host1.get())); | 718 new MockSharedWorkerConnector(renderer_host1.get())); |
| 718 connector0->Create("http://example.com/w2.js", | 719 connector0->Create("http://example.com/w2.js", |
| 719 "name2", | 720 "name2", |
| 720 kDocumentIDs[0], | 721 kDocumentIDs[0], |
| 721 kRenderFrameRouteIDs[0]); | 722 kRenderFrameRouteIDs[0]); |
| 722 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 723 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 723 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 724 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 724 RunAllPendingInMessageLoop(); | 725 RunAllPendingInMessageLoop(); |
| 725 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 726 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 726 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 727 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 727 "http://example.com/w2.js", | 728 "http://example.com/w2.js", |
| 728 "name2", | 729 "name2", |
| 729 blink::WebContentSecurityPolicyTypeReport, | 730 blink::WebContentSecurityPolicyTypeReport, |
| 730 &worker_route_id); | 731 &worker_route_id); |
| 731 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 732 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 732 connector1->Create("http://example.com/w2x.js", | 733 connector1->Create("http://example.com/w2x.js", |
| 733 "name2", | 734 "name2", |
| 734 kDocumentIDs[1], | 735 kDocumentIDs[1], |
| 735 kRenderFrameRouteIDs[1]); | 736 kRenderFrameRouteIDs[1]); |
| 736 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); | 737 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); |
| 737 EXPECT_EQ(blink::WebWorkerCreationErrorURLMismatch, | 738 EXPECT_EQ(blink::WebWorkerCreationErrorURLMismatch, |
| 738 connector1->creation_error()); | 739 connector1->creation_error()); |
| 739 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 740 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 740 RunAllPendingInMessageLoop(); | 741 RunAllPendingInMessageLoop(); |
| 741 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 742 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 742 } | 743 } |
| 743 | 744 |
| 744 // Pending case. | 745 // Pending case. |
| 745 { | 746 { |
| 746 scoped_ptr<MockSharedWorkerConnector> connector0( | 747 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 747 new MockSharedWorkerConnector(renderer_host0.get())); | 748 new MockSharedWorkerConnector(renderer_host0.get())); |
| 748 scoped_ptr<MockSharedWorkerConnector> connector1( | 749 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 749 new MockSharedWorkerConnector(renderer_host1.get())); | 750 new MockSharedWorkerConnector(renderer_host1.get())); |
| 750 connector0->Create("http://example.com/w3.js", | 751 connector0->Create("http://example.com/w3.js", |
| 751 "name3", | 752 "name3", |
| 752 kDocumentIDs[0], | 753 kDocumentIDs[0], |
| 753 kRenderFrameRouteIDs[0]); | 754 kRenderFrameRouteIDs[0]); |
| 754 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 755 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 755 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 756 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 756 connector1->Create("http://example.com/w3.js", | 757 connector1->Create("http://example.com/w3.js", |
| 757 "name3", | 758 "name3", |
| 758 kDocumentIDs[1], | 759 kDocumentIDs[1], |
| 759 kRenderFrameRouteIDs[1]); | 760 kRenderFrameRouteIDs[1]); |
| 760 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); | 761 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 761 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 762 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 762 RunAllPendingInMessageLoop(); | 763 RunAllPendingInMessageLoop(); |
| 763 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 764 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 764 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 765 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 765 "http://example.com/w3.js", | 766 "http://example.com/w3.js", |
| 766 "name3", | 767 "name3", |
| 767 blink::WebContentSecurityPolicyTypeReport, | 768 blink::WebContentSecurityPolicyTypeReport, |
| 768 &worker_route_id); | 769 &worker_route_id); |
| 769 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 770 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 770 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); | 771 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| 771 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); | 772 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 772 } | 773 } |
| 773 | 774 |
| 774 // Pending case (URL mismatch). | 775 // Pending case (URL mismatch). |
| 775 { | 776 { |
| 776 scoped_ptr<MockSharedWorkerConnector> connector0( | 777 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 777 new MockSharedWorkerConnector(renderer_host0.get())); | 778 new MockSharedWorkerConnector(renderer_host0.get())); |
| 778 scoped_ptr<MockSharedWorkerConnector> connector1( | 779 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 779 new MockSharedWorkerConnector(renderer_host1.get())); | 780 new MockSharedWorkerConnector(renderer_host1.get())); |
| 780 connector0->Create("http://example.com/w4.js", | 781 connector0->Create("http://example.com/w4.js", |
| 781 "name4", | 782 "name4", |
| 782 kDocumentIDs[0], | 783 kDocumentIDs[0], |
| 783 kRenderFrameRouteIDs[0]); | 784 kRenderFrameRouteIDs[0]); |
| 784 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 785 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 785 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 786 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 786 connector1->Create("http://example.com/w4x.js", | 787 connector1->Create("http://example.com/w4x.js", |
| 787 "name4", | 788 "name4", |
| 788 kDocumentIDs[1], | 789 kDocumentIDs[1], |
| 789 kRenderFrameRouteIDs[1]); | 790 kRenderFrameRouteIDs[1]); |
| 790 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); | 791 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); |
| 791 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 792 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 792 RunAllPendingInMessageLoop(); | 793 RunAllPendingInMessageLoop(); |
| 793 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 794 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 794 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 795 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 795 "http://example.com/w4.js", | 796 "http://example.com/w4.js", |
| 796 "name4", | 797 "name4", |
| 797 blink::WebContentSecurityPolicyTypeReport, | 798 blink::WebContentSecurityPolicyTypeReport, |
| 798 &worker_route_id); | 799 &worker_route_id); |
| 799 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 800 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 800 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 801 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 801 } | 802 } |
| 802 } | 803 } |
| 803 | 804 |
| 804 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest) { | 805 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest) { |
| 805 // Create three renderer hosts. | 806 // Create three renderer hosts. |
| 806 scoped_ptr<MockRendererProcessHost> renderer_host0( | 807 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
| 807 new MockRendererProcessHost(kProcessIDs[0], | 808 new MockRendererProcessHost(kProcessIDs[0], |
| 808 browser_context_->GetResourceContext(), | 809 browser_context_->GetResourceContext(), |
| 809 *partition_.get())); | 810 *partition_.get())); |
| 810 scoped_ptr<MockRendererProcessHost> renderer_host1( | 811 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| 811 new MockRendererProcessHost(kProcessIDs[1], | 812 new MockRendererProcessHost(kProcessIDs[1], |
| 812 browser_context_->GetResourceContext(), | 813 browser_context_->GetResourceContext(), |
| 813 *partition_.get())); | 814 *partition_.get())); |
| 814 scoped_ptr<MockRendererProcessHost> renderer_host2( | 815 std::unique_ptr<MockRendererProcessHost> renderer_host2( |
| 815 new MockRendererProcessHost(kProcessIDs[2], | 816 new MockRendererProcessHost(kProcessIDs[2], |
| 816 browser_context_->GetResourceContext(), | 817 browser_context_->GetResourceContext(), |
| 817 *partition_.get())); | 818 *partition_.get())); |
| 818 int worker_route_id; | 819 int worker_route_id; |
| 819 | 820 |
| 820 scoped_ptr<MockSharedWorkerConnector> connector0( | 821 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 821 new MockSharedWorkerConnector(renderer_host0.get())); | 822 new MockSharedWorkerConnector(renderer_host0.get())); |
| 822 scoped_ptr<MockSharedWorkerConnector> connector1( | 823 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 823 new MockSharedWorkerConnector(renderer_host1.get())); | 824 new MockSharedWorkerConnector(renderer_host1.get())); |
| 824 scoped_ptr<MockSharedWorkerConnector> connector2( | 825 std::unique_ptr<MockSharedWorkerConnector> connector2( |
| 825 new MockSharedWorkerConnector(renderer_host2.get())); | 826 new MockSharedWorkerConnector(renderer_host2.get())); |
| 826 connector0->Create("http://example.com/w1.js", | 827 connector0->Create("http://example.com/w1.js", |
| 827 "name1", | 828 "name1", |
| 828 kDocumentIDs[0], | 829 kDocumentIDs[0], |
| 829 kRenderFrameRouteIDs[0]); | 830 kRenderFrameRouteIDs[0]); |
| 830 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 831 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 831 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 832 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 832 RunAllPendingInMessageLoop(); | 833 RunAllPendingInMessageLoop(); |
| 833 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 834 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 834 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 835 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 860 kRenderFrameRouteIDs[2]); | 861 kRenderFrameRouteIDs[2]); |
| 861 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); | 862 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); |
| 862 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); | 863 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); |
| 863 RunAllPendingInMessageLoop(); | 864 RunAllPendingInMessageLoop(); |
| 864 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); | 865 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); |
| 865 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); | 866 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); |
| 866 } | 867 } |
| 867 | 868 |
| 868 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest2) { | 869 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest2) { |
| 869 // Create three renderer hosts. | 870 // Create three renderer hosts. |
| 870 scoped_ptr<MockRendererProcessHost> renderer_host0( | 871 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
| 871 new MockRendererProcessHost(kProcessIDs[0], | 872 new MockRendererProcessHost(kProcessIDs[0], |
| 872 browser_context_->GetResourceContext(), | 873 browser_context_->GetResourceContext(), |
| 873 *partition_.get())); | 874 *partition_.get())); |
| 874 scoped_ptr<MockRendererProcessHost> renderer_host1( | 875 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| 875 new MockRendererProcessHost(kProcessIDs[1], | 876 new MockRendererProcessHost(kProcessIDs[1], |
| 876 browser_context_->GetResourceContext(), | 877 browser_context_->GetResourceContext(), |
| 877 *partition_.get())); | 878 *partition_.get())); |
| 878 scoped_ptr<MockRendererProcessHost> renderer_host2( | 879 std::unique_ptr<MockRendererProcessHost> renderer_host2( |
| 879 new MockRendererProcessHost(kProcessIDs[2], | 880 new MockRendererProcessHost(kProcessIDs[2], |
| 880 browser_context_->GetResourceContext(), | 881 browser_context_->GetResourceContext(), |
| 881 *partition_.get())); | 882 *partition_.get())); |
| 882 int worker_route_id; | 883 int worker_route_id; |
| 883 | 884 |
| 884 scoped_ptr<MockSharedWorkerConnector> connector0( | 885 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 885 new MockSharedWorkerConnector(renderer_host0.get())); | 886 new MockSharedWorkerConnector(renderer_host0.get())); |
| 886 scoped_ptr<MockSharedWorkerConnector> connector1( | 887 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 887 new MockSharedWorkerConnector(renderer_host1.get())); | 888 new MockSharedWorkerConnector(renderer_host1.get())); |
| 888 scoped_ptr<MockSharedWorkerConnector> connector2( | 889 std::unique_ptr<MockSharedWorkerConnector> connector2( |
| 889 new MockSharedWorkerConnector(renderer_host2.get())); | 890 new MockSharedWorkerConnector(renderer_host2.get())); |
| 890 connector0->Create("http://example.com/w1.js", | 891 connector0->Create("http://example.com/w1.js", |
| 891 "name1", | 892 "name1", |
| 892 kDocumentIDs[0], | 893 kDocumentIDs[0], |
| 893 kRenderFrameRouteIDs[0]); | 894 kRenderFrameRouteIDs[0]); |
| 894 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 895 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 895 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 896 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 896 renderer_host0->FastShutdownIfPossible(); | 897 renderer_host0->FastShutdownIfPossible(); |
| 897 | 898 |
| 898 connector1->Create("http://example.com/w1.js", | 899 connector1->Create("http://example.com/w1.js", |
| (...skipping 16 matching lines...) Expand all Loading... |
| 915 kDocumentIDs[2], | 916 kDocumentIDs[2], |
| 916 kRenderFrameRouteIDs[2]); | 917 kRenderFrameRouteIDs[2]); |
| 917 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); | 918 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); |
| 918 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); | 919 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); |
| 919 RunAllPendingInMessageLoop(); | 920 RunAllPendingInMessageLoop(); |
| 920 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); | 921 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); |
| 921 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); | 922 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); |
| 922 } | 923 } |
| 923 | 924 |
| 924 } // namespace content | 925 } // namespace content |
| OLD | NEW |