gecko-dev/widget/nsIMockDragServiceController.idl
David P 7d6e26c06c Bug 1886604: Part 1: Add JS-scriptable MockDragService r=win-reviewers,edgar,rkraesig
Introduces MockDragService as a subclass/implementation of nsBaseDragService.
This class is based on the Windows implementation of nsBaseDragService.  The
service is created with a MockDragServiceController that JS can use to
initiate drag events that would normally come from the system.  Native
drag-and-drop is not permitted in automation because it puts the browser into
a state where, if anything goes wrong (e.g. a test failure), it cannot be
killed without manual intervention.  This allows us to avoid that limitation
while still testing most of the browser's drag-and-drop behavior, including
the (substantial and complex) nsBaseDragService base-class that is common to
all platforms.

Differential Revision: https://phabricator.services.mozilla.com/D205640
2024-07-04 01:03:33 +00:00

69 lines
2.5 KiB
Plaintext

/* -*- 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 "nsISupports.idl"
webidl BrowsingContext;
interface nsIDragService;
/**
* A driver for MockDragService, so that tests can mock system DND behavior.
* (System DND is not permitted in tests.)
*/
[scriptable, builtinclass, uuid(32037ab0-bfc7-11ee-9f4b-09901bed55fa)]
interface nsIMockDragServiceController : nsISupports
{
// Types of event that can be sent by this controller.
cenum EventType : 8 {
eDragEnter = 0,
eDragOver = 1,
eDragLeave = 2,
eDrop = 3,
eMouseDown = 4,
eMouseMove = 5,
eMouseUp = 6,
};
/**
* The nsIDragService that this controller targets. It is a mock version
* of the normal nsIDragService. The caller must replace the drag
* service in the service manager with this object before sending
* drag events to it. This can be done with MockRegistrar or by calling
* the nsComponentManager directly.
*/
readonly attribute nsIDragService mockDragService;
/**
* Issue the given event from our mock drag service, as if that type
* of event came from the system. The mock object attempts to mimic the
* essential behavior of the native drag classes for this.
*
* @param aBC A BrowsingContext in the widget the event is
* targetted at
* @param aEventType Type of event to send
* @param aScreenX Screen X coordinate of event
* @param aScreenY Screen Y coordinate of event
* @param aKeyModifiers Keys that are pressed during event.
* NOTE: Keys should be interpreted as selecting
* the drag action, but that logic is very
* platform-dependent and is not yet mocked.
* Drops will be processed as "moves".
*/
[can_run_script]
void sendEvent(in BrowsingContext aBC,
in nsIMockDragServiceController_EventType aEventType,
in long aScreenX, in long aScreenY,
[optional] in uint32_t aKeyModifiers);
/**
* Windows' IDropTarget has the ability to "Cancel" a drag that is
* different than dragleave. This emulates that behavior for testing.
*/
[can_run_script]
void cancelDrag([optional] in uint32_t aKeyModifiers);
};