mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 14:52:16 +00:00
7d6e26c06c
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
69 lines
2.5 KiB
Plaintext
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);
|
|
};
|