| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_GROUP_H_ |
| #define MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_GROUP_H_ |
| |
| #include "base/callback.h" |
| #include "base/component_export.h" |
| #include "base/memory/ref_counted.h" |
| #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" |
| |
| namespace mojo { |
| |
| class AssociatedGroupController; |
| |
| // AssociatedGroup refers to all the interface endpoints running at one end of a |
| // message pipe. |
| // It is thread safe and cheap to make copies. |
| class COMPONENT_EXPORT(MOJO_CPP_BINDINGS_BASE) AssociatedGroup { |
| public: |
| AssociatedGroup(); |
| |
| explicit AssociatedGroup(scoped_refptr<AssociatedGroupController> controller); |
| |
| explicit AssociatedGroup(const ScopedInterfaceEndpointHandle& handle); |
| |
| AssociatedGroup(const AssociatedGroup& other); |
| |
| ~AssociatedGroup(); |
| |
| AssociatedGroup& operator=(const AssociatedGroup& other); |
| |
| // The return value of this getter if this object is initialized with a |
| // ScopedInterfaceEndpointHandle: |
| // - If the handle is invalid, the return value will always be null. |
| // - If the handle is valid and non-pending, the return value will be |
| // non-null and remain unchanged even if the handle is later reset. |
| // - If the handle is pending asssociation, the return value will initially |
| // be null, change to non-null when/if the handle is associated, and |
| // remain unchanged ever since. |
| AssociatedGroupController* GetController(); |
| |
| private: |
| base::Callback<AssociatedGroupController*()> controller_getter_; |
| scoped_refptr<AssociatedGroupController> controller_; |
| }; |
| |
| } // namespace mojo |
| |
| #endif // MOJO_PUBLIC_CPP_BINDINGS_ASSOCIATED_GROUP_H_ |