| 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> |
| (...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 732 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 733 "http://example.com/w2.js", | 733 "http://example.com/w2.js", |
| 734 "name2", | 734 "name2", |
| 735 blink::WebContentSecurityPolicyTypeReport, | 735 blink::WebContentSecurityPolicyTypeReport, |
| 736 &worker_route_id); | 736 &worker_route_id); |
| 737 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 737 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 738 connector1->Create("http://example.com/w2x.js", | 738 connector1->Create("http://example.com/w2x.js", |
| 739 "name2", | 739 "name2", |
| 740 kDocumentIDs[1], | 740 kDocumentIDs[1], |
| 741 kRenderFrameRouteIDs[1]); | 741 kRenderFrameRouteIDs[1]); |
| 742 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); | 742 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 743 EXPECT_EQ(blink::WebWorkerCreationErrorURLMismatch, | 743 EXPECT_EQ(blink::WebWorkerCreationErrorNone, connector1->creation_error()); |
| 744 connector1->creation_error()); | |
| 745 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 744 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 746 RunAllPendingInMessageLoop(); | 745 RunAllPendingInMessageLoop(); |
| 747 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 746 EXPECT_EQ(2U, renderer_host1->QueuedMessageCount()); |
| 747 CheckWorkerProcessMsgCreateWorker( |
| 748 renderer_host1.get(), "http://example.com/w2x.js", "name2", |
| 749 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 750 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 748 } | 751 } |
| 749 | 752 |
| 750 // Pending case. | 753 // Normal case (name mismatch). |
| 751 { | 754 { |
| 752 std::unique_ptr<MockSharedWorkerConnector> connector0( | 755 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 753 new MockSharedWorkerConnector(renderer_host0.get())); | 756 new MockSharedWorkerConnector(renderer_host0.get())); |
| 754 std::unique_ptr<MockSharedWorkerConnector> connector1( | 757 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 755 new MockSharedWorkerConnector(renderer_host1.get())); | 758 new MockSharedWorkerConnector(renderer_host1.get())); |
| 756 connector0->Create("http://example.com/w3.js", | 759 connector0->Create("http://example.com/w3.js", |
| 757 "name3", | 760 "name3", |
| 758 kDocumentIDs[0], | 761 kDocumentIDs[0], |
| 759 kRenderFrameRouteIDs[0]); | 762 kRenderFrameRouteIDs[0]); |
| 760 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 763 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 761 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 764 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 762 connector1->Create("http://example.com/w3.js", | 765 RunAllPendingInMessageLoop(); |
| 763 "name3", | 766 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 764 kDocumentIDs[1], | 767 CheckWorkerProcessMsgCreateWorker( |
| 768 renderer_host0.get(), "http://example.com/w3.js", "name3", |
| 769 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 770 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 771 connector1->Create("http://example.com/w3.js", "name3x", kDocumentIDs[1], |
| 765 kRenderFrameRouteIDs[1]); | 772 kRenderFrameRouteIDs[1]); |
| 766 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); | 773 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 774 EXPECT_EQ(blink::WebWorkerCreationErrorNone, connector1->creation_error()); |
| 767 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 775 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 768 RunAllPendingInMessageLoop(); | 776 RunAllPendingInMessageLoop(); |
| 769 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 777 EXPECT_EQ(2U, renderer_host1->QueuedMessageCount()); |
| 770 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 778 CheckWorkerProcessMsgCreateWorker( |
| 771 "http://example.com/w3.js", | 779 renderer_host1.get(), "http://example.com/w3.js", "name3x", |
| 772 "name3", | 780 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 773 blink::WebContentSecurityPolicyTypeReport, | |
| 774 &worker_route_id); | |
| 775 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | |
| 776 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); | |
| 777 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); | 781 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 778 } | 782 } |
| 779 | 783 |
| 780 // Pending case (URL mismatch). | 784 // Pending case. |
| 781 { | 785 { |
| 782 std::unique_ptr<MockSharedWorkerConnector> connector0( | 786 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 783 new MockSharedWorkerConnector(renderer_host0.get())); | 787 new MockSharedWorkerConnector(renderer_host0.get())); |
| 784 std::unique_ptr<MockSharedWorkerConnector> connector1( | 788 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 785 new MockSharedWorkerConnector(renderer_host1.get())); | 789 new MockSharedWorkerConnector(renderer_host1.get())); |
| 786 connector0->Create("http://example.com/w4.js", | 790 connector0->Create("http://example.com/w4.js", |
| 787 "name4", | 791 "name4", |
| 788 kDocumentIDs[0], | 792 kDocumentIDs[0], |
| 789 kRenderFrameRouteIDs[0]); | 793 kRenderFrameRouteIDs[0]); |
| 790 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); | 794 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 791 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); | 795 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 792 connector1->Create("http://example.com/w4x.js", | 796 connector1->Create("http://example.com/w4.js", "name4", kDocumentIDs[1], |
| 793 "name4", | |
| 794 kDocumentIDs[1], | |
| 795 kRenderFrameRouteIDs[1]); | 797 kRenderFrameRouteIDs[1]); |
| 796 EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id()); | 798 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 797 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 799 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 798 RunAllPendingInMessageLoop(); | 800 RunAllPendingInMessageLoop(); |
| 799 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); | 801 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 800 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), | 802 CheckWorkerProcessMsgCreateWorker(renderer_host0.get(), |
| 801 "http://example.com/w4.js", | 803 "http://example.com/w4.js", |
| 802 "name4", | 804 "name4", |
| 803 blink::WebContentSecurityPolicyTypeReport, | 805 blink::WebContentSecurityPolicyTypeReport, |
| 804 &worker_route_id); | 806 &worker_route_id); |
| 805 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); | 807 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 808 EXPECT_EQ(1U, renderer_host1->QueuedMessageCount()); |
| 809 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 810 } |
| 811 |
| 812 // Pending case (URL mismatch). |
| 813 { |
| 814 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 815 new MockSharedWorkerConnector(renderer_host0.get())); |
| 816 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 817 new MockSharedWorkerConnector(renderer_host1.get())); |
| 818 connector0->Create("http://example.com/w5.js", "name5", kDocumentIDs[0], |
| 819 kRenderFrameRouteIDs[0]); |
| 820 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 821 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 822 connector1->Create("http://example.com/w5x.js", "name5", kDocumentIDs[1], |
| 823 kRenderFrameRouteIDs[1]); |
| 824 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 806 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); | 825 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 826 RunAllPendingInMessageLoop(); |
| 827 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 828 CheckWorkerProcessMsgCreateWorker( |
| 829 renderer_host0.get(), "http://example.com/w5.js", "name5", |
| 830 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 831 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 832 EXPECT_EQ(2U, renderer_host1->QueuedMessageCount()); |
| 833 CheckWorkerProcessMsgCreateWorker( |
| 834 renderer_host1.get(), "http://example.com/w5x.js", "name5", |
| 835 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 836 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 837 } |
| 838 |
| 839 // Pending case (name mismatch). |
| 840 { |
| 841 std::unique_ptr<MockSharedWorkerConnector> connector0( |
| 842 new MockSharedWorkerConnector(renderer_host0.get())); |
| 843 std::unique_ptr<MockSharedWorkerConnector> connector1( |
| 844 new MockSharedWorkerConnector(renderer_host1.get())); |
| 845 connector0->Create("http://example.com/w6.js", "name6", kDocumentIDs[0], |
| 846 kRenderFrameRouteIDs[0]); |
| 847 EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id()); |
| 848 EXPECT_EQ(0U, renderer_host0->QueuedMessageCount()); |
| 849 connector1->Create("http://example.com/w6.js", "name6x", kDocumentIDs[1], |
| 850 kRenderFrameRouteIDs[1]); |
| 851 EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id()); |
| 852 EXPECT_EQ(0U, renderer_host1->QueuedMessageCount()); |
| 853 RunAllPendingInMessageLoop(); |
| 854 EXPECT_EQ(2U, renderer_host0->QueuedMessageCount()); |
| 855 CheckWorkerProcessMsgCreateWorker( |
| 856 renderer_host0.get(), "http://example.com/w6.js", "name6", |
| 857 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 858 CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get()); |
| 859 EXPECT_EQ(2U, renderer_host1->QueuedMessageCount()); |
| 860 CheckWorkerProcessMsgCreateWorker( |
| 861 renderer_host1.get(), "http://example.com/w6.js", "name6x", |
| 862 blink::WebContentSecurityPolicyTypeReport, &worker_route_id); |
| 863 CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get()); |
| 807 } | 864 } |
| 808 } | 865 } |
| 809 | 866 |
| 810 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest) { | 867 TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest) { |
| 811 // Create three renderer hosts. | 868 // Create three renderer hosts. |
| 812 std::unique_ptr<MockRendererProcessHost> renderer_host0( | 869 std::unique_ptr<MockRendererProcessHost> renderer_host0( |
| 813 new MockRendererProcessHost(kProcessIDs[0], | 870 new MockRendererProcessHost(kProcessIDs[0], |
| 814 browser_context_->GetResourceContext(), | 871 browser_context_->GetResourceContext(), |
| 815 *partition_.get())); | 872 *partition_.get())); |
| 816 std::unique_ptr<MockRendererProcessHost> renderer_host1( | 873 std::unique_ptr<MockRendererProcessHost> renderer_host1( |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 kDocumentIDs[2], | 978 kDocumentIDs[2], |
| 922 kRenderFrameRouteIDs[2]); | 979 kRenderFrameRouteIDs[2]); |
| 923 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); | 980 EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id()); |
| 924 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); | 981 EXPECT_EQ(0U, renderer_host2->QueuedMessageCount()); |
| 925 RunAllPendingInMessageLoop(); | 982 RunAllPendingInMessageLoop(); |
| 926 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); | 983 EXPECT_EQ(1U, renderer_host2->QueuedMessageCount()); |
| 927 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); | 984 CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get()); |
| 928 } | 985 } |
| 929 | 986 |
| 930 } // namespace content | 987 } // namespace content |
| OLD | NEW |