// 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/memory/ref_counted.h"
#include "mojo/public/cpp/bindings/bindings_export.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 MOJO_CPP_BINDINGS_EXPORT 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_
