• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "mojo/public/cpp/bindings/lib/binding_state.h"
6 
7 namespace mojo {
8 namespace internal {
9 
10 BindingStateBase::BindingStateBase() = default;
11 
12 BindingStateBase::~BindingStateBase() = default;
13 
AddFilter(std::unique_ptr<MessageReceiver> filter)14 void BindingStateBase::AddFilter(std::unique_ptr<MessageReceiver> filter) {
15   DCHECK(endpoint_client_);
16   endpoint_client_->AddFilter(std::move(filter));
17 }
18 
HasAssociatedInterfaces() const19 bool BindingStateBase::HasAssociatedInterfaces() const {
20   return router_ ? router_->HasAssociatedEndpoints() : false;
21 }
22 
PauseIncomingMethodCallProcessing()23 void BindingStateBase::PauseIncomingMethodCallProcessing() {
24   DCHECK(router_);
25   router_->PauseIncomingMethodCallProcessing();
26 }
ResumeIncomingMethodCallProcessing()27 void BindingStateBase::ResumeIncomingMethodCallProcessing() {
28   DCHECK(router_);
29   router_->ResumeIncomingMethodCallProcessing();
30 }
31 
WaitForIncomingMethodCall(MojoDeadline deadline)32 bool BindingStateBase::WaitForIncomingMethodCall(MojoDeadline deadline) {
33   DCHECK(router_);
34   return router_->WaitForIncomingMessage(deadline);
35 }
36 
Close()37 void BindingStateBase::Close() {
38   if (!router_)
39     return;
40 
41   endpoint_client_.reset();
42   router_->CloseMessagePipe();
43   router_ = nullptr;
44 }
45 
CloseWithReason(uint32_t custom_reason,const std::string & description)46 void BindingStateBase::CloseWithReason(uint32_t custom_reason,
47                                        const std::string& description) {
48   if (endpoint_client_)
49     endpoint_client_->CloseWithReason(custom_reason, description);
50 
51   Close();
52 }
53 
FlushForTesting()54 void BindingStateBase::FlushForTesting() {
55   endpoint_client_->FlushForTesting();
56 }
57 
EnableTestingMode()58 void BindingStateBase::EnableTestingMode() {
59   DCHECK(is_bound());
60   router_->EnableTestingMode();
61 }
62 
BindInternal(ScopedMessagePipeHandle handle,scoped_refptr<base::SingleThreadTaskRunner> runner,const char * interface_name,std::unique_ptr<MessageReceiver> request_validator,bool passes_associated_kinds,bool has_sync_methods,MessageReceiverWithResponderStatus * stub,uint32_t interface_version)63 void BindingStateBase::BindInternal(
64     ScopedMessagePipeHandle handle,
65     scoped_refptr<base::SingleThreadTaskRunner> runner,
66     const char* interface_name,
67     std::unique_ptr<MessageReceiver> request_validator,
68     bool passes_associated_kinds,
69     bool has_sync_methods,
70     MessageReceiverWithResponderStatus* stub,
71     uint32_t interface_version) {
72   DCHECK(!router_);
73 
74   MultiplexRouter::Config config =
75       passes_associated_kinds
76           ? MultiplexRouter::MULTI_INTERFACE
77           : (has_sync_methods
78                  ? MultiplexRouter::SINGLE_INTERFACE_WITH_SYNC_METHODS
79                  : MultiplexRouter::SINGLE_INTERFACE);
80   router_ = new MultiplexRouter(std::move(handle), config, false, runner);
81   router_->SetMasterInterfaceName(interface_name);
82 
83   endpoint_client_.reset(new InterfaceEndpointClient(
84       router_->CreateLocalEndpointHandle(kMasterInterfaceId), stub,
85       std::move(request_validator), has_sync_methods, std::move(runner),
86       interface_version));
87 }
88 
89 }  // namesapce internal
90 }  // namespace mojo
91