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" | 5 #include "content/browser/shared_worker/shared_worker_service_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <memory> | 10 #include <memory> |
11 #include <set> | 11 #include <set> |
12 #include <string> | 12 #include <string> |
13 #include <tuple> | 13 #include <tuple> |
14 | 14 |
15 #include "base/atomic_sequence_num.h" | 15 #include "base/atomic_sequence_num.h" |
16 #include "base/macros.h" | 16 #include "base/macros.h" |
17 #include "base/memory/ptr_util.h" | 17 #include "base/memory/ptr_util.h" |
18 #include "base/strings/string16.h" | 18 #include "base/strings/string16.h" |
19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
20 #include "base/synchronization/lock.h" | 20 #include "base/synchronization/lock.h" |
21 #include "content/browser/message_port_message_filter.h" | 21 #include "content/browser/message_port_message_filter.h" |
22 #include "content/browser/shared_worker/shared_worker_message_filter.h" | 22 #include "content/browser/shared_worker/shared_worker_message_filter.h" |
23 #include "content/browser/shared_worker/worker_storage_partition.h" | 23 #include "content/browser/shared_worker/worker_storage_partition.h" |
24 #include "content/common/message_port_messages.h" | 24 #include "content/common/message_port_messages.h" |
25 #include "content/common/view_messages.h" | 25 #include "content/common/view_messages.h" |
26 #include "content/common/worker_messages.h" | 26 #include "content/common/worker_messages.h" |
| 27 #include "content/common/worker_use_counter.h" |
27 #include "content/public/browser/storage_partition.h" | 28 #include "content/public/browser/storage_partition.h" |
28 #include "content/public/test/test_browser_context.h" | 29 #include "content/public/test/test_browser_context.h" |
29 #include "content/public/test/test_browser_thread_bundle.h" | 30 #include "content/public/test/test_browser_thread_bundle.h" |
30 #include "content/public/test/test_utils.h" | 31 #include "content/public/test/test_utils.h" |
31 #include "ipc/ipc_sync_message.h" | 32 #include "ipc/ipc_sync_message.h" |
32 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
33 | 34 |
34 namespace content { | 35 namespace content { |
35 | 36 |
36 class SharedWorkerServiceImplTest : public testing::Test { | 37 class SharedWorkerServiceImplTest : public testing::Test { |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 *route_id = std::get<0>(param).route_id; | 345 *route_id = std::get<0>(param).route_id; |
345 } | 346 } |
346 | 347 |
347 void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, | 348 void CheckViewMsgWorkerCreated(MockRendererProcessHost* renderer_host, |
348 MockSharedWorkerConnector* connector) { | 349 MockSharedWorkerConnector* connector) { |
349 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 350 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
350 EXPECT_EQ(ViewMsg_WorkerCreated::ID, msg->type()); | 351 EXPECT_EQ(ViewMsg_WorkerCreated::ID, msg->type()); |
351 EXPECT_EQ(connector->route_id(), msg->routing_id()); | 352 EXPECT_EQ(connector->route_id(), msg->routing_id()); |
352 } | 353 } |
353 | 354 |
| 355 void CheckViewMsgCountFeature(MockRendererProcessHost* renderer_host, |
| 356 MockSharedWorkerConnector* connector, |
| 357 uint32_t expected_feature) { |
| 358 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
| 359 EXPECT_EQ(ViewMsg_CountFeatureOnSharedWorker::ID, msg->type()); |
| 360 EXPECT_EQ(connector->route_id(), msg->routing_id()); |
| 361 ViewMsg_CountFeatureOnSharedWorker::Param params; |
| 362 EXPECT_TRUE(ViewMsg_CountFeatureOnSharedWorker::Read(msg.get(), ¶ms)); |
| 363 uint32_t feature = std::get<0>(params); |
| 364 EXPECT_EQ(expected_feature, feature); |
| 365 } |
| 366 |
354 void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, | 367 void CheckMessagePortMsgMessagesQueued(MockRendererProcessHost* renderer_host, |
355 MockSharedWorkerConnector* connector) { | 368 MockSharedWorkerConnector* connector) { |
356 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 369 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
357 EXPECT_EQ(MessagePortMsg_MessagesQueued::ID, msg->type()); | 370 EXPECT_EQ(MessagePortMsg_MessagesQueued::ID, msg->type()); |
358 EXPECT_EQ(connector->temporary_remote_port_route_id(), msg->routing_id()); | 371 EXPECT_EQ(connector->temporary_remote_port_route_id(), msg->routing_id()); |
359 } | 372 } |
360 | 373 |
361 void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host, | 374 void CheckWorkerMsgConnect(MockRendererProcessHost* renderer_host, |
362 int expected_msg_route_id, | 375 int expected_msg_route_id, |
363 int expected_sent_message_port_id, | 376 int expected_sent_message_port_id, |
(...skipping 14 matching lines...) Expand all Loading... |
378 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 391 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
379 EXPECT_EQ(MessagePortMsg_Message::ID, msg->type()); | 392 EXPECT_EQ(MessagePortMsg_Message::ID, msg->type()); |
380 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); | 393 EXPECT_EQ(expected_msg_route_id, msg->routing_id()); |
381 MessagePortMsg_Message::Param params; | 394 MessagePortMsg_Message::Param params; |
382 EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), ¶ms)); | 395 EXPECT_TRUE(MessagePortMsg_Message::Read(msg.get(), ¶ms)); |
383 base::string16 data = std::get<0>(params); | 396 base::string16 data = std::get<0>(params); |
384 EXPECT_EQ(base::ASCIIToUTF16(expected_data), data); | 397 EXPECT_EQ(base::ASCIIToUTF16(expected_data), data); |
385 } | 398 } |
386 | 399 |
387 void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, | 400 void CheckViewMsgWorkerConnected(MockRendererProcessHost* renderer_host, |
388 MockSharedWorkerConnector* connector) { | 401 MockSharedWorkerConnector* connector, |
| 402 std::vector<uint32_t> expected_features) { |
389 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); | 403 std::unique_ptr<IPC::Message> msg(renderer_host->PopMessage()); |
390 EXPECT_EQ(ViewMsg_WorkerConnected::ID, msg->type()); | 404 EXPECT_EQ(ViewMsg_WorkerConnected::ID, msg->type()); |
391 EXPECT_EQ(connector->route_id(), msg->routing_id()); | 405 EXPECT_EQ(connector->route_id(), msg->routing_id()); |
| 406 ViewMsg_WorkerConnected::Param params; |
| 407 EXPECT_TRUE(ViewMsg_WorkerConnected::Read(msg.get(), ¶ms)); |
| 408 std::vector<char> dumped = std::get<0>(params); |
| 409 WorkerUseCounter counter(dumped); |
| 410 for (uint32_t feature : expected_features) |
| 411 EXPECT_TRUE(counter.IsCounted(feature)); |
392 } | 412 } |
393 | 413 |
394 } // namespace | 414 } // namespace |
395 | 415 |
396 TEST_F(SharedWorkerServiceImplTest, BasicTest) { | 416 TEST_F(SharedWorkerServiceImplTest, BasicTest) { |
397 std::unique_ptr<MockRendererProcessHost> renderer_host( | 417 std::unique_ptr<MockRendererProcessHost> renderer_host( |
398 new MockRendererProcessHost(kProcessIDs[0], | 418 new MockRendererProcessHost(kProcessIDs[0], |
399 browser_context_->GetResourceContext(), | 419 browser_context_->GetResourceContext(), |
400 *partition_.get())); | 420 *partition_.get())); |
401 std::unique_ptr<MockSharedWorkerConnector> connector( | 421 std::unique_ptr<MockSharedWorkerConnector> connector( |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 new WorkerHostMsg_WorkerScriptLoaded(worker_route_id))); | 478 new WorkerHostMsg_WorkerScriptLoaded(worker_route_id))); |
459 EXPECT_EQ(0U, renderer_host->QueuedMessageCount()); | 479 EXPECT_EQ(0U, renderer_host->QueuedMessageCount()); |
460 | 480 |
461 // SharedWorker sends WorkerHostMsg_WorkerConnected in | 481 // SharedWorker sends WorkerHostMsg_WorkerConnected in |
462 // EmbeddedSharedWorkerStub::workerScriptLoaded(). | 482 // EmbeddedSharedWorkerStub::workerScriptLoaded(). |
463 EXPECT_TRUE( | 483 EXPECT_TRUE( |
464 renderer_host->OnMessageReceived(new WorkerHostMsg_WorkerConnected( | 484 renderer_host->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
465 connector->remote_port_id(), worker_route_id))); | 485 connector->remote_port_id(), worker_route_id))); |
466 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); | 486 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
467 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. | 487 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
468 CheckViewMsgWorkerConnected(renderer_host.get(), connector.get()); | 488 CheckViewMsgWorkerConnected(renderer_host.get(), connector.get(), |
| 489 std::vector<uint32_t>()); |
469 | 490 |
470 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, | 491 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
471 // SharedWorker side shuold receive MessagePortMsg_Message. | 492 // SharedWorker side shuold receive MessagePortMsg_Message. |
472 connector->SendPostMessage("test1"); | 493 connector->SendPostMessage("test1"); |
473 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); | 494 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
474 CheckMessagePortMsgMessage( | 495 CheckMessagePortMsgMessage( |
475 renderer_host.get(), worker_msg_port_route_id, "test1"); | 496 renderer_host.get(), worker_msg_port_route_id, "test1"); |
476 | 497 |
477 // When SharedWorker side sends MessagePortHostMsg_PostMessage, | 498 // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
478 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. | 499 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
479 const std::vector<int> empty_ports; | 500 const std::vector<int> empty_ports; |
480 EXPECT_TRUE( | 501 EXPECT_TRUE( |
481 renderer_host->OnMessageReceived(new MessagePortHostMsg_PostMessage( | 502 renderer_host->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
482 connector->remote_port_id(), | 503 connector->remote_port_id(), |
483 base::ASCIIToUTF16("test2"), empty_ports))); | 504 base::ASCIIToUTF16("test2"), empty_ports))); |
484 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); | 505 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
485 CheckMessagePortMsgMessage( | 506 CheckMessagePortMsgMessage( |
486 renderer_host.get(), connector->local_port_route_id(), "test2"); | 507 renderer_host.get(), connector->local_port_route_id(), "test2"); |
487 | 508 |
| 509 // SharedWorker sends WorkerHostMsg_CountFeature in |
| 510 // EmbeddedSharedWorkerStub::CountFeature(). |
| 511 uint32_t feature1 = 124; |
| 512 EXPECT_TRUE(renderer_host->OnMessageReceived( |
| 513 new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
| 514 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| 515 // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
| 516 CheckViewMsgCountFeature(renderer_host.get(), connector.get(), feature1); |
| 517 // A message should be sent only one time per feature. |
| 518 EXPECT_TRUE(renderer_host->OnMessageReceived( |
| 519 new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
| 520 EXPECT_EQ(0U, renderer_host->QueuedMessageCount()); |
| 521 |
| 522 // SharedWorker sends WorkerHostMsg_CountFeature in |
| 523 // EmbeddedSharedWorkerStub::CountFeature() for another feature use. |
| 524 uint32_t feature2 = 901; |
| 525 EXPECT_TRUE(renderer_host->OnMessageReceived( |
| 526 new WorkerHostMsg_CountFeature(worker_route_id, feature2))); |
| 527 EXPECT_EQ(1U, renderer_host->QueuedMessageCount()); |
| 528 // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
| 529 CheckViewMsgCountFeature(renderer_host.get(), connector.get(), feature2); |
| 530 |
488 // UpdateWorkerDependency should not be called. | 531 // UpdateWorkerDependency should not be called. |
489 EXPECT_EQ(0, s_update_worker_dependency_call_count_); | 532 EXPECT_EQ(0, s_update_worker_dependency_call_count_); |
490 } | 533 } |
491 | 534 |
492 TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { | 535 TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) { |
493 // The first renderer host. | 536 // The first renderer host. |
494 std::unique_ptr<MockRendererProcessHost> renderer_host0( | 537 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
495 new MockRendererProcessHost(kProcessIDs[0], | 538 new MockRendererProcessHost(kProcessIDs[0], |
496 browser_context_->GetResourceContext(), | 539 browser_context_->GetResourceContext(), |
497 *partition_.get())); | 540 *partition_.get())); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 new WorkerHostMsg_WorkerScriptLoaded(worker_route_id))); | 598 new WorkerHostMsg_WorkerScriptLoaded(worker_route_id))); |
556 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 599 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
557 | 600 |
558 // SharedWorker sends WorkerHostMsg_WorkerConnected in | 601 // SharedWorker sends WorkerHostMsg_WorkerConnected in |
559 // EmbeddedSharedWorkerStub::workerScriptLoaded(). | 602 // EmbeddedSharedWorkerStub::workerScriptLoaded(). |
560 EXPECT_TRUE( | 603 EXPECT_TRUE( |
561 renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( | 604 renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
562 connector0->remote_port_id(), worker_route_id))); | 605 connector0->remote_port_id(), worker_route_id))); |
563 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); | 606 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
564 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. | 607 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
565 CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get()); | 608 CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get(), |
| 609 std::vector<uint32_t>()); |
566 | 610 |
567 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, | 611 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
568 // SharedWorker side shuold receive MessagePortMsg_Message. | 612 // SharedWorker side shuold receive MessagePortMsg_Message. |
569 connector0->SendPostMessage("test1"); | 613 connector0->SendPostMessage("test1"); |
570 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); | 614 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
571 CheckMessagePortMsgMessage( | 615 CheckMessagePortMsgMessage( |
572 renderer_host0.get(), worker_msg_port_route_id1, "test1"); | 616 renderer_host0.get(), worker_msg_port_route_id1, "test1"); |
573 | 617 |
574 // When SharedWorker side sends MessagePortHostMsg_PostMessage, | 618 // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
575 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. | 619 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
576 const std::vector<int> empty_ports; | 620 const std::vector<int> empty_ports; |
577 EXPECT_TRUE( | 621 EXPECT_TRUE( |
578 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( | 622 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
579 connector0->remote_port_id(), | 623 connector0->remote_port_id(), |
580 base::ASCIIToUTF16("test2"), empty_ports))); | 624 base::ASCIIToUTF16("test2"), empty_ports))); |
581 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); | 625 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
582 CheckMessagePortMsgMessage( | 626 CheckMessagePortMsgMessage( |
583 renderer_host0.get(), connector0->local_port_route_id(), "test2"); | 627 renderer_host0.get(), connector0->local_port_route_id(), "test2"); |
584 | 628 |
| 629 // SharedWorker sends WorkerHostMsg_CountFeature in |
| 630 // EmbeddedSharedWorkerStub::CountFeature(). |
| 631 uint32_t feature1 = 124; |
| 632 EXPECT_TRUE(renderer_host0->OnMessageReceived( |
| 633 new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
| 634 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| 635 // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
| 636 CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature1); |
| 637 uint32_t feature2 = 901; |
| 638 EXPECT_TRUE(renderer_host0->OnMessageReceived( |
| 639 new WorkerHostMsg_CountFeature(worker_route_id, feature2))); |
| 640 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| 641 // ViewMsg_CountFeature should be sent to SharedWorkerConnector side. |
| 642 CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature2); |
| 643 |
585 // The second renderer host. | 644 // The second renderer host. |
586 std::unique_ptr<MockRendererProcessHost> renderer_host1( | 645 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
587 new MockRendererProcessHost(kProcessIDs[1], | 646 new MockRendererProcessHost(kProcessIDs[1], |
588 browser_context_->GetResourceContext(), | 647 browser_context_->GetResourceContext(), |
589 *partition_.get())); | 648 *partition_.get())); |
590 std::unique_ptr<MockSharedWorkerConnector> connector1( | 649 std::unique_ptr<MockSharedWorkerConnector> connector1( |
591 new MockSharedWorkerConnector(renderer_host1.get())); | 650 new MockSharedWorkerConnector(renderer_host1.get())); |
592 int worker_msg_port_route_id2; | 651 int worker_msg_port_route_id2; |
593 | 652 |
594 // UpdateWorkerDependency should not be called yet. | 653 // UpdateWorkerDependency should not be called yet. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 connector1->SendSendQueuedMessages(empty_messages); | 694 connector1->SendSendQueuedMessages(empty_messages); |
636 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 695 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
637 | 696 |
638 // SharedWorker sends WorkerHostMsg_WorkerConnected in | 697 // SharedWorker sends WorkerHostMsg_WorkerConnected in |
639 // EmbeddedSharedWorkerStub::OnConnect(). | 698 // EmbeddedSharedWorkerStub::OnConnect(). |
640 EXPECT_TRUE( | 699 EXPECT_TRUE( |
641 renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( | 700 renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected( |
642 connector1->remote_port_id(), worker_route_id))); | 701 connector1->remote_port_id(), worker_route_id))); |
643 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); | 702 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
644 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. | 703 // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side. |
645 CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get()); | 704 CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get(), |
| 705 {feature1, feature2}); |
646 | 706 |
647 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, | 707 // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage, |
648 // SharedWorker side shuold receive MessagePortMsg_Message. | 708 // SharedWorker side shuold receive MessagePortMsg_Message. |
649 connector1->SendPostMessage("test3"); | 709 connector1->SendPostMessage("test3"); |
650 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); | 710 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
651 CheckMessagePortMsgMessage( | 711 CheckMessagePortMsgMessage( |
652 renderer_host0.get(), worker_msg_port_route_id2, "test3"); | 712 renderer_host0.get(), worker_msg_port_route_id2, "test3"); |
653 | 713 |
654 // When SharedWorker side sends MessagePortHostMsg_PostMessage, | 714 // When SharedWorker side sends MessagePortHostMsg_PostMessage, |
655 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. | 715 // SharedWorkerConnector side shuold receive MessagePortMsg_Message. |
656 EXPECT_TRUE( | 716 EXPECT_TRUE( |
657 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( | 717 renderer_host0->OnMessageReceived(new MessagePortHostMsg_PostMessage( |
658 connector1->remote_port_id(), | 718 connector1->remote_port_id(), |
659 base::ASCIIToUTF16("test4"), empty_ports))); | 719 base::ASCIIToUTF16("test4"), empty_ports))); |
660 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); | 720 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
661 CheckMessagePortMsgMessage( | 721 CheckMessagePortMsgMessage( |
662 renderer_host1.get(), connector1->local_port_route_id(), "test4"); | 722 renderer_host1.get(), connector1->local_port_route_id(), "test4"); |
663 | 723 |
| 724 // SharedWorker sends WorkerHostMsg_CountFeature in |
| 725 // EmbeddedSharedWorkerStub::CountFeature(). These features are already |
| 726 // counted in the browser-side, so messages should not be sent to |
| 727 // SharedWorkerConnectors. |
| 728 EXPECT_TRUE(renderer_host0->OnMessageReceived( |
| 729 new WorkerHostMsg_CountFeature(worker_route_id, feature1))); |
| 730 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 731 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 732 |
| 733 // SharedWorker sends WorkerHostMsg_CountFeature in |
| 734 // EmbeddedSharedWorkerStub::CountFeature() for another feature use. |
| 735 uint32_t feature3 = 1019; |
| 736 EXPECT_TRUE(renderer_host0->OnMessageReceived( |
| 737 new WorkerHostMsg_CountFeature(worker_route_id, feature3))); |
| 738 // ViewMsg_CountFeature should be sent to all SharedWorkerConnectors |
| 739 // connecting to this worker. |
| 740 EXPECT_EQ(1U, renderer_host0->QueuedMessageCount()); |
| 741 CheckViewMsgCountFeature(renderer_host0.get(), connector0.get(), feature3); |
| 742 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| 743 CheckViewMsgCountFeature(renderer_host1.get(), connector1.get(), feature3); |
| 744 |
664 EXPECT_EQ(1, s_update_worker_dependency_call_count_); | 745 EXPECT_EQ(1, s_update_worker_dependency_call_count_); |
665 renderer_host1.reset(); | 746 renderer_host1.reset(); |
666 // UpdateWorkerDependency should be called. | 747 // UpdateWorkerDependency should be called. |
667 EXPECT_EQ(2, s_update_worker_dependency_call_count_); | 748 EXPECT_EQ(2, s_update_worker_dependency_call_count_); |
668 EXPECT_EQ(0U, s_worker_dependency_added_ids_.size()); | 749 EXPECT_EQ(0U, s_worker_dependency_added_ids_.size()); |
669 EXPECT_EQ(1U, s_worker_dependency_removed_ids_.size()); | 750 EXPECT_EQ(1U, s_worker_dependency_removed_ids_.size()); |
670 EXPECT_EQ(kProcessIDs[0], s_worker_dependency_removed_ids_[0]); | 751 EXPECT_EQ(kProcessIDs[0], s_worker_dependency_removed_ids_[0]); |
671 } | 752 } |
672 | 753 |
673 TEST_F(SharedWorkerServiceImplTest, CreateWorkerTest) { | 754 TEST_F(SharedWorkerServiceImplTest, CreateWorkerTest) { |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 kDocumentIDs[2], | 1058 kDocumentIDs[2], |
978 kRenderFrameRouteIDs[2]); | 1059 kRenderFrameRouteIDs[2]); |
979 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); | 1060 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); |
980 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); | 1061 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); |
981 RunAllPendingInMessageLoop(); | 1062 RunAllPendingInMessageLoop(); |
982 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); | 1063 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); |
983 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); | 1064 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); |
984 } | 1065 } |
985 | 1066 |
986 } // namespace content | 1067 } // namespace content |
OLD | NEW |