widget/nsIDragService.idl
author Mike Hommey <mh+mozilla@glandium.org>
Fri, 11 Jan 2019 16:01:15 +0000
changeset 453570 daf50f25895db073e44d50fecf2e4f6fe873865d
parent 452502 32f94b7a8db69e3ab86135182fe8e43ea6926767
child 473338 e754d9ad197df615a1f71185f6201d956efc31b9
permissions -rw-r--r--
Bug 1519307 - Add a new project to build useful parts of breakpad independently. r=froydnj With `ac_add_options --enable-project=tools/crashreporter` in a mozconfig, `./mach build` builds minidump_stackwalk, dump_syms and fileid. One caveat is that due to limitation in how the build system works currently, it's cumbersome to keep dump_syms as a host program for Gecko, and to make it a target program for this project. For now, keep it as a host program. We're not going to use it on automation, but it's still convenient to have for quick local builds (I've had to resort to awful hacks downstream). Differential Revision: https://phabricator.services.mozilla.com/D16299

/* -*- 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;
} // namespace dom
} // namespace mozilla
%}

[ptr] native ContentParentPtr(mozilla::dom::ContentParent);
[ptr] native DataTransferPtr(mozilla::dom::DataTransfer);
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)
    */
  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]
  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 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.
   */
  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.
    */
  void endDragSession(in boolean aDoneDrag,
                      [optional] in unsigned long aKeyModifiers);

  /**
   * Fire a drag event at the source of the drag
   */
  [noscript] 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.
   */
  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++

%}