// 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_