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 |