| Index: mojo/public/cpp/bindings/interface_ptr.h
|
| diff --git a/mojo/public/cpp/bindings/interface_ptr.h b/mojo/public/cpp/bindings/interface_ptr.h
|
| index dc446677d21a8cb5f75e1e08d4120d269418a6c0..b6515cc1a969972aa84b2edb38b94d829ae41084 100644
|
| --- a/mojo/public/cpp/bindings/interface_ptr.h
|
| +++ b/mojo/public/cpp/bindings/interface_ptr.h
|
| @@ -5,16 +5,17 @@
|
| #ifndef MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_PTR_H_
|
| #define MOJO_PUBLIC_CPP_BINDINGS_INTERFACE_PTR_H_
|
|
|
| -#include <algorithm>
|
| -
|
| +#include "base/logging.h"
|
| +#include "base/macros.h"
|
| #include "mojo/public/cpp/bindings/callback.h"
|
| #include "mojo/public/cpp/bindings/interface_ptr_info.h"
|
| -#include "mojo/public/cpp/bindings/lib/interface_ptr_internal.h"
|
| +#include "mojo/public/cpp/bindings/lib/interface_ptr_state.h"
|
| #include "mojo/public/cpp/environment/environment.h"
|
| -#include "mojo/public/cpp/system/macros.h"
|
|
|
| namespace mojo {
|
|
|
| +class AssociatedGroup;
|
| +
|
| // A pointer to a local proxy of a remote Interface implementation. Uses a
|
| // message pipe to communicate with the remote implementation, and automatically
|
| // closes the pipe and deletes the proxy on destruction. The pointer must be
|
| @@ -28,7 +29,8 @@ namespace mojo {
|
| // create and bind a new InterfacePtr from that thread.
|
| template <typename Interface>
|
| class InterfacePtr {
|
| - MOJO_MOVE_ONLY_TYPE(InterfacePtr)
|
| + MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(InterfacePtr)
|
| +
|
| public:
|
| // Constructs an unbound InterfacePtr.
|
| InterfacePtr() {}
|
| @@ -118,6 +120,9 @@ class InterfacePtr {
|
| //
|
| // This method may only be called after the InterfacePtr has been bound to a
|
| // message pipe.
|
| + //
|
| + // NOTE: Not supported (yet) if |Interface| has methods to pass associated
|
| + // interface pointers/requests.
|
| bool WaitForIncomingResponse() {
|
| return internal_state_.WaitForIncomingResponse();
|
| }
|
| @@ -144,22 +149,33 @@ class InterfacePtr {
|
| // TODO: fix this restriction, it's not always obvious when there is a
|
| // pending response.
|
| InterfacePtrInfo<Interface> PassInterface() {
|
| - MOJO_DCHECK(!internal_state_.has_pending_callbacks());
|
| + DCHECK(!internal_state_.has_pending_callbacks());
|
| State state;
|
| internal_state_.Swap(&state);
|
|
|
| return state.PassInterface();
|
| }
|
|
|
| + // Returns the associated group that this object belongs to. Returns null if:
|
| + // - this object is not bound; or
|
| + // - the interface doesn't have methods to pass associated interface
|
| + // pointers or requests.
|
| + AssociatedGroup* associated_group() {
|
| + return internal_state_.associated_group();
|
| + }
|
| +
|
| // DO NOT USE. Exposed only for internal use and for testing.
|
| - internal::InterfacePtrState<Interface>* internal_state() {
|
| + internal::InterfacePtrState<Interface, Interface::PassesAssociatedKinds_>*
|
| + internal_state() {
|
| return &internal_state_;
|
| }
|
|
|
| // Allow InterfacePtr<> to be used in boolean expressions, but not
|
| // implicitly convertible to a real bool (which is dangerous).
|
| private:
|
| - typedef internal::InterfacePtrState<Interface> InterfacePtr::*Testable;
|
| + typedef internal::InterfacePtrState<Interface,
|
| + Interface::PassesAssociatedKinds_>
|
| + InterfacePtr::*Testable;
|
|
|
| public:
|
| operator Testable() const {
|
| @@ -175,7 +191,8 @@ class InterfacePtr {
|
| template <typename T>
|
| bool operator!=(const InterfacePtr<T>& other) const = delete;
|
|
|
| - typedef internal::InterfacePtrState<Interface> State;
|
| + typedef internal::InterfacePtrState<Interface,
|
| + Interface::PassesAssociatedKinds_> State;
|
| mutable State internal_state_;
|
| };
|
|
|
|
|