[WebIDL] Annotate IDL interfaces under Source/WebCore/dom/ with the OperationsNotDele...
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Oct 2013 20:31:17 +0000 (20:31 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Oct 2013 20:31:17 +0000 (20:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=122271

Reviewed by Darin Adler.

Before changing the JSC bindings generator to enforce WebIDL operations to be configurable, all the
interfaces are being annotated with the OperationsNotDeletable attribute. The attribute currently
doesn't have any effect, but will keep the operations not configurable after the generator is modified
to preserve the original behavior. The attribute will be removed from each interface after checking
conformity with other browsers (in terms of configurability of operations of that interface) and the
WebKit's existing test suites.

This patch covers IDL interfaces under Source/WebCore/dom/.

* dom/CharacterData.idl:
* dom/ChildNode.idl:
* dom/ClientRectList.idl:
* dom/Clipboard.idl:
* dom/CompositionEvent.idl:
* dom/CustomEvent.idl:
* dom/DOMCoreException.idl:
* dom/DOMImplementation.idl:
* dom/DOMNamedFlowCollection.idl:
* dom/DOMStringList.idl:
* dom/DOMStringMap.idl:
* dom/DataTransferItem.idl:
* dom/DataTransferItemList.idl:
* dom/DeviceMotionEvent.idl:
* dom/DeviceOrientationEvent.idl:
* dom/Document.idl:
* dom/DocumentFragment.idl:
* dom/DocumentType.idl:
* dom/Element.idl:
* dom/Event.idl:
* dom/EventException.idl:
* dom/EventListener.idl:
* dom/EventTarget.idl:
* dom/KeyboardEvent.idl:
* dom/MessageEvent.idl:
* dom/MessagePort.idl:
* dom/MouseEvent.idl:
* dom/MutationEvent.idl:
* dom/MutationObserver.idl:
* dom/NamedNodeMap.idl:
* dom/Node.idl:
* dom/NodeFilter.idl:
* dom/NodeIterator.idl:
* dom/NodeList.idl:
* dom/Range.idl:
* dom/RangeException.idl:
* dom/ShadowRoot.idl:
* dom/Text.idl:
* dom/TextEvent.idl:
* dom/TouchEvent.idl:
* dom/TouchList.idl:
* dom/TreeWalker.idl:
* dom/UIEvent.idl:
* dom/WebKitNamedFlow.idl:
* dom/WheelEvent.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@156908 268f45cc-cd09-0410-ab3c-d52691b4dbfc

47 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/CharacterData.idl
Source/WebCore/dom/ChildNode.idl
Source/WebCore/dom/ClientRectList.idl
Source/WebCore/dom/Clipboard.idl
Source/WebCore/dom/CompositionEvent.idl
Source/WebCore/dom/CustomEvent.idl
Source/WebCore/dom/DOMCoreException.idl
Source/WebCore/dom/DOMImplementation.idl
Source/WebCore/dom/DOMNamedFlowCollection.idl
Source/WebCore/dom/DOMStringList.idl
Source/WebCore/dom/DOMStringMap.idl
Source/WebCore/dom/DataTransferItem.idl
Source/WebCore/dom/DataTransferItemList.idl
Source/WebCore/dom/DeviceMotionEvent.idl
Source/WebCore/dom/DeviceOrientationEvent.idl
Source/WebCore/dom/Document.idl
Source/WebCore/dom/DocumentFragment.idl
Source/WebCore/dom/DocumentType.idl
Source/WebCore/dom/Element.idl
Source/WebCore/dom/Event.idl
Source/WebCore/dom/EventException.idl
Source/WebCore/dom/EventListener.idl
Source/WebCore/dom/EventTarget.idl
Source/WebCore/dom/HashChangeEvent.idl
Source/WebCore/dom/KeyboardEvent.idl
Source/WebCore/dom/MessageEvent.idl
Source/WebCore/dom/MessagePort.idl
Source/WebCore/dom/MouseEvent.idl
Source/WebCore/dom/MutationEvent.idl
Source/WebCore/dom/MutationObserver.idl
Source/WebCore/dom/NamedNodeMap.idl
Source/WebCore/dom/Node.idl
Source/WebCore/dom/NodeFilter.idl
Source/WebCore/dom/NodeIterator.idl
Source/WebCore/dom/NodeList.idl
Source/WebCore/dom/Range.idl
Source/WebCore/dom/RangeException.idl
Source/WebCore/dom/ShadowRoot.idl
Source/WebCore/dom/Text.idl
Source/WebCore/dom/TextEvent.idl
Source/WebCore/dom/TouchEvent.idl
Source/WebCore/dom/TouchList.idl
Source/WebCore/dom/TreeWalker.idl
Source/WebCore/dom/UIEvent.idl
Source/WebCore/dom/WebKitNamedFlow.idl
Source/WebCore/dom/WheelEvent.idl

index 7e897cd..2f6f433 100644 (file)
@@ -1,5 +1,67 @@
 2013-10-04  Zan Dobersek  <zdobersek@igalia.com>
 
+        [WebIDL] Annotate IDL interfaces under Source/WebCore/dom/ with the OperationsNotDeletable attribute
+        https://bugs.webkit.org/show_bug.cgi?id=122271
+
+        Reviewed by Darin Adler.
+
+        Before changing the JSC bindings generator to enforce WebIDL operations to be configurable, all the
+        interfaces are being annotated with the OperationsNotDeletable attribute. The attribute currently
+        doesn't have any effect, but will keep the operations not configurable after the generator is modified
+        to preserve the original behavior. The attribute will be removed from each interface after checking
+        conformity with other browsers (in terms of configurability of operations of that interface) and the
+        WebKit's existing test suites.
+
+        This patch covers IDL interfaces under Source/WebCore/dom/.
+
+        * dom/CharacterData.idl:
+        * dom/ChildNode.idl:
+        * dom/ClientRectList.idl:
+        * dom/Clipboard.idl:
+        * dom/CompositionEvent.idl:
+        * dom/CustomEvent.idl:
+        * dom/DOMCoreException.idl:
+        * dom/DOMImplementation.idl:
+        * dom/DOMNamedFlowCollection.idl:
+        * dom/DOMStringList.idl:
+        * dom/DOMStringMap.idl:
+        * dom/DataTransferItem.idl:
+        * dom/DataTransferItemList.idl:
+        * dom/DeviceMotionEvent.idl:
+        * dom/DeviceOrientationEvent.idl:
+        * dom/Document.idl:
+        * dom/DocumentFragment.idl:
+        * dom/DocumentType.idl:
+        * dom/Element.idl:
+        * dom/Event.idl:
+        * dom/EventException.idl:
+        * dom/EventListener.idl:
+        * dom/EventTarget.idl:
+        * dom/KeyboardEvent.idl:
+        * dom/MessageEvent.idl:
+        * dom/MessagePort.idl:
+        * dom/MouseEvent.idl:
+        * dom/MutationEvent.idl:
+        * dom/MutationObserver.idl:
+        * dom/NamedNodeMap.idl:
+        * dom/Node.idl:
+        * dom/NodeFilter.idl:
+        * dom/NodeIterator.idl:
+        * dom/NodeList.idl:
+        * dom/Range.idl:
+        * dom/RangeException.idl:
+        * dom/ShadowRoot.idl:
+        * dom/Text.idl:
+        * dom/TextEvent.idl:
+        * dom/TouchEvent.idl:
+        * dom/TouchList.idl:
+        * dom/TreeWalker.idl:
+        * dom/UIEvent.idl:
+        * dom/WebKitNamedFlow.idl:
+        * dom/WheelEvent.idl:
+
+2013-10-04  Zan Dobersek  <zdobersek@igalia.com>
+
         [WebIDL] Annotate IDL interfaces under Source/WebCore/xml/ with the OperationsNotDeletable attribute
         https://bugs.webkit.org/show_bug.cgi?id=122269
 
index c8c9723..a63378c 100644 (file)
@@ -17,7 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-interface CharacterData : Node {
+[
+    OperationsNotDeletable
+] interface CharacterData : Node {
 
     [TreatNullAs=NullString, SetterRaisesException] attribute DOMString data;
 
index b91556c..c17f417 100644 (file)
@@ -20,7 +20,8 @@
 
 // DOM 4
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    OperationsNotDeletable
 ] interface ChildNode {
     // readonly attribute Element? previousElementSibling;
     // readonly attribute Element? nextElementSibling;
index ca1fcb2..4b1f2d6 100644 (file)
@@ -25,7 +25,8 @@
  */
 
 [
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface ClientRectList {
     readonly attribute unsigned long length;
     getter ClientRect item([IsIndex, Default=Undefined] optional unsigned long index);
index bb8fc18..f452d2a 100644 (file)
@@ -27,7 +27,8 @@
  */
 
 [
-    SkipVTableValidation
+    SkipVTableValidation,
+    OperationsNotDeletable
 ] interface Clipboard {
     attribute DOMString dropEffect;
     attribute DOMString effectAllowed;
index 46876b8..81982ff 100644 (file)
@@ -25,7 +25,8 @@
 
 [
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface CompositionEvent : UIEvent {
 
     [InitializedByEventConstructor] readonly attribute DOMString data;
index 6aa0b41..4b677bd 100644 (file)
@@ -26,7 +26,8 @@
 #if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
 // Introduced in DOM Level 3:
 [
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface CustomEvent : Event {
     [InitializedByEventConstructor] readonly attribute any detail;
 
index 2c67f1e..4018ca6 100644 (file)
@@ -30,7 +30,8 @@
     JSNoStaticTables,
     DoNotCheckConstants,
     InterfaceName=DOMException,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] exception DOMCoreException {
 
     readonly attribute unsigned short   code;
index 442ab0a..e57716f 100644 (file)
@@ -20,7 +20,8 @@
 
 [
     GenerateIsReachable=ImplDocument,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface DOMImplementation {
 
     // DOM Level 1
index f867b66..b08eac5 100644 (file)
@@ -32,7 +32,8 @@
     Conditional=CSS_REGIONS,
     InterfaceName=WebKitNamedFlowCollection,
     JSGenerateToJSObject,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface DOMNamedFlowCollection {
     readonly attribute unsigned long length;
     getter WebKitNamedFlow item(unsigned long index);
index 915a66b..289c981 100644 (file)
@@ -26,7 +26,8 @@
 [
     JSCustomToNativeObject,
     JSNoStaticTables,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface DOMStringList {
     readonly attribute unsigned long length;
     [TreatReturnedNullStringAs=Null] getter DOMString item([Default=Undefined] optional unsigned long index);
index 21f5bcb..9f1f661 100644 (file)
@@ -28,7 +28,8 @@
     CustomDeleteProperty,
     CustomEnumerateProperty,
     CustomNamedSetter,
-    SkipVTableValidation
+    SkipVTableValidation,
+    OperationsNotDeletable
 ] interface DOMStringMap {
     getter DOMString (DOMString name);
 };
index f7fd6ae..190d4c1 100644 (file)
@@ -31,7 +31,8 @@
 [
     NoInterfaceObject,
     Conditional=DATA_TRANSFER_ITEMS,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface DataTransferItem {
     readonly attribute DOMString kind;
     readonly attribute DOMString type;
index ab01a04..788a6d8 100644 (file)
@@ -32,7 +32,8 @@
     NoInterfaceObject,
     Conditional=DATA_TRANSFER_ITEMS,
     JSGenerateToNativeObject,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface DataTransferItemList {
     readonly attribute long length;
     getter DataTransferItem item([Default=Undefined] optional unsigned long index);
index 12e0df4..a916a63 100644 (file)
@@ -25,6 +25,7 @@
 
 [
     Conditional=DEVICE_ORIENTATION,
+    OperationsNotDeletable
 ] interface DeviceMotionEvent : Event {
     [Custom] readonly attribute Acceleration acceleration;
     [Custom] readonly attribute Acceleration accelerationIncludingGravity;
index 51f3f98..9d8ada6 100644 (file)
@@ -25,6 +25,7 @@
 
 [
     Conditional=DEVICE_ORIENTATION,
+    OperationsNotDeletable
 ] interface DeviceOrientationEvent : Event {
     [Custom] readonly attribute double alpha;
     [Custom] readonly attribute double beta;
index 3dada92..9185502 100644 (file)
@@ -21,7 +21,8 @@
 [
     CustomToJSObject,
     JSGenerateToNativeObject,
-    JSInlineGetOwnPropertySlot
+    JSInlineGetOwnPropertySlot,
+    OperationsNotDeletable
 ] interface Document : Node {
 
     // DOM Level 1 Core
index 1345fef..08f3e79 100644 (file)
@@ -17,7 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-interface DocumentFragment : Node {
+[
+    OperationsNotDeletable
+] interface DocumentFragment : Node {
     // NodeSelector - Selector API
     [RaisesException] Element querySelector(DOMString selectors);
     [RaisesException] NodeList querySelectorAll(DOMString selectors);
index d6b254c..743a838 100644 (file)
@@ -18,7 +18,8 @@
  */
 
 [
-    JSGenerateToNativeObject
+    JSGenerateToNativeObject,
+    OperationsNotDeletable
 ] interface DocumentType : Node {
 
     // DOM Level 1
index 475435a..6138657 100644 (file)
@@ -21,6 +21,7 @@
 [
     JSGenerateToNativeObject,
     JSInlineGetOwnPropertySlot,
+    OperationsNotDeletable
 ] interface Element : Node {
 
     // DOM Level 1 Core
index bfb221e..bb55c95 100644 (file)
@@ -24,6 +24,7 @@
     ConstructorTemplate=Event,
     JSNoStaticTables,
     ObjCPolymorphic,
+    OperationsNotDeletable
 ] interface Event {
 
     // DOM PhaseType
index f97c2aa..5de90c8 100644 (file)
@@ -31,6 +31,7 @@
     JSNoStaticTables,
     DoNotCheckConstants,
     ImplementationLacksVTable,
+    OperationsNotDeletable
 ] exception EventException {
 
     readonly attribute unsigned short   code;
index c565021..3229dbf 100644 (file)
@@ -24,6 +24,7 @@
     JSNoStaticTables,
     ObjCProtocol,
     CPPPureInterface,
+    OperationsNotDeletable
 ] interface EventListener {
     void               handleEvent(Event evt);
 };
index d1f0e61..e769f07 100644 (file)
@@ -25,7 +25,8 @@
     CPPPureInterface,
     CustomToJSObject,
     JSCustomToNativeObject,
-    EventTarget
+    EventTarget,
+    OperationsNotDeletable
 ] interface EventTarget {
     [ObjCLegacyUnnamedParameters] void addEventListener(DOMString type, 
                                          EventListener listener, 
index 2408afe..add6df2 100644 (file)
@@ -19,7 +19,8 @@
 
 // Introduced in http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange
 [
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface HashChangeEvent : Event {
     void initHashChangeEvent([Default=Undefined] optional DOMString type, 
                              [Default=Undefined] optional boolean canBubble, 
index 3a8e460..88e5b79 100644 (file)
@@ -20,7 +20,8 @@
 
 [
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface KeyboardEvent : UIEvent {
 
 #if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
index 498adaa..7f42b26 100644 (file)
@@ -28,7 +28,8 @@
 [
     GlobalContext=DOMWindow&WorkerGlobalScope,
     JSNoStaticTables,
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface MessageEvent : Event {
     [InitializedByEventConstructor] readonly attribute DOMString origin;
     [InitializedByEventConstructor] readonly attribute DOMString lastEventId;
index ed28409..4dcf7dc 100644 (file)
@@ -30,7 +30,8 @@
     GenerateIsReachable=Impl,
     ActiveDOMObject,
     EventTarget,
-    JSNoStaticTables
+    JSNoStaticTables,
+    OperationsNotDeletable
 ] interface MessagePort {
 // We need to have something as an ObjC binding, because MessagePort is used in MessageEvent, which already has one,
 // but we don't want to actually expose the API while it is in flux.
index 7d35240..1ec2298 100644 (file)
@@ -20,6 +20,7 @@
 [
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
     ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface MouseEvent : UIEvent {
     [InitializedByEventConstructor] readonly attribute long             screenX;
     [InitializedByEventConstructor] readonly attribute long             screenY;
index 5c0e709..d301f31 100644 (file)
@@ -18,7 +18,9 @@
  */
 
 // Introduced in DOM Level 2:
-interface MutationEvent : Event {
+[
+    OperationsNotDeletable
+] interface MutationEvent : Event {
 
     // attrChangeType
     const unsigned short MODIFICATION = 1;
index d416164..a73c724 100644 (file)
@@ -31,7 +31,8 @@
 [
     CustomConstructor(MutationCallback callback),
     CustomIsReachable,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface MutationObserver {
     [RaisesException] void observe(Node target, Dictionary options);
     sequence<MutationRecord> takeRecords();
index ae68d42..8cec13b 100644 (file)
@@ -20,7 +20,8 @@
 
 [
     GenerateIsReachable=ImplElementRoot,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface NamedNodeMap {
 
     getter Node getNamedItem([Default=Undefined] optional DOMString name);
index 8626bc3..4393371 100644 (file)
@@ -29,6 +29,7 @@
     JSGenerateToNativeObject,
     JSInlineGetOwnPropertySlot,
     ObjCPolymorphic,
+    OperationsNotDeletable
 ] interface Node
 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
     : Object, EventTarget
index cec6bfc..eaef472 100644 (file)
@@ -24,7 +24,8 @@
     JSCustomToNativeObject,
     ObjCProtocol,
     CPPPureInterface,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface NodeFilter {
     // Constants returned by acceptNode
     const short               FILTER_ACCEPT                  = 1;
index 270004b..cf9e669 100644 (file)
@@ -21,7 +21,8 @@
 // Introduced in DOM Level 2:
 [
     JSCustomMarkFunction,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface NodeIterator {
     readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
index 491dc91..ef71994 100644 (file)
@@ -20,7 +20,8 @@
 
 [
     CustomIsReachable,
-    SkipVTableValidation
+    SkipVTableValidation,
+    OperationsNotDeletable
 ] interface NodeList {
 
     getter Node item(unsigned long index);
index 93d5ffd..b6c2f18 100644 (file)
@@ -20,7 +20,8 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface Range {
 
     [GetterRaisesException] readonly attribute Node startContainer;
index 7cc310e..e854644 100644 (file)
@@ -19,7 +19,8 @@
 
 [
     DoNotCheckConstants,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] exception RangeException {
 
     readonly attribute unsigned short   code;
index 1b87745..4e4e73d 100644 (file)
@@ -27,7 +27,8 @@
 [
     Conditional=SHADOW_DOM,
     JSGenerateToJSObject,
-    InterfaceName=WebKitShadowRoot
+    InterfaceName=WebKitShadowRoot,
+    OperationsNotDeletable
 ] interface ShadowRoot : DocumentFragment {
     readonly attribute Element activeElement;
     attribute boolean applyAuthorStyles;
index b3f92e9..f2fdfb5 100644 (file)
@@ -17,7 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-interface Text : CharacterData {
+[
+    OperationsNotDeletable
+] interface Text : CharacterData {
 
     // DOM Level 1
 
index 4af1a6f..f769e4f 100644 (file)
@@ -24,7 +24,9 @@
  */
 
 // Introduced in DOM Level 3:
-interface TextEvent : UIEvent {
+[
+    OperationsNotDeletable
+] interface TextEvent : UIEvent {
 
     readonly attribute DOMString data;
 
index 601f3ac..9162867 100644 (file)
@@ -24,7 +24,8 @@
  */
 
 [
-    Conditional=TOUCH_EVENTS
+    Conditional=TOUCH_EVENTS,
+    OperationsNotDeletable
 ] interface TouchEvent : UIEvent {
     readonly attribute TouchList touches;
     readonly attribute TouchList targetTouches;
index ebbf81c..e554ef2 100644 (file)
@@ -25,7 +25,8 @@
 
 [
     Conditional=TOUCH_EVENTS,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface TouchList {
     readonly attribute unsigned long length;
 
index 11736e8..ccb2167 100644 (file)
@@ -21,7 +21,8 @@
 // Introduced in DOM Level 2:
 [
     JSCustomMarkFunction,
-    ImplementationLacksVTable
+    ImplementationLacksVTable,
+    OperationsNotDeletable
 ] interface TreeWalker {
     readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
index 8a3b681..d6feeb5 100644 (file)
@@ -19,7 +19,8 @@
 
 [
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface UIEvent : Event {
     [InitializedByEventConstructor] readonly attribute DOMWindow view;
     [InitializedByEventConstructor] readonly attribute long detail;
index 9ce9386..f7062bb 100644 (file)
@@ -31,7 +31,8 @@
     NoInterfaceObject,
     EventTarget,
     JSGenerateToJSObject,
-    GenerateIsReachable=ImplOwnerNodeRoot
+    GenerateIsReachable=ImplOwnerNodeRoot,
+    OperationsNotDeletable
 ] interface WebKitNamedFlow {
     readonly attribute DOMString name;
     readonly attribute boolean overset;
index 84871c0..3b69ac8 100644 (file)
@@ -22,7 +22,8 @@
 // Introduced in DOM Level 3:
 [
     ConstructorConditional=DOM4_EVENTS_CONSTRUCTOR,
-    ConstructorTemplate=Event
+    ConstructorTemplate=Event,
+    OperationsNotDeletable
 ] interface WheelEvent : MouseEvent {
     // DeltaModeCode
     const unsigned long              DOM_DELTA_PIXEL = 0x00;