C++程序  |  70行  |  2.03 KB

// 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_SCOPED_INTERFACE_ENDPOINT_HANDLE_H_
#define MOJO_PUBLIC_CPP_BINDINGS_SCOPED_INTERFACE_ENDPOINT_HANDLE_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "mojo/public/cpp/bindings/interface_id.h"

namespace mojo {

class AssociatedGroupController;

// ScopedInterfaceEndpointHandle refers to one end of an interface, either the
// implementation side or the client side.
class ScopedInterfaceEndpointHandle {
 public:
  // Creates an invalid endpoint handle.
  ScopedInterfaceEndpointHandle();

  ScopedInterfaceEndpointHandle(ScopedInterfaceEndpointHandle&& other);

  ~ScopedInterfaceEndpointHandle();

  ScopedInterfaceEndpointHandle& operator=(
      ScopedInterfaceEndpointHandle&& other);

  bool is_valid() const { return IsValidInterfaceId(id_); }

  bool is_local() const { return is_local_; }

  void reset();
  void swap(ScopedInterfaceEndpointHandle& other);

  // DO NOT USE METHODS BELOW THIS LINE. These are for internal use and testing.

  InterfaceId id() const { return id_; }

  AssociatedGroupController* group_controller() const {
    return group_controller_.get();
  }

  // Releases the handle without closing it.
  InterfaceId release();

 private:
  friend class AssociatedGroupController;

  // This is supposed to be used by AssociatedGroupController only.
  // |id| is the corresponding interface ID.
  // If |is_local| is false, this handle is meant to be passed over a message
  // pipe the remote side of the associated group.
  ScopedInterfaceEndpointHandle(
      InterfaceId id,
      bool is_local,
      scoped_refptr<AssociatedGroupController> group_controller);

  InterfaceId id_;
  bool is_local_;
  scoped_refptr<AssociatedGroupController> group_controller_;

  DISALLOW_COPY_AND_ASSIGN(ScopedInterfaceEndpointHandle);
};

}  // namespace mojo

#endif  // MOJO_PUBLIC_CPP_BINDINGS_SCOPED_INTERFACE_ENDPOINT_HANDLE_H_