Chromium Code Reviews| Index: mojo/public/cpp/bindings/tests/associated_interface_unittest.cc |
| diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc |
| index f368dfcc78fd64523af2d405f12cb4444939441b..80f82402881c6dc669ac880df93b0578d284b046 100644 |
| --- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc |
| +++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc |
| @@ -19,6 +19,7 @@ |
| #include "mojo/public/cpp/bindings/associated_interface_request.h" |
| #include "mojo/public/cpp/bindings/binding.h" |
| #include "mojo/public/cpp/bindings/lib/multiplex_router.h" |
| +#include "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.h" |
| #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -582,6 +583,77 @@ TEST_F(AssociatedInterfaceTest, BindingWaitAndPauseWhenNoAssociatedInterfaces) { |
| EXPECT_TRUE(connection.binding()->HasAssociatedInterfaces()); |
| } |
| +class SingleMethodImpl : public sample::SingleMethod { |
| + public: |
| + explicit SingleMethodImpl(const Closure& on_call, |
|
yzshen1
2016/03/16 18:31:33
nit: explicit is not needed here, but needed on li
|
| + sample::SingleMethodAssociatedRequest request) |
| + : on_call_(on_call), binding_(this, std::move(request)) { |
| + } |
| + ~SingleMethodImpl() override {} |
| + |
| + void set_connection_error_handler(const Closure& handler) { |
| + binding_.set_connection_error_handler(handler); |
| + } |
| + |
| + private: |
| + // sample::SingleMethod: |
| + void Call() override { on_call_.Run(); } |
| + |
| + const Closure on_call_; |
| + AssociatedBinding<SingleMethod> binding_; |
| +}; |
| + |
| +class SingleMethodVendorImpl : public sample::SingleMethodVendor { |
| + public: |
| + SingleMethodVendorImpl(sample::SingleMethodVendorRequest request) |
| + : binding_(this, std::move(request)) { |
| + binding_.EnableImmediateDispatchOfEventsFromSameThread(true); |
| + } |
| + ~SingleMethodVendorImpl() override {} |
| + |
| + void SetCallerCallback(const Closure& callback) { |
| + caller_callback_ = callback; |
| + } |
| + |
| + void GetCaller(sample::SingleMethodAssociatedRequest request) override { |
| + SingleMethodImpl* impl = |
| + new SingleMethodImpl(caller_callback_, std::move(request)); |
| + impl->set_connection_error_handler([impl] { delete impl; }); |
| + } |
| + |
| + private: |
| + Binding<SingleMethodVendor> binding_; |
| + Closure caller_callback_; |
| +}; |
| + |
| +TEST_F(AssociatedInterfaceTest, SyncDispatch) { |
| + sample::SingleMethodVendorPtr ptr; |
| + SingleMethodVendorImpl vendor(GetProxy(&ptr)); |
| + |
| + bool called1 = false, called2 = false; |
| + sample::SingleMethodAssociatedPtr caller1, caller2; |
| + |
| + vendor.SetCallerCallback([&called1] { |
| + EXPECT_FALSE(called1); |
| + called1 = true; |
| + }); |
| + ptr->GetCaller(GetProxy(&caller1, ptr.associated_group())); |
| + vendor.SetCallerCallback([&called2] { |
| + EXPECT_FALSE(called2); |
| + called2 = true; |
| + }); |
| + ptr->GetCaller(GetProxy(&caller2, ptr.associated_group())); |
| + |
| + caller1->Call(); |
| + caller2->Call(); |
| + |
| + EXPECT_TRUE(called1); |
| + EXPECT_TRUE(called2); |
| + |
| + caller1.reset(); |
| + caller2.reset(); |
| +} |
| + |
| } // namespace |
| } // namespace test |
| } // namespace mojo |