widget/nsIDragService.idl
author Lee Salzman <lsalzman@mozilla.com>
Thu, 18 Jul 2019 21:44:57 +0000
changeset 541453 b5b868d520a2ee6043adaddffb893bae932c24b3
parent 536166 dd61d5c2a773250956ae723aa592f0e8d85a8f78
permissions -rw-r--r--
Bug 1563133 - limit GlyphBuffer capacity. r=jfkthame a=abillings Differential Revision: https://phabricator.services.mozilla.com/D38214

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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 "nsIArray.idl"
#include "nsISupports.idl"
#include "nsIDragSession.idl"
#include "nsIContentPolicy.idl"

webidl DragEvent;
webidl Node;
webidl Selection;

%{C++
#include "mozilla/EventForwards.h"

namespace mozilla {
namespace dom {
class ContentParent;
class DataTransfer;
class RemoteDragStartData;
} // namespace dom
} // namespace mozilla
%}

[ptr] native ContentParentPtr(mozilla::dom::ContentParent);
[ptr] native DataTransferPtr(mozilla::dom::DataTransfer);
[ptr] native RemoteDragStartDataPtr(mozilla::dom::RemoteDragStartData);
native EventMessage(mozilla::EventMessage);

[scriptable, uuid(ebd6b3a2-af16-43af-a698-3091a087dd62), builtinclass]
interface nsIDragService : nsISupports
{
  const long DRAGDROP_ACTION_NONE = 0;
  const long DRAGDROP_ACTION_COPY = 1;
  const long DRAGDROP_ACTION_MOVE = 2;
  const long DRAGDROP_ACTION_LINK = 4;
  const long DRAGDROP_ACTION_UNINITIALIZED = 64;

  /**
    * Starts a modal drag session with an array of transaferables.
    *
    * Note: This method is deprecated for non-native code.
    *
    * @param  aPrincipal - the triggering principal of the drag, or null if
    *                      it's from browser chrome or OS
    * @param  aTransferables - an array of transferables to be dragged
    * @param  aActionType - specified which of copy/move/link are allowed
    * @param  aContentPolicyType - the contentPolicyType that will be
    *           passed to the loadInfo when creating a new channel
    *           (defaults to TYPE_OTHER)
    */
  [can_run_script]
  void invokeDragSession (in Node aDOMNode,
                          in nsIPrincipal aPrincipal,
                          in nsIArray aTransferables,
                          in unsigned long aActionType,
                          [optional] in nsContentPolicyType aContentPolicyType);

  /**
   * Starts a modal drag session using an image. The first four arguments are
   * the same as invokeDragSession.
   *
   * Note: This method is deprecated for non-native code.
   *
   * A custom image may be specified using the aImage argument. If this is
   * supplied, the aImageX and aImageY arguments specify the offset within
   * the image where the cursor would be positioned. That is, when the image
   * is drawn, it is offset up and left the amount so that the cursor appears
   * at that location within the image.
   *
   * If aImage is null, aImageX and aImageY are not used and the image is instead
   * determined from the source node aDOMNode, and the offset calculated so that
   * the initial location for the image appears in the same screen position as
   * where the element is located. The node must be within a document.
   *
   * Currently, supported images are all DOM nodes. If this is an HTML <image> or
   * <canvas>, the drag image is taken from the image data. If the element is in
   * a document, it will be rendered at its displayed size, othewise, it will be
   * rendered at its real size. For other types of elements, the element is
   * rendered into an offscreen buffer in the same manner as it is currently
   * displayed. The document selection is hidden while drawing.
   *
   * The aDragEvent must be supplied as the current screen coordinates of the
   * event are needed to calculate the image location.
   */
  [noscript, can_run_script]
  void invokeDragSessionWithImage(in Node aDOMNode,
                                  in nsIPrincipal aPrincipal,
                                  in nsIArray aTransferableArray,
                                  in unsigned long aActionType,
                                  in Node aImage,
                                  in long aImageX,
                                  in long aImageY,
                                  in DragEvent aDragEvent,
                                  in DataTransferPtr aDataTransfer);

  /** Start a drag session with the data in aDragStartData from a child process.
   *  Other arguments are the same as invokeDragSessionWithImage.
   */
  [noscript, can_run_script]
  void invokeDragSessionWithRemoteImage(in Node aDOMNode,
                                        in nsIPrincipal aPrincipal,
                                        in nsIArray aTransferableArray,
                                        in unsigned long aActionType,
                                        in RemoteDragStartDataPtr aDragStartData,
                                        in DragEvent aDragEvent,
                                        in DataTransferPtr aDataTransfer);

  /**
   * Start a modal drag session using the selection as the drag image.
   * The aDragEvent must be supplied as the current screen coordinates of the
   * event are needed to calculate the image location.
   *
   * Note: This method is deprecated for non-native code.
   */
  [can_run_script]
  void invokeDragSessionWithSelection(in Selection aSelection,
                                      in nsIPrincipal aPrincipal,
                                      in nsIArray aTransferableArray,
                                      in unsigned long aActionType,
                                      in DragEvent aDragEvent,
                                      in DataTransferPtr aDataTransfer);

  /**
    * Returns the current Drag Session
    */
  nsIDragSession getCurrentSession();

  /**
    * Tells the Drag Service to start a drag session. This is called when
    * an external drag occurs
    */
  void startDragSession ( ) ;

  /**
    * Tells the Drag Service to end a drag session. This is called when
    * an external drag occurs
    *
    * If aDoneDrag is true, the drag has finished, otherwise the drag has
    * just left the window.
    */
  [can_run_script]
  void endDragSession(in boolean aDoneDrag,
                      [optional] in unsigned long aKeyModifiers);

  /**
   * Fire a drag event at the source of the drag
   */
  [noscript, can_run_script]
  void fireDragEventAtSource(in EventMessage aEventMessage,
                             in unsigned long aKeyModifiers);

  /**
   * Increase/decrease dragging suppress level by one.
   * If level is greater than one, dragging is disabled.
   */
  [can_run_script]
  void suppress();
  void unsuppress();

  /**
    * aX and aY are in LayoutDevice pixels.
    */
  [noscript] void dragMoved(in long aX, in long aY);

  [notxpcom, nostdcall] boolean maybeAddChildProcess(in ContentParentPtr aChild);
};


%{ C++

%}