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

Side by Side Diff: mojo/public/cpp/bindings/lib/binding_state.h

Issue 2280483002: Add FlushForTesting to InterfacePtr and Binding. (Closed)
Patch Set: Created 4 years, 3 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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 bool is_bound() const { return !!router_; } 58 bool is_bound() const { return !!router_; }
59 59
60 MessagePipeHandle handle() const { 60 MessagePipeHandle handle() const {
61 DCHECK(is_bound()); 61 DCHECK(is_bound());
62 return router_->handle(); 62 return router_->handle();
63 } 63 }
64 64
65 AssociatedGroup* associated_group() { return nullptr; } 65 AssociatedGroup* associated_group() { return nullptr; }
66 66
67 void FlushForTesting();
68
67 void EnableTestingMode(); 69 void EnableTestingMode();
68 70
69 protected: 71 protected:
70 void BindInternal(ScopedMessagePipeHandle handle, 72 void BindInternal(ScopedMessagePipeHandle handle,
71 scoped_refptr<base::SingleThreadTaskRunner> runner, 73 scoped_refptr<base::SingleThreadTaskRunner> runner,
72 const char* interface_name, 74 const char* interface_name,
73 std::unique_ptr<MessageReceiver> request_validator, 75 std::unique_ptr<MessageReceiver> request_validator,
74 bool has_sync_methods, 76 bool has_sync_methods,
75 MessageReceiverWithResponderStatus* stub); 77 MessageReceiverWithResponderStatus* stub,
78 uint32_t interface_version);
76 79
77 void DestroyRouter(); 80 void DestroyRouter();
78 81
79 internal::Router* router_ = nullptr; 82 internal::Router* router_ = nullptr;
80 base::Closure connection_error_handler_; 83 base::Closure connection_error_handler_;
81 84
82 private: 85 private:
83 void RunConnectionErrorHandler(); 86 void RunConnectionErrorHandler();
84 }; 87 };
85 88
(...skipping 12 matching lines...) Expand all
98 } 101 }
99 102
100 ~BindingState() { Close(); } 103 ~BindingState() { Close(); }
101 104
102 void Bind(ScopedMessagePipeHandle handle, 105 void Bind(ScopedMessagePipeHandle handle,
103 scoped_refptr<base::SingleThreadTaskRunner> runner) { 106 scoped_refptr<base::SingleThreadTaskRunner> runner) {
104 DCHECK(!router_); 107 DCHECK(!router_);
105 SimpleBindingState::BindInternal( 108 SimpleBindingState::BindInternal(
106 std::move(handle), runner, Interface::Name_, 109 std::move(handle), runner, Interface::Name_,
107 base::MakeUnique<typename Interface::RequestValidator_>(), 110 base::MakeUnique<typename Interface::RequestValidator_>(),
108 Interface::HasSyncMethods_, &stub_); 111 Interface::HasSyncMethods_, &stub_, Interface::Version_);
109 } 112 }
110 113
111 InterfaceRequest<Interface> Unbind() { 114 InterfaceRequest<Interface> Unbind() {
112 InterfaceRequest<Interface> request = 115 InterfaceRequest<Interface> request =
113 MakeRequest<Interface>(router_->PassMessagePipe()); 116 MakeRequest<Interface>(router_->PassMessagePipe());
114 DestroyRouter(); 117 DestroyRouter();
115 return std::move(request); 118 return std::move(request);
116 } 119 }
117 120
118 Interface* impl() { return impl_; } 121 Interface* impl() { return impl_; }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 155
153 MessagePipeHandle handle() const { 156 MessagePipeHandle handle() const {
154 DCHECK(is_bound()); 157 DCHECK(is_bound());
155 return router_->handle(); 158 return router_->handle();
156 } 159 }
157 160
158 AssociatedGroup* associated_group() { 161 AssociatedGroup* associated_group() {
159 return endpoint_client_ ? endpoint_client_->associated_group() : nullptr; 162 return endpoint_client_ ? endpoint_client_->associated_group() : nullptr;
160 } 163 }
161 164
165 void FlushForTesting();
166
162 void EnableTestingMode(); 167 void EnableTestingMode();
163 168
164 protected: 169 protected:
165 void BindInternal(ScopedMessagePipeHandle handle, 170 void BindInternal(ScopedMessagePipeHandle handle,
166 scoped_refptr<base::SingleThreadTaskRunner> runner, 171 scoped_refptr<base::SingleThreadTaskRunner> runner,
167 const char* interface_name, 172 const char* interface_name,
168 std::unique_ptr<MessageReceiver> request_validator, 173 std::unique_ptr<MessageReceiver> request_validator,
169 bool has_sync_methods, 174 bool has_sync_methods,
170 MessageReceiverWithResponderStatus* stub); 175 MessageReceiverWithResponderStatus* stub,
176 uint32_t interface_version);
171 177
172 scoped_refptr<internal::MultiplexRouter> router_; 178 scoped_refptr<internal::MultiplexRouter> router_;
173 std::unique_ptr<InterfaceEndpointClient> endpoint_client_; 179 std::unique_ptr<InterfaceEndpointClient> endpoint_client_;
174 base::Closure connection_error_handler_; 180 base::Closure connection_error_handler_;
175 181
176 private: 182 private:
177 void RunConnectionErrorHandler(); 183 void RunConnectionErrorHandler();
178 }; 184 };
179 185
180 // Uses a multiplexing router. If |Interface| has methods to pass associated 186 // Uses a multiplexing router. If |Interface| has methods to pass associated
181 // interface pointers or requests, this specialization should be used. 187 // interface pointers or requests, this specialization should be used.
182 template <typename Interface> 188 template <typename Interface>
183 class BindingState<Interface, true> : public MultiplexedBindingState { 189 class BindingState<Interface, true> : public MultiplexedBindingState {
184 public: 190 public:
185 explicit BindingState(Interface* impl) : impl_(impl) { 191 explicit BindingState(Interface* impl) : impl_(impl) {
186 stub_.set_sink(impl_); 192 stub_.set_sink(impl_);
187 } 193 }
188 194
189 ~BindingState() { Close(); } 195 ~BindingState() { Close(); }
190 196
191 void Bind(ScopedMessagePipeHandle handle, 197 void Bind(ScopedMessagePipeHandle handle,
192 scoped_refptr<base::SingleThreadTaskRunner> runner) { 198 scoped_refptr<base::SingleThreadTaskRunner> runner) {
193 MultiplexedBindingState::BindInternal( 199 MultiplexedBindingState::BindInternal(
194 std::move(handle), runner, Interface::Name_, 200 std::move(handle), runner, Interface::Name_,
195 base::MakeUnique<typename Interface::RequestValidator_>(), 201 base::MakeUnique<typename Interface::RequestValidator_>(),
196 Interface::HasSyncMethods_, &stub_); 202 Interface::HasSyncMethods_, &stub_, Interface::Version_);
197 stub_.serialization_context()->group_controller = router_; 203 stub_.serialization_context()->group_controller = router_;
198 } 204 }
199 205
200 InterfaceRequest<Interface> Unbind() { 206 InterfaceRequest<Interface> Unbind() {
201 endpoint_client_.reset(); 207 endpoint_client_.reset();
202 InterfaceRequest<Interface> request = 208 InterfaceRequest<Interface> request =
203 MakeRequest<Interface>(router_->PassMessagePipe()); 209 MakeRequest<Interface>(router_->PassMessagePipe());
204 router_ = nullptr; 210 router_ = nullptr;
205 connection_error_handler_.Reset(); 211 connection_error_handler_.Reset();
206 return request; 212 return request;
207 } 213 }
208 214
209 Interface* impl() { return impl_; } 215 Interface* impl() { return impl_; }
210 216
211 private: 217 private:
212 typename Interface::Stub_ stub_; 218 typename Interface::Stub_ stub_;
213 Interface* impl_; 219 Interface* impl_;
214 220
215 DISALLOW_COPY_AND_ASSIGN(BindingState); 221 DISALLOW_COPY_AND_ASSIGN(BindingState);
216 }; 222 };
217 223
218 } // namesapce internal 224 } // namesapce internal
219 } // namespace mojo 225 } // namespace mojo
220 226
221 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_ 227 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDING_STATE_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h ('k') | mojo/public/cpp/bindings/lib/binding_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698