Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: mojo/public/cpp/bindings/tests/associated_interface_unittest.cc

Issue 1811433002: [mojo-edk] Expose notification source to MojoWatch callbacks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/threading/thread.h" 13 #include "base/threading/thread.h"
14 #include "mojo/message_pump/message_pump_mojo.h" 14 #include "mojo/message_pump/message_pump_mojo.h"
15 #include "mojo/public/cpp/bindings/associated_binding.h" 15 #include "mojo/public/cpp/bindings/associated_binding.h"
16 #include "mojo/public/cpp/bindings/associated_group.h" 16 #include "mojo/public/cpp/bindings/associated_group.h"
17 #include "mojo/public/cpp/bindings/associated_interface_ptr.h" 17 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
18 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" 18 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
19 #include "mojo/public/cpp/bindings/associated_interface_request.h" 19 #include "mojo/public/cpp/bindings/associated_interface_request.h"
20 #include "mojo/public/cpp/bindings/binding.h" 20 #include "mojo/public/cpp/bindings/binding.h"
21 #include "mojo/public/cpp/bindings/lib/multiplex_router.h" 21 #include "mojo/public/cpp/bindings/lib/multiplex_router.h"
22 #include "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.h"
22 #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom .h" 23 #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom .h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 namespace mojo { 26 namespace mojo {
26 namespace test { 27 namespace test {
27 namespace { 28 namespace {
28 29
29 using mojo::internal::AssociatedInterfacePtrInfoHelper; 30 using mojo::internal::AssociatedInterfacePtrInfoHelper;
30 using mojo::internal::AssociatedInterfaceRequestHelper; 31 using mojo::internal::AssociatedInterfaceRequestHelper;
31 using mojo::internal::MultiplexRouter; 32 using mojo::internal::MultiplexRouter;
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 // There are no associated interfaces running on the pipe yet. It is okay to 576 // There are no associated interfaces running on the pipe yet. It is okay to
576 // wait. 577 // wait.
577 EXPECT_TRUE(connection.binding()->WaitForIncomingMethodCall()); 578 EXPECT_TRUE(connection.binding()->WaitForIncomingMethodCall());
578 579
579 // The previous wait has dispatched the GetSender request message, therefore 580 // The previous wait has dispatched the GetSender request message, therefore
580 // an associated interface has been set up on the pipe. It is not allowed to 581 // an associated interface has been set up on the pipe. It is not allowed to
581 // wait or pause. 582 // wait or pause.
582 EXPECT_TRUE(connection.binding()->HasAssociatedInterfaces()); 583 EXPECT_TRUE(connection.binding()->HasAssociatedInterfaces());
583 } 584 }
584 585
586 class SingleMethodImpl : public sample::SingleMethod {
587 public:
588 explicit SingleMethodImpl(const Closure& on_call,
yzshen1 2016/03/16 18:31:33 nit: explicit is not needed here, but needed on li
589 sample::SingleMethodAssociatedRequest request)
590 : on_call_(on_call), binding_(this, std::move(request)) {
591 }
592 ~SingleMethodImpl() override {}
593
594 void set_connection_error_handler(const Closure& handler) {
595 binding_.set_connection_error_handler(handler);
596 }
597
598 private:
599 // sample::SingleMethod:
600 void Call() override { on_call_.Run(); }
601
602 const Closure on_call_;
603 AssociatedBinding<SingleMethod> binding_;
604 };
605
606 class SingleMethodVendorImpl : public sample::SingleMethodVendor {
607 public:
608 SingleMethodVendorImpl(sample::SingleMethodVendorRequest request)
609 : binding_(this, std::move(request)) {
610 binding_.EnableImmediateDispatchOfEventsFromSameThread(true);
611 }
612 ~SingleMethodVendorImpl() override {}
613
614 void SetCallerCallback(const Closure& callback) {
615 caller_callback_ = callback;
616 }
617
618 void GetCaller(sample::SingleMethodAssociatedRequest request) override {
619 SingleMethodImpl* impl =
620 new SingleMethodImpl(caller_callback_, std::move(request));
621 impl->set_connection_error_handler([impl] { delete impl; });
622 }
623
624 private:
625 Binding<SingleMethodVendor> binding_;
626 Closure caller_callback_;
627 };
628
629 TEST_F(AssociatedInterfaceTest, SyncDispatch) {
630 sample::SingleMethodVendorPtr ptr;
631 SingleMethodVendorImpl vendor(GetProxy(&ptr));
632
633 bool called1 = false, called2 = false;
634 sample::SingleMethodAssociatedPtr caller1, caller2;
635
636 vendor.SetCallerCallback([&called1] {
637 EXPECT_FALSE(called1);
638 called1 = true;
639 });
640 ptr->GetCaller(GetProxy(&caller1, ptr.associated_group()));
641 vendor.SetCallerCallback([&called2] {
642 EXPECT_FALSE(called2);
643 called2 = true;
644 });
645 ptr->GetCaller(GetProxy(&caller2, ptr.associated_group()));
646
647 caller1->Call();
648 caller2->Call();
649
650 EXPECT_TRUE(called1);
651 EXPECT_TRUE(called2);
652
653 caller1.reset();
654 caller2.reset();
655 }
656
585 } // namespace 657 } // namespace
586 } // namespace test 658 } // namespace test
587 } // namespace mojo 659 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698