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

// @dart = 2.6

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();
}
