dom/base/nsIContentPolicyBase.idl
author Mike Hommey <mh+mozilla@glandium.org>
Thu, 26 Mar 2015 12:07:17 +0900
changeset 258314 fc1e894eec2fbd34b745cd94f505080427d24705
parent 257114 9ba87714f5cfda74e6dd2eb8fd73678429a9b3e6
child 277532 6e5683d96cbbfe9ac4efa9a894eac4c055ed40d7
permissions -rw-r--r--
Bug 1147207 - Add a ComposedFinder class that acts like a FileFinder proxy over multiple FileFinders. r=gps, a=sledru

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ft=cpp tw=78 sw=2 et ts=8 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIURI;
interface nsIDOMNode;
interface nsIPrincipal;

/**
 * The type of nsIContentPolicy::TYPE_*
 */
typedef unsigned long nsContentPolicyType;

/**
 * Interface for content policy mechanism.  Implementations of this
 * interface can be used to control loading of various types of out-of-line
 * content, or processing of certain types of in-line content.
 *
 * WARNING: do not block the caller from shouldLoad or shouldProcess (e.g.,
 * by launching a dialog to prompt the user for something).
 */

[scriptable,uuid(21bb54b0-ab3c-11e4-bcd8-0800200c9a66)]
interface nsIContentPolicyBase : nsISupports
{
  /**
   * Indicates a unset or bogus policy type.
   */
  const nsContentPolicyType TYPE_INVALID = 0;

  /**
   * Gecko/Firefox developers: Avoid using TYPE_OTHER. Especially for
   * requests that are coming from webpages. Or requests in general which
   * you expect that security checks will be done on.
   * Always use a more specific type if one is available. And do not hesitate
   * to add more types as appropriate.
   * But if you are fairly sure that no one would care about your more specific
   * type, then it's ok to use TYPE_OTHER.
   *
   * Extension developers: Whenever it is reasonable, use one of the existing
   * content types. If none of the existing content types are right for
   * something you are doing, file a bug in the Core/DOM component that
   * includes a patch that adds your new content type to the end of the list of
   * TYPE_* constants here. But, don't start using your new content type until
   * your patch has been accepted, because it will be uncertain what exact
   * value and name your new content type will have; in that interim period,
   * use TYPE_OTHER. In your patch, document your new content type in the style
   * of the existing ones. In the bug you file, provide a more detailed
   * description of the new type of content you want Gecko to support, so that
   * the existing implementations of nsIContentPolicy can be properly modified
   * to deal with that new type of content.
   *
   * Implementations of nsIContentPolicy should treat this the same way they
   * treat unknown types, because existing users of TYPE_OTHER may be converted
   * to use new content types.
   */
  const nsContentPolicyType TYPE_OTHER = 1;

  /**
   * Indicates an executable script (such as JavaScript).
   */
  const nsContentPolicyType TYPE_SCRIPT = 2;

  /**
   * Indicates an image (e.g., IMG elements).
   */
  const nsContentPolicyType TYPE_IMAGE = 3;

  /**
   * Indicates a stylesheet (e.g., STYLE elements).
   */
  const nsContentPolicyType TYPE_STYLESHEET = 4;

  /**
   * Indicates a generic object (plugin-handled content typically falls under
   * this category).
   */
  const nsContentPolicyType TYPE_OBJECT = 5;

  /**
   * Indicates a document at the top-level (i.e., in a browser).
   */
  const nsContentPolicyType TYPE_DOCUMENT = 6;

  /**
   * Indicates a document contained within another document (e.g., IFRAMEs,
   * FRAMES, and OBJECTs).
   */
  const nsContentPolicyType TYPE_SUBDOCUMENT = 7;

  /**
   * Indicates a timed refresh.
   *
   * shouldLoad will never get this, because it does not represent content
   * to be loaded (the actual load triggered by the refresh will go through
   * shouldLoad as expected).
   *
   * shouldProcess will get this for, e.g., META Refresh elements and HTTP
   * Refresh headers.
   */
  const nsContentPolicyType TYPE_REFRESH = 8;

  /**
   * Indicates an XBL binding request, triggered either by -moz-binding CSS
   * property.
   */
  const nsContentPolicyType TYPE_XBL = 9;

  /**
   * Indicates a ping triggered by a click on <A PING="..."> element.
   */
  const nsContentPolicyType TYPE_PING = 10;

  /**
   * Indicates an XMLHttpRequest. Also used for document.load and for EventSource.
   */
  const nsContentPolicyType TYPE_XMLHTTPREQUEST = 11;
  const nsContentPolicyType TYPE_DATAREQUEST    = 11; // alias

  /**
   * Indicates a request by a plugin.
   */
  const nsContentPolicyType TYPE_OBJECT_SUBREQUEST = 12;

  /**
   * Indicates a DTD loaded by an XML document.
   */
  const nsContentPolicyType TYPE_DTD = 13;

  /**
   * Indicates a font loaded via @font-face rule.
   */
  const nsContentPolicyType TYPE_FONT = 14;

  /**
   * Indicates a video or audio load.
   */
  const nsContentPolicyType TYPE_MEDIA = 15;

  /**
   * Indicates a WebSocket load.
   */
  const nsContentPolicyType TYPE_WEBSOCKET = 16;

  /**
   * Indicates a Content Security Policy report.
   */
  const nsContentPolicyType TYPE_CSP_REPORT = 17;

  /**
   * Indicates a style sheet transformation.
   */
  const nsContentPolicyType TYPE_XSLT = 18;

  /**
   * Indicates a beacon post.
   */
  const nsContentPolicyType TYPE_BEACON = 19;

  /**
   * Indicates a load initiated by the fetch() function from the Fetch
   * specification.
   */
  const nsContentPolicyType TYPE_FETCH = 20;

  /**
   * Indicates a <img srcset> or <picture> request.
   */
  const nsContentPolicyType TYPE_IMAGESET = 21;

  /* When adding new content types, please update nsContentBlocker,
   * NS_CP_ContentTypeName, nsCSPContext, all nsIContentPolicy
   * implementations, and other things that are not listed here that are
   * related to nsIContentPolicy. */

  //////////////////////////////////////////////////////////////////////

  /**
   * Returned from shouldLoad or shouldProcess if the load or process request
   * is rejected based on details of the request.
   */
  const short REJECT_REQUEST = -1;

  /**
   * Returned from shouldLoad or shouldProcess if the load/process is rejected
   * based solely on its type (of the above flags).
   *
   * NOTE that it is not meant to stop future requests for this type--only the
   * current request.
   */
  const short REJECT_TYPE = -2;

  /**
   * Returned from shouldLoad or shouldProcess if the load/process is rejected
   * based on the server it is hosted on or requested from (aContentLocation or
   * aRequestOrigin), e.g., if you block an IMAGE because it is served from
   * goatse.cx (even if you don't necessarily block other types from that
   * server/domain).
   *
   * NOTE that it is not meant to stop future requests for this server--only the
   * current request.
   */
  const short REJECT_SERVER = -3;

  /**
   * Returned from shouldLoad or shouldProcess if the load/process is rejected
   * based on some other criteria. Mozilla callers will handle this like
   * REJECT_REQUEST; third-party implementors may, for example, use this to
   * direct their own callers to consult the extra parameter for additional
   * details.
   */
  const short REJECT_OTHER = -4;

  /**
   * Returned from shouldLoad or shouldProcess if the load or process request
   * is not rejected.
   */
  const short ACCEPT = 1;
};