| OLD | NEW |
| 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_ASSOCIATED_INTERFACE_PTR_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ |
| 6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 17 #include "base/single_thread_task_runner.h" | 17 #include "base/single_thread_task_runner.h" |
| 18 #include "base/threading/thread_task_runner_handle.h" | 18 #include "base/threading/thread_task_runner_handle.h" |
| 19 #include "mojo/public/cpp/bindings/associated_group.h" | |
| 20 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" | 19 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" |
| 21 #include "mojo/public/cpp/bindings/associated_interface_request.h" | 20 #include "mojo/public/cpp/bindings/associated_interface_request.h" |
| 22 #include "mojo/public/cpp/bindings/connection_error_callback.h" | 21 #include "mojo/public/cpp/bindings/connection_error_callback.h" |
| 23 #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h" | 22 #include "mojo/public/cpp/bindings/lib/associated_interface_ptr_state.h" |
| 24 #include "mojo/public/cpp/bindings/lib/multiplex_router.h" | 23 #include "mojo/public/cpp/bindings/lib/multiplex_router.h" |
| 25 #include "mojo/public/cpp/system/message_pipe.h" | 24 #include "mojo/public/cpp/system/message_pipe.h" |
| 26 | 25 |
| 27 namespace mojo { | 26 namespace mojo { |
| 28 | 27 |
| 29 // Represents the client side of an associated interface. It is similar to | 28 // Represents the client side of an associated interface. It is similar to |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 // TODO: fix this restriction, it's not always obvious when there is a | 152 // TODO: fix this restriction, it's not always obvious when there is a |
| 154 // pending response. | 153 // pending response. |
| 155 AssociatedInterfacePtrInfo<Interface> PassInterface() { | 154 AssociatedInterfacePtrInfo<Interface> PassInterface() { |
| 156 DCHECK(!internal_state_.has_pending_callbacks()); | 155 DCHECK(!internal_state_.has_pending_callbacks()); |
| 157 State state; | 156 State state; |
| 158 internal_state_.Swap(&state); | 157 internal_state_.Swap(&state); |
| 159 | 158 |
| 160 return state.PassInterface(); | 159 return state.PassInterface(); |
| 161 } | 160 } |
| 162 | 161 |
| 163 // Returns the associated group that this object belongs to. Returns null if | |
| 164 // the object is not bound. | |
| 165 AssociatedGroup* associated_group() { | |
| 166 return internal_state_.associated_group(); | |
| 167 } | |
| 168 | |
| 169 // DO NOT USE. Exposed only for internal use and for testing. | 162 // DO NOT USE. Exposed only for internal use and for testing. |
| 170 internal::AssociatedInterfacePtrState<Interface>* internal_state() { | 163 internal::AssociatedInterfacePtrState<Interface>* internal_state() { |
| 171 return &internal_state_; | 164 return &internal_state_; |
| 172 } | 165 } |
| 173 | 166 |
| 174 // Allow AssociatedInterfacePtr<> to be used in boolean expressions, but not | 167 // Allow AssociatedInterfacePtr<> to be used in boolean expressions, but not |
| 175 // implicitly convertible to a real bool (which is dangerous). | 168 // implicitly convertible to a real bool (which is dangerous). |
| 176 private: | 169 private: |
| 177 // TODO(dcheng): Use an explicit conversion operator. | 170 // TODO(dcheng): Use an explicit conversion operator. |
| 178 typedef internal::AssociatedInterfacePtrState<Interface> | 171 typedef internal::AssociatedInterfacePtrState<Interface> |
| (...skipping 19 matching lines...) Expand all Loading... |
| 198 DISALLOW_COPY_AND_ASSIGN(AssociatedInterfacePtr); | 191 DISALLOW_COPY_AND_ASSIGN(AssociatedInterfacePtr); |
| 199 }; | 192 }; |
| 200 | 193 |
| 201 // Creates an associated interface. The returned request is supposed to be sent | 194 // Creates an associated interface. The returned request is supposed to be sent |
| 202 // over another interface (either associated or non-associated). | 195 // over another interface (either associated or non-associated). |
| 203 // | 196 // |
| 204 // NOTE: |ptr| must NOT be used to make calls before the request is sent. | 197 // NOTE: |ptr| must NOT be used to make calls before the request is sent. |
| 205 // Violating that will lead to crash. On the other hand, as soon as the request | 198 // Violating that will lead to crash. On the other hand, as soon as the request |
| 206 // is sent, |ptr| is usable. There is no need to wait until the request is bound | 199 // is sent, |ptr| is usable. There is no need to wait until the request is bound |
| 207 // to an implementation at the remote side. | 200 // to an implementation at the remote side. |
| 208 // TODO(yzshen): Remove the |group| parameter. | |
| 209 template <typename Interface> | 201 template <typename Interface> |
| 210 AssociatedInterfaceRequest<Interface> MakeRequest( | 202 AssociatedInterfaceRequest<Interface> MakeRequest( |
| 211 AssociatedInterfacePtr<Interface>* ptr, | 203 AssociatedInterfacePtr<Interface>* ptr, |
| 212 AssociatedGroup* group = nullptr, | |
| 213 scoped_refptr<base::SingleThreadTaskRunner> runner = | 204 scoped_refptr<base::SingleThreadTaskRunner> runner = |
| 214 base::ThreadTaskRunnerHandle::Get()) { | 205 base::ThreadTaskRunnerHandle::Get()) { |
| 215 AssociatedInterfacePtrInfo<Interface> ptr_info; | 206 AssociatedInterfacePtrInfo<Interface> ptr_info; |
| 216 auto request = MakeRequest(&ptr_info); | 207 auto request = MakeRequest(&ptr_info); |
| 217 ptr->Bind(std::move(ptr_info), std::move(runner)); | 208 ptr->Bind(std::move(ptr_info), std::move(runner)); |
| 218 return request; | 209 return request; |
| 219 } | 210 } |
| 220 | 211 |
| 221 // Creates an associated interface. One of the two endpoints is supposed to be | 212 // Creates an associated interface. One of the two endpoints is supposed to be |
| 222 // sent over another interface (either associated or non-associated); while the | 213 // sent over another interface (either associated or non-associated); while the |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 // all callsites of this function to directly use that. | 276 // all callsites of this function to directly use that. |
| 286 template <typename Interface> | 277 template <typename Interface> |
| 287 AssociatedInterfaceRequest<Interface> MakeRequestForTesting( | 278 AssociatedInterfaceRequest<Interface> MakeRequestForTesting( |
| 288 AssociatedInterfacePtr<Interface>* ptr) { | 279 AssociatedInterfacePtr<Interface>* ptr) { |
| 289 return GetIsolatedProxy(ptr); | 280 return GetIsolatedProxy(ptr); |
| 290 } | 281 } |
| 291 | 282 |
| 292 } // namespace mojo | 283 } // namespace mojo |
| 293 | 284 |
| 294 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ | 285 #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_INTERFACE_PTR_H_ |
| OLD | NEW |