mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 17:55:50 +00:00
96bd720118
When user middle clicks a link, most users must not expect to expose clipboard content to the web application. Therefore, we should stop firing paste event when user click a link with middle button. This patch makes ClickHandlerChild.handleEvent() prevent multiple action when it posts middle click event on a link. Note that even if middle click event is consumed, default event handler will dispatch paste event. Unfortunately, this is compatible behavior with the other browsers. Therefore, we cannot change this behavior with calling preventDefault() and this is the reason why this patch adds Event.preventMultipleActions(). Out of scope of this bug though, if there is an element which looks like a link but implemented with JS, web apps can steal clipboard content if user enables middle click event and user just wants to open the link in new tab. It might be better to stop dispatching paste event in any browsers and request to change each web apps. Differential Revision: https://phabricator.services.mozilla.com/D17209 --HG-- extra : moz-landing-system : lando
94 lines
3.1 KiB
Plaintext
94 lines
3.1 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/.
|
|
*
|
|
* The origin of this IDL file is
|
|
* http://www.w3.org/TR/2012/WD-dom-20120105/
|
|
*
|
|
* Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
|
|
* liability, trademark and document use rules apply.
|
|
*/
|
|
|
|
[Constructor(DOMString type, optional EventInit eventInitDict),
|
|
Exposed=(Window,Worker), ProbablyShortLivingWrapper]
|
|
interface Event {
|
|
[Pure]
|
|
readonly attribute DOMString type;
|
|
[Pure, BindingAlias="srcElement"]
|
|
readonly attribute EventTarget? target;
|
|
[Pure]
|
|
readonly attribute EventTarget? currentTarget;
|
|
|
|
sequence<EventTarget> composedPath();
|
|
|
|
const unsigned short NONE = 0;
|
|
const unsigned short CAPTURING_PHASE = 1;
|
|
const unsigned short AT_TARGET = 2;
|
|
const unsigned short BUBBLING_PHASE = 3;
|
|
[Pure]
|
|
readonly attribute unsigned short eventPhase;
|
|
|
|
void stopPropagation();
|
|
void stopImmediatePropagation();
|
|
|
|
[Pure]
|
|
readonly attribute boolean bubbles;
|
|
[Pure]
|
|
readonly attribute boolean cancelable;
|
|
[NeedsCallerType]
|
|
attribute boolean returnValue;
|
|
[NeedsCallerType]
|
|
void preventDefault();
|
|
[Pure, NeedsCallerType]
|
|
readonly attribute boolean defaultPrevented;
|
|
[ChromeOnly, Pure]
|
|
readonly attribute boolean defaultPreventedByChrome;
|
|
[ChromeOnly, Pure]
|
|
readonly attribute boolean defaultPreventedByContent;
|
|
[Pure]
|
|
readonly attribute boolean composed;
|
|
|
|
[Unforgeable, Pure]
|
|
readonly attribute boolean isTrusted;
|
|
[Pure]
|
|
readonly attribute DOMHighResTimeStamp timeStamp;
|
|
|
|
void initEvent(DOMString type,
|
|
optional boolean bubbles = false,
|
|
optional boolean cancelable = false);
|
|
attribute boolean cancelBubble;
|
|
};
|
|
|
|
// Mozilla specific legacy stuff.
|
|
partial interface Event {
|
|
const long ALT_MASK = 0x00000001;
|
|
const long CONTROL_MASK = 0x00000002;
|
|
const long SHIFT_MASK = 0x00000004;
|
|
const long META_MASK = 0x00000008;
|
|
|
|
/** The original target of the event, before any retargetings. */
|
|
readonly attribute EventTarget? originalTarget;
|
|
/**
|
|
* The explicit original target of the event. If the event was retargeted
|
|
* for some reason other than an anonymous boundary crossing, this will be set
|
|
* to the target before the retargeting occurs. For example, mouse events
|
|
* are retargeted to their parent node when they happen over text nodes (bug
|
|
* 185889), and in that case .target will show the parent and
|
|
* .explicitOriginalTarget will show the text node.
|
|
* .explicitOriginalTarget differs from .originalTarget in that it will never
|
|
* contain anonymous content.
|
|
*/
|
|
readonly attribute EventTarget? explicitOriginalTarget;
|
|
[ChromeOnly] readonly attribute EventTarget? composedTarget;
|
|
[ChromeOnly] void preventMultipleActions();
|
|
[ChromeOnly] readonly attribute boolean multipleActionsPrevented;
|
|
[ChromeOnly] readonly attribute boolean isSynthesized;
|
|
};
|
|
|
|
dictionary EventInit {
|
|
boolean bubbles = false;
|
|
boolean cancelable = false;
|
|
boolean composed = false;
|
|
};
|