OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_INTERFACE_PTR_STATE_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_INTERFACE_PTR_STATE_H_ |
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_INTERFACE_PTR_STATE_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_INTERFACE_PTR_STATE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | |
10 #include <algorithm> // For |std::swap()|. | 9 #include <algorithm> // For |std::swap()|. |
| 10 #include <utility> |
11 | 11 |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.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/callback.h" | 17 #include "mojo/public/cpp/bindings/callback.h" |
18 #include "mojo/public/cpp/bindings/interface_ptr_info.h" | 18 #include "mojo/public/cpp/bindings/interface_ptr_info.h" |
19 #include "mojo/public/cpp/bindings/lib/control_message_proxy.h" | 19 #include "mojo/public/cpp/bindings/lib/control_message_proxy.h" |
20 #include "mojo/public/cpp/bindings/lib/filter_chain.h" | 20 #include "mojo/public/cpp/bindings/lib/filter_chain.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 ConfigureProxyIfNecessary(); | 118 ConfigureProxyIfNecessary(); |
119 | 119 |
120 DCHECK(router_); | 120 DCHECK(router_); |
121 return router_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); | 121 return router_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); |
122 } | 122 } |
123 | 123 |
124 // After this method is called, the object is in an invalid state and | 124 // After this method is called, the object is in an invalid state and |
125 // shouldn't be reused. | 125 // shouldn't be reused. |
126 InterfacePtrInfo<GenericInterface> PassInterface() { | 126 InterfacePtrInfo<GenericInterface> PassInterface() { |
127 return InterfacePtrInfo<GenericInterface>( | 127 return InterfacePtrInfo<GenericInterface>( |
128 router_ ? router_->PassMessagePipe() : handle_.Pass(), version_); | 128 router_ ? router_->PassMessagePipe() : std::move(handle_), version_); |
129 } | 129 } |
130 | 130 |
131 bool is_bound() const { return handle_.is_valid() || router_; } | 131 bool is_bound() const { return handle_.is_valid() || router_; } |
132 | 132 |
133 bool encountered_error() const { | 133 bool encountered_error() const { |
134 return router_ ? router_->encountered_error() : false; | 134 return router_ ? router_->encountered_error() : false; |
135 } | 135 } |
136 | 136 |
137 void set_connection_error_handler(const Closure& error_handler) { | 137 void set_connection_error_handler(const Closure& error_handler) { |
138 ConfigureProxyIfNecessary(); | 138 ConfigureProxyIfNecessary(); |
(...skipping 26 matching lines...) Expand all Loading... |
165 // The object hasn't been bound. | 165 // The object hasn't been bound. |
166 if (!waiter_) { | 166 if (!waiter_) { |
167 DCHECK(!handle_.is_valid()); | 167 DCHECK(!handle_.is_valid()); |
168 return; | 168 return; |
169 } | 169 } |
170 | 170 |
171 FilterChain filters; | 171 FilterChain filters; |
172 filters.Append<MessageHeaderValidator>(); | 172 filters.Append<MessageHeaderValidator>(); |
173 filters.Append<typename Interface::ResponseValidator_>(); | 173 filters.Append<typename Interface::ResponseValidator_>(); |
174 | 174 |
175 router_ = new Router(handle_.Pass(), filters.Pass(), waiter_); | 175 router_ = new Router(std::move(handle_), std::move(filters), waiter_); |
176 waiter_ = nullptr; | 176 waiter_ = nullptr; |
177 | 177 |
178 proxy_ = new Proxy(router_); | 178 proxy_ = new Proxy(router_); |
179 } | 179 } |
180 | 180 |
181 Proxy* proxy_; | 181 Proxy* proxy_; |
182 Router* router_; | 182 Router* router_; |
183 | 183 |
184 // |proxy_| and |router_| are not initialized until read/write with the | 184 // |proxy_| and |router_| are not initialized until read/write with the |
185 // message pipe handle is needed. |handle_| and |waiter_| are valid between | 185 // message pipe handle is needed. |handle_| and |waiter_| are valid between |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 DCHECK(router_); | 327 DCHECK(router_); |
328 DCHECK(endpoint_client_); | 328 DCHECK(endpoint_client_); |
329 return; | 329 return; |
330 } | 330 } |
331 // The object hasn't been bound. | 331 // The object hasn't been bound. |
332 if (!waiter_) { | 332 if (!waiter_) { |
333 DCHECK(!handle_.is_valid()); | 333 DCHECK(!handle_.is_valid()); |
334 return; | 334 return; |
335 } | 335 } |
336 | 336 |
337 router_ = new MultiplexRouter(true, handle_.Pass(), waiter_); | 337 router_ = new MultiplexRouter(true, std::move(handle_), waiter_); |
338 endpoint_client_.reset(new InterfaceEndpointClient( | 338 endpoint_client_.reset(new InterfaceEndpointClient( |
339 router_->CreateLocalEndpointHandle(kMasterInterfaceId), nullptr, | 339 router_->CreateLocalEndpointHandle(kMasterInterfaceId), nullptr, |
340 make_scoped_ptr(new typename Interface::ResponseValidator_()))); | 340 make_scoped_ptr(new typename Interface::ResponseValidator_()))); |
341 proxy_.reset(new Proxy(endpoint_client_.get())); | 341 proxy_.reset(new Proxy(endpoint_client_.get())); |
342 proxy_->serialization_context()->router = endpoint_client_->router(); | 342 proxy_->serialization_context()->router = endpoint_client_->router(); |
343 | 343 |
344 waiter_ = nullptr; | 344 waiter_ = nullptr; |
345 } | 345 } |
346 | 346 |
347 scoped_refptr<MultiplexRouter> router_; | 347 scoped_refptr<MultiplexRouter> router_; |
348 | 348 |
349 scoped_ptr<InterfaceEndpointClient> endpoint_client_; | 349 scoped_ptr<InterfaceEndpointClient> endpoint_client_; |
350 scoped_ptr<Proxy> proxy_; | 350 scoped_ptr<Proxy> proxy_; |
351 | 351 |
352 // |router_| (as well as other members above) is not initialized until | 352 // |router_| (as well as other members above) is not initialized until |
353 // read/write with the message pipe handle is needed. |handle_| and |waiter_| | 353 // read/write with the message pipe handle is needed. |handle_| and |waiter_| |
354 // are valid between the Bind() call and the initialization of |router_|. | 354 // are valid between the Bind() call and the initialization of |router_|. |
355 ScopedMessagePipeHandle handle_; | 355 ScopedMessagePipeHandle handle_; |
356 const MojoAsyncWaiter* waiter_; | 356 const MojoAsyncWaiter* waiter_; |
357 | 357 |
358 uint32_t version_; | 358 uint32_t version_; |
359 | 359 |
360 DISALLOW_COPY_AND_ASSIGN(InterfacePtrState); | 360 DISALLOW_COPY_AND_ASSIGN(InterfacePtrState); |
361 }; | 361 }; |
362 | 362 |
363 } // namespace internal | 363 } // namespace internal |
364 } // namespace mojo | 364 } // namespace mojo |
365 | 365 |
366 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_INTERFACE_PTR_STATE_H_ | 366 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_INTERFACE_PTR_STATE_H_ |
OLD | NEW |