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 |