| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/callback_helpers.h" | 12 #include "base/callback_helpers.h" |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 16 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 17 #include "base/synchronization/waitable_event.h" | 17 #include "base/synchronization/waitable_event.h" |
| 18 #include "base/threading/sequenced_task_runner_handle.h" | 18 #include "base/threading/sequenced_task_runner_handle.h" |
| 19 #include "base/threading/thread.h" | 19 #include "base/threading/thread.h" |
| 20 #include "base/threading/thread_task_runner_handle.h" | 20 #include "base/threading/thread_task_runner_handle.h" |
| 21 #include "mojo/public/cpp/bindings/associated_binding.h" | 21 #include "mojo/public/cpp/bindings/associated_binding.h" |
| 22 #include "mojo/public/cpp/bindings/associated_group.h" | |
| 23 #include "mojo/public/cpp/bindings/associated_interface_ptr.h" | 22 #include "mojo/public/cpp/bindings/associated_interface_ptr.h" |
| 24 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" | 23 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" |
| 25 #include "mojo/public/cpp/bindings/associated_interface_request.h" | 24 #include "mojo/public/cpp/bindings/associated_interface_request.h" |
| 26 #include "mojo/public/cpp/bindings/binding.h" | 25 #include "mojo/public/cpp/bindings/binding.h" |
| 27 #include "mojo/public/cpp/bindings/lib/multiplex_router.h" | 26 #include "mojo/public/cpp/bindings/lib/multiplex_router.h" |
| 28 #include "mojo/public/cpp/bindings/strong_binding.h" | 27 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 29 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h" | 28 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h" |
| 30 #include "mojo/public/interfaces/bindings/tests/ping_service.mojom.h" | 29 #include "mojo/public/interfaces/bindings/tests/ping_service.mojom.h" |
| 31 #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom
.h" | 30 #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom
.h" |
| 32 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 | 72 |
| 74 ~IntegerSenderConnectionImpl() override {} | 73 ~IntegerSenderConnectionImpl() override {} |
| 75 | 74 |
| 76 void GetSender(AssociatedInterfaceRequest<IntegerSender> sender) override { | 75 void GetSender(AssociatedInterfaceRequest<IntegerSender> sender) override { |
| 77 IntegerSenderImpl* sender_impl = new IntegerSenderImpl(std::move(sender)); | 76 IntegerSenderImpl* sender_impl = new IntegerSenderImpl(std::move(sender)); |
| 78 sender_impl->set_connection_error_handler( | 77 sender_impl->set_connection_error_handler( |
| 79 base::Bind(&DeleteSender, sender_impl)); | 78 base::Bind(&DeleteSender, sender_impl)); |
| 80 } | 79 } |
| 81 | 80 |
| 82 void AsyncGetSender(const AsyncGetSenderCallback& callback) override { | 81 void AsyncGetSender(const AsyncGetSenderCallback& callback) override { |
| 83 AssociatedInterfaceRequest<IntegerSender> request; | |
| 84 IntegerSenderAssociatedPtrInfo ptr_info; | 82 IntegerSenderAssociatedPtrInfo ptr_info; |
| 85 binding_.associated_group()->CreateAssociatedInterface( | 83 auto request = MakeRequest(&ptr_info); |
| 86 AssociatedGroup::WILL_PASS_PTR, &ptr_info, &request); | |
| 87 GetSender(std::move(request)); | 84 GetSender(std::move(request)); |
| 88 callback.Run(std::move(ptr_info)); | 85 callback.Run(std::move(ptr_info)); |
| 89 } | 86 } |
| 90 | 87 |
| 91 Binding<IntegerSenderConnection>* binding() { return &binding_; } | 88 Binding<IntegerSenderConnection>* binding() { return &binding_; } |
| 92 | 89 |
| 93 private: | 90 private: |
| 94 static void DeleteSender(IntegerSenderImpl* sender) { delete sender; } | 91 static void DeleteSender(IntegerSenderImpl* sender) { delete sender; } |
| 95 | 92 |
| 96 Binding<IntegerSenderConnection> binding_; | 93 Binding<IntegerSenderConnection> binding_; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 124 *router1 = new MultiplexRouter(std::move(pipe.handle1), | 121 *router1 = new MultiplexRouter(std::move(pipe.handle1), |
| 125 MultiplexRouter::MULTI_INTERFACE, false, | 122 MultiplexRouter::MULTI_INTERFACE, false, |
| 126 base::ThreadTaskRunnerHandle::Get()); | 123 base::ThreadTaskRunnerHandle::Get()); |
| 127 } | 124 } |
| 128 | 125 |
| 129 void CreateIntegerSenderWithExistingRouters( | 126 void CreateIntegerSenderWithExistingRouters( |
| 130 scoped_refptr<MultiplexRouter> router0, | 127 scoped_refptr<MultiplexRouter> router0, |
| 131 IntegerSenderAssociatedPtrInfo* ptr_info0, | 128 IntegerSenderAssociatedPtrInfo* ptr_info0, |
| 132 scoped_refptr<MultiplexRouter> router1, | 129 scoped_refptr<MultiplexRouter> router1, |
| 133 IntegerSenderAssociatedRequest* request1) { | 130 IntegerSenderAssociatedRequest* request1) { |
| 134 AssociatedGroup dummy_group; | 131 *request1 = MakeRequest(ptr_info0); |
| 135 dummy_group.CreateAssociatedInterface(AssociatedGroup::WILL_PASS_PTR, | |
| 136 ptr_info0, request1); | |
| 137 *ptr_info0 = EmulatePassingAssociatedPtrInfo(std::move(*ptr_info0), router1, | 132 *ptr_info0 = EmulatePassingAssociatedPtrInfo(std::move(*ptr_info0), router1, |
| 138 router0); | 133 router0); |
| 139 } | 134 } |
| 140 | 135 |
| 141 void CreateIntegerSender(IntegerSenderAssociatedPtrInfo* ptr_info, | 136 void CreateIntegerSender(IntegerSenderAssociatedPtrInfo* ptr_info, |
| 142 IntegerSenderAssociatedRequest* request) { | 137 IntegerSenderAssociatedRequest* request) { |
| 143 scoped_refptr<MultiplexRouter> router0; | 138 scoped_refptr<MultiplexRouter> router0; |
| 144 scoped_refptr<MultiplexRouter> router1; | 139 scoped_refptr<MultiplexRouter> router1; |
| 145 CreateRouterPair(&router0, &router1); | 140 CreateRouterPair(&router0, &router1); |
| 146 CreateIntegerSenderWithExistingRouters(router1, ptr_info, router0, request); | 141 CreateIntegerSenderWithExistingRouters(router1, ptr_info, router0, request); |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 IntegerSenderAssociatedPtrInfo info) { | 547 IntegerSenderAssociatedPtrInfo info) { |
| 553 storage->Bind(std::move(info)); | 548 storage->Bind(std::move(info)); |
| 554 closure.Run(); | 549 closure.Run(); |
| 555 } | 550 } |
| 556 | 551 |
| 557 TEST_F(AssociatedInterfaceTest, PassAssociatedInterfaces) { | 552 TEST_F(AssociatedInterfaceTest, PassAssociatedInterfaces) { |
| 558 IntegerSenderConnectionPtr connection_ptr; | 553 IntegerSenderConnectionPtr connection_ptr; |
| 559 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); | 554 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); |
| 560 | 555 |
| 561 IntegerSenderAssociatedPtr sender0; | 556 IntegerSenderAssociatedPtr sender0; |
| 562 connection_ptr->GetSender( | 557 connection_ptr->GetSender(MakeRequest(&sender0)); |
| 563 MakeRequest(&sender0, connection_ptr.associated_group())); | |
| 564 | 558 |
| 565 int32_t echoed_value = 0; | 559 int32_t echoed_value = 0; |
| 566 base::RunLoop run_loop; | 560 base::RunLoop run_loop; |
| 567 sender0->Echo(123, base::Bind(&CaptureInt32, &echoed_value, | 561 sender0->Echo(123, base::Bind(&CaptureInt32, &echoed_value, |
| 568 run_loop.QuitClosure())); | 562 run_loop.QuitClosure())); |
| 569 run_loop.Run(); | 563 run_loop.Run(); |
| 570 EXPECT_EQ(123, echoed_value); | 564 EXPECT_EQ(123, echoed_value); |
| 571 | 565 |
| 572 IntegerSenderAssociatedPtr sender1; | 566 IntegerSenderAssociatedPtr sender1; |
| 573 base::RunLoop run_loop2; | 567 base::RunLoop run_loop2; |
| 574 connection_ptr->AsyncGetSender( | 568 connection_ptr->AsyncGetSender( |
| 575 base::Bind(&CaptureSenderPtrInfo, &sender1, run_loop2.QuitClosure())); | 569 base::Bind(&CaptureSenderPtrInfo, &sender1, run_loop2.QuitClosure())); |
| 576 run_loop2.Run(); | 570 run_loop2.Run(); |
| 577 EXPECT_TRUE(sender1); | 571 EXPECT_TRUE(sender1); |
| 578 | 572 |
| 579 base::RunLoop run_loop3; | 573 base::RunLoop run_loop3; |
| 580 sender1->Echo(456, base::Bind(&CaptureInt32, &echoed_value, | 574 sender1->Echo(456, base::Bind(&CaptureInt32, &echoed_value, |
| 581 run_loop3.QuitClosure())); | 575 run_loop3.QuitClosure())); |
| 582 run_loop3.Run(); | 576 run_loop3.Run(); |
| 583 EXPECT_EQ(456, echoed_value); | 577 EXPECT_EQ(456, echoed_value); |
| 584 } | 578 } |
| 585 | 579 |
| 586 TEST_F(AssociatedInterfaceTest, BindingWaitAndPauseWhenNoAssociatedInterfaces) { | 580 TEST_F(AssociatedInterfaceTest, BindingWaitAndPauseWhenNoAssociatedInterfaces) { |
| 587 IntegerSenderConnectionPtr connection_ptr; | 581 IntegerSenderConnectionPtr connection_ptr; |
| 588 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); | 582 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); |
| 589 | 583 |
| 590 IntegerSenderAssociatedPtr sender0; | 584 IntegerSenderAssociatedPtr sender0; |
| 591 connection_ptr->GetSender( | 585 connection_ptr->GetSender(MakeRequest(&sender0)); |
| 592 MakeRequest(&sender0, connection_ptr.associated_group())); | |
| 593 | 586 |
| 594 EXPECT_FALSE(connection.binding()->HasAssociatedInterfaces()); | 587 EXPECT_FALSE(connection.binding()->HasAssociatedInterfaces()); |
| 595 // There are no associated interfaces running on the pipe yet. It is okay to | 588 // There are no associated interfaces running on the pipe yet. It is okay to |
| 596 // pause. | 589 // pause. |
| 597 connection.binding()->PauseIncomingMethodCallProcessing(); | 590 connection.binding()->PauseIncomingMethodCallProcessing(); |
| 598 connection.binding()->ResumeIncomingMethodCallProcessing(); | 591 connection.binding()->ResumeIncomingMethodCallProcessing(); |
| 599 | 592 |
| 600 // There are no associated interfaces running on the pipe yet. It is okay to | 593 // There are no associated interfaces running on the pipe yet. It is okay to |
| 601 // wait. | 594 // wait. |
| 602 EXPECT_TRUE(connection.binding()->WaitForIncomingMethodCall()); | 595 EXPECT_TRUE(connection.binding()->WaitForIncomingMethodCall()); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 }; | 683 }; |
| 691 | 684 |
| 692 // Verifies that filters work as expected on associated bindings, i.e. that | 685 // Verifies that filters work as expected on associated bindings, i.e. that |
| 693 // they're notified in order, before dispatch; and that each associated | 686 // they're notified in order, before dispatch; and that each associated |
| 694 // binding in a group operates with its own set of filters. | 687 // binding in a group operates with its own set of filters. |
| 695 TEST_F(AssociatedInterfaceTest, BindingWithFilters) { | 688 TEST_F(AssociatedInterfaceTest, BindingWithFilters) { |
| 696 AssociatedPingProviderPtr provider; | 689 AssociatedPingProviderPtr provider; |
| 697 PingProviderImpl provider_impl(MakeRequest(&provider)); | 690 PingProviderImpl provider_impl(MakeRequest(&provider)); |
| 698 | 691 |
| 699 PingServiceAssociatedPtr ping_a, ping_b; | 692 PingServiceAssociatedPtr ping_a, ping_b; |
| 700 provider->GetPing(MakeRequest(&ping_a, provider.associated_group())); | 693 provider->GetPing(MakeRequest(&ping_a)); |
| 701 provider->GetPing(MakeRequest(&ping_b, provider.associated_group())); | 694 provider->GetPing(MakeRequest(&ping_b)); |
| 702 provider_impl.WaitForBindings(2); | 695 provider_impl.WaitForBindings(2); |
| 703 | 696 |
| 704 ASSERT_EQ(2u, provider_impl.ping_services().size()); | 697 ASSERT_EQ(2u, provider_impl.ping_services().size()); |
| 705 PingServiceImpl& ping_a_impl = *provider_impl.ping_services()[0]; | 698 PingServiceImpl& ping_a_impl = *provider_impl.ping_services()[0]; |
| 706 PingServiceImpl& ping_b_impl = *provider_impl.ping_services()[1]; | 699 PingServiceImpl& ping_b_impl = *provider_impl.ping_services()[1]; |
| 707 | 700 |
| 708 int a_status, b_status; | 701 int a_status, b_status; |
| 709 auto handler_helper = [] (int* a_status, int* b_status, int expected_a_status, | 702 auto handler_helper = [] (int* a_status, int* b_status, int expected_a_status, |
| 710 int new_a_status, int expected_b_status, | 703 int new_a_status, int expected_b_status, |
| 711 int new_b_status) { | 704 int new_b_status) { |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 } | 862 } |
| 870 | 863 |
| 871 TEST_F(AssociatedInterfaceTest, StrongBindingFlushForTesting) { | 864 TEST_F(AssociatedInterfaceTest, StrongBindingFlushForTesting) { |
| 872 IntegerSenderConnectionPtr ptr; | 865 IntegerSenderConnectionPtr ptr; |
| 873 auto binding = | 866 auto binding = |
| 874 MakeStrongBinding(base::MakeUnique<IntegerSenderConnectionImpl>( | 867 MakeStrongBinding(base::MakeUnique<IntegerSenderConnectionImpl>( |
| 875 IntegerSenderConnectionRequest{}), | 868 IntegerSenderConnectionRequest{}), |
| 876 MakeRequest(&ptr)); | 869 MakeRequest(&ptr)); |
| 877 bool called = false; | 870 bool called = false; |
| 878 IntegerSenderAssociatedPtr sender_ptr; | 871 IntegerSenderAssociatedPtr sender_ptr; |
| 879 ptr->GetSender(MakeRequest(&sender_ptr, ptr.associated_group())); | 872 ptr->GetSender(MakeRequest(&sender_ptr)); |
| 880 sender_ptr->Echo(1, base::Bind(&SetBoolWithUnusedParameter<int>, &called)); | 873 sender_ptr->Echo(1, base::Bind(&SetBoolWithUnusedParameter<int>, &called)); |
| 881 EXPECT_FALSE(called); | 874 EXPECT_FALSE(called); |
| 882 // Because the flush is sent from the binding, it only guarantees that the | 875 // Because the flush is sent from the binding, it only guarantees that the |
| 883 // request has been received, not the response. The second flush waits for the | 876 // request has been received, not the response. The second flush waits for the |
| 884 // response to be received. | 877 // response to be received. |
| 885 ASSERT_TRUE(binding); | 878 ASSERT_TRUE(binding); |
| 886 binding->FlushForTesting(); | 879 binding->FlushForTesting(); |
| 887 ASSERT_TRUE(binding); | 880 ASSERT_TRUE(binding); |
| 888 binding->FlushForTesting(); | 881 binding->FlushForTesting(); |
| 889 EXPECT_TRUE(called); | 882 EXPECT_TRUE(called); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 950 ptr.ResetWithReason(123u, "farewell"); | 943 ptr.ResetWithReason(123u, "farewell"); |
| 951 | 944 |
| 952 run_loop.Run(); | 945 run_loop.Run(); |
| 953 } | 946 } |
| 954 | 947 |
| 955 TEST_F(AssociatedInterfaceTest, | 948 TEST_F(AssociatedInterfaceTest, |
| 956 PendingAssociatedBindingConnectionErrorWithReason) { | 949 PendingAssociatedBindingConnectionErrorWithReason) { |
| 957 // Test that AssociatedBinding is notified with connection error when the | 950 // Test that AssociatedBinding is notified with connection error when the |
| 958 // interface hasn't associated with a message pipe and the peer is closed. | 951 // interface hasn't associated with a message pipe and the peer is closed. |
| 959 | 952 |
| 960 AssociatedGroup dummy_group; | |
| 961 IntegerSenderAssociatedPtr ptr; | 953 IntegerSenderAssociatedPtr ptr; |
| 962 IntegerSenderImpl impl(MakeRequest(&ptr, &dummy_group)); | 954 IntegerSenderImpl impl(MakeRequest(&ptr)); |
| 963 | 955 |
| 964 base::RunLoop run_loop; | 956 base::RunLoop run_loop; |
| 965 impl.binding()->set_connection_error_with_reason_handler(base::Bind( | 957 impl.binding()->set_connection_error_with_reason_handler(base::Bind( |
| 966 [](const base::Closure& quit_closure, uint32_t custom_reason, | 958 [](const base::Closure& quit_closure, uint32_t custom_reason, |
| 967 const std::string& description) { | 959 const std::string& description) { |
| 968 EXPECT_EQ(123u, custom_reason); | 960 EXPECT_EQ(123u, custom_reason); |
| 969 EXPECT_EQ("farewell", description); | 961 EXPECT_EQ("farewell", description); |
| 970 quit_closure.Run(); | 962 quit_closure.Run(); |
| 971 }, | 963 }, |
| 972 run_loop.QuitClosure())); | 964 run_loop.QuitClosure())); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 997 | 989 |
| 998 impl.binding()->CloseWithReason(456u, "farewell"); | 990 impl.binding()->CloseWithReason(456u, "farewell"); |
| 999 | 991 |
| 1000 run_loop.Run(); | 992 run_loop.Run(); |
| 1001 } | 993 } |
| 1002 | 994 |
| 1003 TEST_F(AssociatedInterfaceTest, PendingAssociatedPtrConnectionErrorWithReason) { | 995 TEST_F(AssociatedInterfaceTest, PendingAssociatedPtrConnectionErrorWithReason) { |
| 1004 // Test that AssociatedInterfacePtr is notified with connection error when the | 996 // Test that AssociatedInterfacePtr is notified with connection error when the |
| 1005 // interface hasn't associated with a message pipe and the peer is closed. | 997 // interface hasn't associated with a message pipe and the peer is closed. |
| 1006 | 998 |
| 1007 AssociatedGroup dummy_group; | |
| 1008 IntegerSenderAssociatedPtr ptr; | 999 IntegerSenderAssociatedPtr ptr; |
| 1009 auto request = MakeRequest(&ptr, &dummy_group); | 1000 auto request = MakeRequest(&ptr); |
| 1010 | 1001 |
| 1011 base::RunLoop run_loop; | 1002 base::RunLoop run_loop; |
| 1012 ptr.set_connection_error_with_reason_handler(base::Bind( | 1003 ptr.set_connection_error_with_reason_handler(base::Bind( |
| 1013 [](const base::Closure& quit_closure, uint32_t custom_reason, | 1004 [](const base::Closure& quit_closure, uint32_t custom_reason, |
| 1014 const std::string& description) { | 1005 const std::string& description) { |
| 1015 EXPECT_EQ(456u, custom_reason); | 1006 EXPECT_EQ(456u, custom_reason); |
| 1016 EXPECT_EQ("farewell", description); | 1007 EXPECT_EQ("farewell", description); |
| 1017 quit_closure.Run(); | 1008 quit_closure.Run(); |
| 1018 }, | 1009 }, |
| 1019 run_loop.QuitClosure())); | 1010 run_loop.QuitClosure())); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1044 request.ResetWithReason(789u, "long time no see"); | 1035 request.ResetWithReason(789u, "long time no see"); |
| 1045 | 1036 |
| 1046 run_loop.Run(); | 1037 run_loop.Run(); |
| 1047 } | 1038 } |
| 1048 | 1039 |
| 1049 TEST_F(AssociatedInterfaceTest, ThreadSafeAssociatedInterfacePtr) { | 1040 TEST_F(AssociatedInterfaceTest, ThreadSafeAssociatedInterfacePtr) { |
| 1050 IntegerSenderConnectionPtr connection_ptr; | 1041 IntegerSenderConnectionPtr connection_ptr; |
| 1051 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); | 1042 IntegerSenderConnectionImpl connection(MakeRequest(&connection_ptr)); |
| 1052 | 1043 |
| 1053 IntegerSenderAssociatedPtr sender; | 1044 IntegerSenderAssociatedPtr sender; |
| 1054 connection_ptr->GetSender( | 1045 connection_ptr->GetSender(MakeRequest(&sender)); |
| 1055 MakeRequest(&sender, connection_ptr.associated_group())); | |
| 1056 | 1046 |
| 1057 scoped_refptr<ThreadSafeIntegerSenderAssociatedPtr> thread_safe_sender = | 1047 scoped_refptr<ThreadSafeIntegerSenderAssociatedPtr> thread_safe_sender = |
| 1058 ThreadSafeIntegerSenderAssociatedPtr::Create(std::move(sender)); | 1048 ThreadSafeIntegerSenderAssociatedPtr::Create(std::move(sender)); |
| 1059 | 1049 |
| 1060 { | 1050 { |
| 1061 // Test the thread safe pointer can be used from the interface ptr thread. | 1051 // Test the thread safe pointer can be used from the interface ptr thread. |
| 1062 int32_t echoed_value = 0; | 1052 int32_t echoed_value = 0; |
| 1063 base::RunLoop run_loop; | 1053 base::RunLoop run_loop; |
| 1064 (*thread_safe_sender) | 1054 (*thread_safe_sender) |
| 1065 ->Echo(123, base::Bind(&CaptureInt32, &echoed_value, | 1055 ->Echo(123, base::Bind(&CaptureInt32, &echoed_value, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 IntegerSenderAssociatedPtrInfo sender_info; | 1109 IntegerSenderAssociatedPtrInfo sender_info; |
| 1120 base::WaitableEvent sender_info_bound_event( | 1110 base::WaitableEvent sender_info_bound_event( |
| 1121 base::WaitableEvent::ResetPolicy::MANUAL, | 1111 base::WaitableEvent::ResetPolicy::MANUAL, |
| 1122 base::WaitableEvent::InitialState::NOT_SIGNALED); | 1112 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 1123 auto setup = [](base::WaitableEvent* sender_info_bound_event, | 1113 auto setup = [](base::WaitableEvent* sender_info_bound_event, |
| 1124 IntegerSenderAssociatedPtrInfo* sender_info, | 1114 IntegerSenderAssociatedPtrInfo* sender_info, |
| 1125 ForwarderTestContext* context) { | 1115 ForwarderTestContext* context) { |
| 1126 context->interface_impl = base::MakeUnique<IntegerSenderConnectionImpl>( | 1116 context->interface_impl = base::MakeUnique<IntegerSenderConnectionImpl>( |
| 1127 MakeRequest(&context->connection_ptr)); | 1117 MakeRequest(&context->connection_ptr)); |
| 1128 | 1118 |
| 1129 IntegerSenderAssociatedPtr sender; | 1119 auto sender_request = MakeRequest(sender_info); |
| 1130 IntegerSenderAssociatedRequest sender_request = | |
| 1131 MakeRequest(&sender, context->connection_ptr.associated_group()); | |
| 1132 *sender_info = sender.PassInterface(); | |
| 1133 | |
| 1134 context->connection_ptr->GetSender(std::move(sender_request)); | 1120 context->connection_ptr->GetSender(std::move(sender_request)); |
| 1135 | 1121 |
| 1136 // Unblock the main thread as soon as |sender_info| is set. | 1122 // Unblock the main thread as soon as |sender_info| is set. |
| 1137 sender_info_bound_event->Signal(); | 1123 sender_info_bound_event->Signal(); |
| 1138 }; | 1124 }; |
| 1139 other_thread_task_runner->PostTask( | 1125 other_thread_task_runner->PostTask( |
| 1140 FROM_HERE, | 1126 FROM_HERE, |
| 1141 base::Bind(setup, &sender_info_bound_event, &sender_info, context)); | 1127 base::Bind(setup, &sender_info_bound_event, &sender_info, context)); |
| 1142 sender_info_bound_event.Wait(); | 1128 sender_info_bound_event.Wait(); |
| 1143 | 1129 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1177 void GetPingProvider( | 1163 void GetPingProvider( |
| 1178 AssociatedPingProviderAssociatedRequest request) override {} | 1164 AssociatedPingProviderAssociatedRequest request) override {} |
| 1179 }; | 1165 }; |
| 1180 | 1166 |
| 1181 TEST_F(AssociatedInterfaceTest, CloseWithoutBindingAssociatedRequest) { | 1167 TEST_F(AssociatedInterfaceTest, CloseWithoutBindingAssociatedRequest) { |
| 1182 DiscardingAssociatedPingProviderProvider ping_provider_provider; | 1168 DiscardingAssociatedPingProviderProvider ping_provider_provider; |
| 1183 mojo::Binding<AssociatedPingProviderProvider> binding( | 1169 mojo::Binding<AssociatedPingProviderProvider> binding( |
| 1184 &ping_provider_provider); | 1170 &ping_provider_provider); |
| 1185 auto provider_provider = binding.CreateInterfacePtrAndBind(); | 1171 auto provider_provider = binding.CreateInterfacePtrAndBind(); |
| 1186 AssociatedPingProviderAssociatedPtr provider; | 1172 AssociatedPingProviderAssociatedPtr provider; |
| 1187 provider_provider->GetPingProvider( | 1173 provider_provider->GetPingProvider(mojo::MakeRequest(&provider)); |
| 1188 mojo::MakeRequest(&provider, provider_provider.associated_group())); | |
| 1189 PingServiceAssociatedPtr ping; | 1174 PingServiceAssociatedPtr ping; |
| 1190 provider->GetPing( | 1175 provider->GetPing(mojo::MakeRequest(&ping)); |
| 1191 mojo::MakeRequest(&ping, provider.associated_group())); | |
| 1192 base::RunLoop run_loop; | 1176 base::RunLoop run_loop; |
| 1193 ping.set_connection_error_handler(run_loop.QuitClosure()); | 1177 ping.set_connection_error_handler(run_loop.QuitClosure()); |
| 1194 run_loop.Run(); | 1178 run_loop.Run(); |
| 1195 } | 1179 } |
| 1196 | 1180 |
| 1197 } // namespace | 1181 } // namespace |
| 1198 } // namespace test | 1182 } // namespace test |
| 1199 } // namespace mojo | 1183 } // namespace mojo |
| OLD | NEW |