OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 "mojo/public/cpp/bindings/lib/binding_state.h" | 5 #include "mojo/public/cpp/bindings/lib/binding_state.h" |
6 | 6 |
| 7 #include "mojo/public/cpp/bindings/lib/control_message_proxy.h" |
| 8 |
7 namespace mojo { | 9 namespace mojo { |
8 namespace internal { | 10 namespace internal { |
9 | 11 |
10 SimpleBindingState::SimpleBindingState() = default; | 12 SimpleBindingState::SimpleBindingState() = default; |
11 | 13 |
12 SimpleBindingState::~SimpleBindingState() = default; | 14 SimpleBindingState::~SimpleBindingState() = default; |
13 | 15 |
14 void SimpleBindingState::AddFilter(std::unique_ptr<MessageReceiver> filter) { | 16 void SimpleBindingState::AddFilter(std::unique_ptr<MessageReceiver> filter) { |
15 DCHECK(router_); | 17 DCHECK(router_); |
16 router_->AddFilter(std::move(filter)); | 18 router_->AddFilter(std::move(filter)); |
(...skipping 14 matching lines...) Expand all Loading... |
31 } | 33 } |
32 | 34 |
33 void SimpleBindingState::Close() { | 35 void SimpleBindingState::Close() { |
34 if (!router_) | 36 if (!router_) |
35 return; | 37 return; |
36 | 38 |
37 router_->CloseMessagePipe(); | 39 router_->CloseMessagePipe(); |
38 DestroyRouter(); | 40 DestroyRouter(); |
39 } | 41 } |
40 | 42 |
| 43 void SimpleBindingState::FlushForTesting() { |
| 44 router_->control_message_proxy()->FlushForTesting(); |
| 45 } |
| 46 |
41 void SimpleBindingState::EnableTestingMode() { | 47 void SimpleBindingState::EnableTestingMode() { |
42 DCHECK(is_bound()); | 48 DCHECK(is_bound()); |
43 router_->EnableTestingMode(); | 49 router_->EnableTestingMode(); |
44 } | 50 } |
45 | 51 |
46 void SimpleBindingState::BindInternal( | 52 void SimpleBindingState::BindInternal( |
47 ScopedMessagePipeHandle handle, | 53 ScopedMessagePipeHandle handle, |
48 scoped_refptr<base::SingleThreadTaskRunner> runner, | 54 scoped_refptr<base::SingleThreadTaskRunner> runner, |
49 const char* interface_name, | 55 const char* interface_name, |
50 std::unique_ptr<MessageReceiver> request_validator, | 56 std::unique_ptr<MessageReceiver> request_validator, |
51 bool has_sync_methods, | 57 bool has_sync_methods, |
52 MessageReceiverWithResponderStatus* stub) { | 58 MessageReceiverWithResponderStatus* stub, |
| 59 uint32_t interface_version) { |
53 FilterChain filters; | 60 FilterChain filters; |
54 filters.Append<MessageHeaderValidator>(interface_name); | 61 filters.Append<MessageHeaderValidator>(interface_name); |
55 filters.Append(std::move(request_validator)); | 62 filters.Append(std::move(request_validator)); |
56 | 63 |
57 router_ = new internal::Router(std::move(handle), std::move(filters), | 64 router_ = new internal::Router(std::move(handle), std::move(filters), |
58 has_sync_methods, std::move(runner)); | 65 has_sync_methods, std::move(runner), |
| 66 interface_version); |
59 router_->set_incoming_receiver(stub); | 67 router_->set_incoming_receiver(stub); |
60 router_->set_connection_error_handler(base::Bind( | 68 router_->set_connection_error_handler(base::Bind( |
61 &SimpleBindingState::RunConnectionErrorHandler, base::Unretained(this))); | 69 &SimpleBindingState::RunConnectionErrorHandler, base::Unretained(this))); |
62 } | 70 } |
63 | 71 |
64 void SimpleBindingState::DestroyRouter() { | 72 void SimpleBindingState::DestroyRouter() { |
65 router_->set_connection_error_handler(base::Closure()); | 73 router_->set_connection_error_handler(base::Closure()); |
66 delete router_; | 74 delete router_; |
67 router_ = nullptr; | 75 router_ = nullptr; |
68 connection_error_handler_.Reset(); | 76 connection_error_handler_.Reset(); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 void MultiplexedBindingState::Close() { | 114 void MultiplexedBindingState::Close() { |
107 if (!router_) | 115 if (!router_) |
108 return; | 116 return; |
109 | 117 |
110 endpoint_client_.reset(); | 118 endpoint_client_.reset(); |
111 router_->CloseMessagePipe(); | 119 router_->CloseMessagePipe(); |
112 router_ = nullptr; | 120 router_ = nullptr; |
113 connection_error_handler_.Reset(); | 121 connection_error_handler_.Reset(); |
114 } | 122 } |
115 | 123 |
| 124 void MultiplexedBindingState::FlushForTesting() { |
| 125 endpoint_client_->control_message_proxy()->FlushForTesting(); |
| 126 } |
| 127 |
116 void MultiplexedBindingState::EnableTestingMode() { | 128 void MultiplexedBindingState::EnableTestingMode() { |
117 DCHECK(is_bound()); | 129 DCHECK(is_bound()); |
118 router_->EnableTestingMode(); | 130 router_->EnableTestingMode(); |
119 } | 131 } |
120 | 132 |
121 void MultiplexedBindingState::BindInternal( | 133 void MultiplexedBindingState::BindInternal( |
122 ScopedMessagePipeHandle handle, | 134 ScopedMessagePipeHandle handle, |
123 scoped_refptr<base::SingleThreadTaskRunner> runner, | 135 scoped_refptr<base::SingleThreadTaskRunner> runner, |
124 const char* interface_name, | 136 const char* interface_name, |
125 std::unique_ptr<MessageReceiver> request_validator, | 137 std::unique_ptr<MessageReceiver> request_validator, |
126 bool has_sync_methods, | 138 bool has_sync_methods, |
127 MessageReceiverWithResponderStatus* stub) { | 139 MessageReceiverWithResponderStatus* stub, |
| 140 uint32_t interface_version) { |
128 DCHECK(!router_); | 141 DCHECK(!router_); |
129 | 142 |
130 router_ = new internal::MultiplexRouter(false, std::move(handle), runner); | 143 router_ = new internal::MultiplexRouter(false, std::move(handle), runner); |
131 router_->SetMasterInterfaceName(interface_name); | 144 router_->SetMasterInterfaceName(interface_name); |
132 | 145 |
133 endpoint_client_.reset(new InterfaceEndpointClient( | 146 endpoint_client_.reset(new InterfaceEndpointClient( |
134 router_->CreateLocalEndpointHandle(kMasterInterfaceId), stub, | 147 router_->CreateLocalEndpointHandle(kMasterInterfaceId), stub, |
135 std::move(request_validator), has_sync_methods, std::move(runner))); | 148 std::move(request_validator), has_sync_methods, std::move(runner), |
| 149 interface_version)); |
136 | 150 |
137 endpoint_client_->set_connection_error_handler( | 151 endpoint_client_->set_connection_error_handler( |
138 base::Bind(&MultiplexedBindingState::RunConnectionErrorHandler, | 152 base::Bind(&MultiplexedBindingState::RunConnectionErrorHandler, |
139 base::Unretained(this))); | 153 base::Unretained(this))); |
140 } | 154 } |
141 | 155 |
142 void MultiplexedBindingState::RunConnectionErrorHandler() { | 156 void MultiplexedBindingState::RunConnectionErrorHandler() { |
143 if (!connection_error_handler_.is_null()) | 157 if (!connection_error_handler_.is_null()) |
144 connection_error_handler_.Run(); | 158 connection_error_handler_.Run(); |
145 } | 159 } |
146 | 160 |
147 } // namesapce internal | 161 } // namesapce internal |
148 } // namespace mojo | 162 } // namespace mojo |
OLD | NEW |