// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of dart.isolate;

/**
 * An unforgeable object that comes back as equal when passed through other
 * isolates.
 *
 * Sending a capability object to another isolate, and getting it back,
 * will produce an object that is equal to the original.
 * There is no other way to create objects equal to a capability object.
 *
 * Capabilities can be used as access guards: A remote isolate can send
 * a request for an operation, but it is only allowed if the request contains
 * the correct capability object.
 *
 * This allows exposing the same interface to multiple clients,
 * but restricting some operations to only those clients
 * that have also been given the corresponding capability.
 *
 * Capabilities can be used inside a single isolate,
 * but they have no advantage over
 * just using `new Object` to create a unique object,
 * and it offers no real security against other code
 * running in the same isolate.
 */
class Capability {
  /**
   * Create a new unforgeable capability object.
   */
  external factory Capability();
}
