dom/tests/mochitest/general/test_interfaces.html
author Sebastian Hengst <archaeopteryx@coole-files.de>
Wed, 05 Oct 2016 17:03:06 +0200
changeset 359463 84cb9e48869cfa8126e44df7f5053e2d81e4f796
parent 359452 903fa45a9d6c45fe0a833396d8fae019360798c6
child 359611 492a39e1ca7c299ee74356c8d5937bec78f3e552
permissions -rw-r--r--
Backed out changeset 903fa45a9d6c (bug 1291715) for build bustage. r=backout

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=766694
-->
<head>
  <meta charset="utf-8">
  <title>Test for Bug 766694</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=766694">Mozilla Bug 766694</a>
<p id="display"></p>
<div id="content" style="display: none">

</div>
<pre id="test">
<script type="application/javascript">

/** Test for Bug 766694 **/

// This is a list of all interfaces that are exposed to every webpage.
// Please only add things to this list with great care and proper review
// from the associated module peers.

// This file lists global interfaces we want exposed and verifies they
// are what we intend. Each entry in the arrays below can either be a
// simple string with the interface name, or an object with a 'name'
// property giving the interface name as a string, and additional
// properties which qualify the exposure of that interface. For example:
//
// [
//   "AGlobalInterface",
//   {name: "ExperimentalThing", release: false},
//   {name: "ReallyExperimentalThing", nightly: true},
//   {name: "DesktopOnlyThing", desktop: true},
//   {name: "NonB2gOnlyThing", b2g: false},
//   {name: "FancyControl", xbl: true},
//   {name: "DisabledEverywhere", disabled: true},
// ];
//
// See createInterfaceMap() below for a complete list of properties.

// IMPORTANT: Do not change this list without review from
//            a JavaScript Engine peer!
var ecmaGlobals =
  [
    "Array",
    "ArrayBuffer",
    "Boolean",
    "DataView",
    "Date",
    "Error",
    "EvalError",
    "Float32Array",
    "Float64Array",
    "Function",
    // NB: We haven't bothered to resolve constants like Infinity and NaN on
    // Xrayed windows (which are seen from the XBL scope). We could support
    // this if needed with some refactoring.
    {name: "Infinity", xbl: false},
    "Int16Array",
    "Int32Array",
    "Int8Array",
    "InternalError",
    {name: "Intl", android: false},
    "Iterator",
    "JSON",
    "Map",
    "Math",
    {name: "NaN", xbl: false},
    "Number",
    "Object",
    "Promise",
    "Proxy",
    "RangeError",
    "ReferenceError",
    "Reflect",
    "RegExp",
    "Set",
    {name: "SharedArrayBuffer", nightly: true},
    {name: "SIMD", nightly: true},
    {name: "Atomics", nightly: true},
    "StopIteration",
    "String",
    "Symbol",
    "SyntaxError",
    {name: "TypedObject", nightly: true},
    "TypeError",
    "Uint16Array",
    "Uint32Array",
    "Uint8Array",
    "Uint8ClampedArray",
    "URIError",
    "WeakMap",
    "WeakSet",
  ];
// IMPORTANT: Do not change the list above without review from
//            a JavaScript Engine peer!

// IMPORTANT: Do not change the list below without review from a DOM peer,
//            except to remove items from it!
//
// This is a list of interfaces that were prefixed with 'moz' instead of 'Moz'.
// We should never to that again, interfaces in the DOM start with an uppercase
// letter. If you think you need to add an interface here, DON'T. Rename your
// interface.
var legacyMozPrefixedInterfaces =
  [
    "mozContact",
    "mozRTCIceCandidate",
    "mozRTCPeerConnection",
    "mozRTCSessionDescription",
  ];
// IMPORTANT: Do not change the list above without review from a DOM peer,
//            except to remove items from it!

// IMPORTANT: Do not change the list below without review from a DOM peer!
var interfaceNamesInGlobalScope =
  [
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AlarmsManager", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AnalyserNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "Animation"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AnimationEffectReadOnly", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AnimationEffectTiming", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AnimationEffectTimingReadOnly", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AnimationEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AnimationPlaybackEvent", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AnimationTimeline", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Attr",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Audio",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioBuffer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AudioChannelManager", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioContext",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioBufferSourceNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioDestinationNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioListener",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioParam",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioProcessingEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "AudioStreamTrack",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "AVInputPort", b2g: true, permission: ["inputport"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BarProp",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BatteryManager",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BeforeAfterKeyboardEvent", b2g: true,
     permission: ["embed-apps", "before-after-keyboard-event"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BeforeUnloadEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BiquadFilterNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Blob",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BlobEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothAdapter", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothAdapterEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothAttributeEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothClassOfDevice", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothDevice", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothDeviceEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothDiscoveryHandle", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGatt", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattAttributeEvent", b2g: true,
     permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattCharacteristic", b2g: true,
     permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattCharacteristicEvent", b2g: true,
     permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattDescriptor", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattServer", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothGattService", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothLeDeviceEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothManager", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapFolderListingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapGetMessageEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapMessagesListingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapMessageUpdateEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapRequestHandle", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapSendMessageEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothMapSetMessageStatusEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothObexAuthEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothObexAuthHandle", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothPbapRequestHandle", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothPairingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothPairingHandle", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothPhonebookPullingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothStatusChangedEvent", b2g: true,
     permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothVCardListingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BluetoothVCardPullingEvent", b2g: true, permission: ["bluetooth"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BoxObject", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "BrowserElementAudioChannel", b2g: true, permission: ["browser"] },
// IMPORTANT: Do not change this list without review from a DOM peer!
    "BroadcastChannel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Cache",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CacheStorage",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CallEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CallGroupErrorEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraCapabilities", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraClosedEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraConfigurationEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraControl", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraDetectedFace", b2g: true, permission: ["camera"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraFacesDetectedEvent", b2g: true, permission: ["camera"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraManager", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraRecorderAudioProfile", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraRecorderProfile", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraRecorderProfiles", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraRecorderVideoProfile", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CameraStateChangeEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CanvasCaptureMediaStream"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CanvasGradient",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CanvasPattern",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CanvasRenderingContext2D",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CaretPosition",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CDATASection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CFStateChangeEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ChannelMergerNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ChannelSplitterNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CharacterData",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ChromeNodeList", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ChromeWindow", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ClipboardEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CloseEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CommandEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Comment",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CompositionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Controllers",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ConvolverNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Crypto",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CryptoKey",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSS",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSS2Properties",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CSSAnimation", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSConditionRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSCounterStyleRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSFontFaceRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSFontFeatureValuesRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSGroupingRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSImportRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSKeyframeRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSKeyframesRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSMediaRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSMozDocumentRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSNameSpaceRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSPageRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSPrimitiveValue",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CSSPseudoElement", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSRuleList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSStyleDeclaration",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSStyleRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSStyleSheet",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSSupportsRule",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "CSSTransition", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSValue",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CSSValueList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CustomElementsRegistry",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "CustomEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DataChannel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "DataErrorEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DataTransfer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DataTransferItem",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DataTransferItemList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DelayNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DesktopNotification",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DesktopNotificationCenter",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DeviceLightEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DeviceMotionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DeviceOrientationEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DeviceProximityEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    { name: "DeviceStorageAreaChangedEvent", desktop: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    { name: "DeviceStorageAreaListener", desktop: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    { name: "DeviceStorage", desktop: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    { name: "DeviceStorageChangeEvent", desktop: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Directory",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "DisplayPortInputPort", b2g: true, permission: ["inputport"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Document",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DocumentFragment",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "DocumentTimeline", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DocumentType",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "DOMConstructor", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMCursor",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMError",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMException",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMImplementation",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMMatrix",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMMatrixReadOnly",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMParser",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMPoint",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMPointReadOnly",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMQuad",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMRect",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMRectList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMRectReadOnly",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMStringList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMStringMap",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMTokenList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DOMTransactionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DragEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "DynamicsCompressorNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Element",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ErrorEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Event",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "EventSource",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "EventTarget",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "External", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "File",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileReader",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileSystem",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileSystemDirectoryEntry",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileSystemDirectoryReader",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileSystemEntry",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FileSystemFileEntry",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "FMRadio", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FocusEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FormData",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FontFace",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FontFaceSet",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "FontFaceSetLoadEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "GainNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "Gamepad", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "GamepadAxisMoveEvent", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "GamepadButtonEvent", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "GamepadButton", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "GamepadEvent", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HashChangeEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Headers",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "History",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "HDMIInputPort", b2g: true, permission: ["inputport"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLAllCollection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLAnchorElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLAppletElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLAreaElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLAudioElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLBaseElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLBodyElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLBRElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLButtonElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLCanvasElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLCollection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLContentElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDataElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDataListElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDetailsElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDirectoryElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDivElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDListElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLDocument",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLEmbedElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFieldSetElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFontElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFormControlsCollection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFormElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFrameElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLFrameSetElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLHeadElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLHeadingElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLHRElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLHtmlElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLIFrameElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLImageElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLInputElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLLabelElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLLegendElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLLIElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLLinkElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMapElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMediaElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMenuElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMenuItemElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMetaElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLMeterElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLModElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLObjectElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLOListElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLOptGroupElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLOptionElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLOptionsCollection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLOutputElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLParagraphElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLParamElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLPreElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLPictureElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLProgressElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLQuoteElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLScriptElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLSelectElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLShadowElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLSourceElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLSpanElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLStyleElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableCaptionElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableCellElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableColElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableRowElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTableSectionElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTemplateElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTextAreaElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTimeElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTitleElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLTrackElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLUListElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLUnknownElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "HTMLVideoElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBCursor",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBCursorWithValue",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBDatabase",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBFactory",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBFileHandle",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBFileRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBIndex",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBKeyRange",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBMutableFile",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBObjectStore",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBOpenDBRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBTransaction",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IDBVersionChangeEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "IIRFilterNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Image",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ImageBitmap",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ImageBitmapRenderingContext",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ImageCapture", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ImageCaptureErrorEvent", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ImageData",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "InputEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "InputPort", b2g: true, permission: ["inputport"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "InputPortManager", b2g: true, permission: ["inputport"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "InstallTrigger", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "KeyEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "KeyboardEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "KeyframeEffectReadOnly", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "KeyframeEffect", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "LocalMediaStream",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Location",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaDeviceInfo",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaDevices",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaElementAudioSourceNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaError",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeyError", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaEncryptedEvent", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeys", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeySession", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeySystemAccess", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeyMessageEvent", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MediaKeyStatusMap", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaQueryList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaRecorder",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaSource",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStream",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStreamAudioDestinationNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStreamAudioSourceNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStreamEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStreamTrackEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MediaStreamTrack",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MenuBoxObject", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MessageChannel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MessageEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MessagePort",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MimeType",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MimeTypeArray",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MouseEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MouseScrollEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozActivity", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozClirModeEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "mozContact", b2g: true, permission: "contacts-read"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozContactChangeEvent", b2g: true, permission: "contacts-read"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozEmergencyCbModeEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozInputContext", b2g: true, permission: ["input"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozInputMethodManager", b2g: true, permission: ["input"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozMobileCellInfo", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozMobileConnection", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozMobileConnectionArray", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozMobileConnectionInfo", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozMobileNetworkInfo", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozNDEFRecord", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozOtaStatusEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozPowerManager", b2g: true, permission: "power"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "mozRTCIceCandidate",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "mozRTCPeerConnection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "mozRTCSessionDescription",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozSettingsEvent", permission: ["settings-api-read"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozSettingsTransactionEvent", permission: ["settings-api-read"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozSpeakerManager", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozTimeManager", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWakeLock", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiCapabilities", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiConnectionInfoEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiStationInfoEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
   {name: "MozWifiManager", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiNetwork", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiStatusChangeEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiP2pGroupOwner", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiP2pManager", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "MozWifiP2pStatusChangeEvent", b2g: true, permission: ["wifi-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MutationEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MutationObserver",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "MutationRecord",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "NamedNodeMap",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Navigator",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "NetworkInformation", desktop: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Node",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "NodeFilter",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "NodeIterator",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "NodeList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Notification",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "NotifyPaintEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "OffscreenCanvas", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "OfflineAudioCompletionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "OfflineAudioContext",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "OfflineResourceList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Option",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "OscillatorNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PageTransitionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PaintRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PaintRequestList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PannerNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Path2D",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Performance",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceEntry",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceMark",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceMeasure",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceNavigation",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PerformanceObserver", nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PerformanceObserverEntryList", nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceResourceTiming",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PerformanceTiming",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PeriodicWave",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Permissions",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PermissionSettings", b2g: true, permission: ["permissions"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PermissionStatus",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PhoneNumberService", permission: ["phonenumberservice"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Plugin",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PluginArray",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PointerEvent", nightly: true, desktop: true, disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PopStateEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "PopupBlockedEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PopupBoxObject", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationDeviceInfoManager",
     disabled: true,
     permission: ["presentation-device-manage"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "Presentation", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationAvailability", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationConnection", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationConnectionAvailableEvent", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationConnectionClosedEvent", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationConnectionList", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationReceiver", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PresentationRequest", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ProcessingInstruction",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ProgressEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PushManager", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PushSubscription", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "PushSubscriptionOptions", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RadioNodeList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Range",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RecordErrorEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Rect",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Request",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Response",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RGBColor",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCCertificate",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCDataChannelEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCIceCandidate",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCPeerConnection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCPeerConnectionIceEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCRtpReceiver",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCRtpSender",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCSessionDescription",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCStatsReport",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "RTCTrackEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Screen",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ScreenOrientation",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ScriptProcessorNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ScrollAreaEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Selection",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ServiceWorker", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ServiceWorkerContainer", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ServiceWorkerMessageEvent", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "ServiceWorkerRegistration", b2g: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SettingsLock",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SettingsManager",
     permission: ["settings-read", "settings-write"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ShadowRoot", // Bogus, but the test harness forces it on.  See bug 1159768.
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SharedWorker",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SimpleGestureEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SimpleTest", xbl: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SourceBuffer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SourceBufferList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpeechSynthesisErrorEvent", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpeechSynthesisEvent", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpeechSynthesis", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpeechSynthesisUtterance", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpeechSynthesisVoice", android: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "SpecialPowers", xbl: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "StereoPannerNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Storage",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "StorageEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "StorageManager",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "StyleSheet",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "StyleSheetList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SubtleCrypto",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAngle",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedAngle",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedBoolean",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedEnumeration",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedInteger",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedLength",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedLengthList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedNumber",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedNumberList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedPreserveAspectRatio",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedRect",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedString",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimatedTransformList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimateElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimateMotionElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimateTransformElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGAnimationElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGCircleElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGClipPathElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGComponentTransferFunctionElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGDefsElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGDescElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGEllipseElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEBlendElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEColorMatrixElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEComponentTransferElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFECompositeElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEConvolveMatrixElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEDiffuseLightingElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEDisplacementMapElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEDistantLightElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEDropShadowElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEFloodElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEFuncAElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEFuncBElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEFuncGElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEFuncRElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEGaussianBlurElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEImageElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEMergeElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEMergeNodeElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEMorphologyElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEOffsetElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFEPointLightElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFESpecularLightingElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFESpotLightElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFETileElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFETurbulenceElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGFilterElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGForeignObjectElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGGElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGGradientElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGGraphicsElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGImageElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGLength",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGLengthList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGLinearGradientElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGLineElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGMarkerElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGMaskElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGMatrix",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGMetadataElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGMPathElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGNumber",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGNumberList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSeg",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegArcAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegArcRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegClosePath",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoCubicAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoCubicRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoCubicSmoothAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoCubicSmoothRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoQuadraticAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoQuadraticRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoQuadraticSmoothAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegCurvetoQuadraticSmoothRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoHorizontalAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoHorizontalRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoVerticalAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegLinetoVerticalRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegMovetoAbs",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPathSegMovetoRel",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPatternElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPoint",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPointList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPolygonElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPolylineElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGPreserveAspectRatio",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGRadialGradientElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGRect",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGRectElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGScriptElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGSetElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGStopElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGStringList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGStyleElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGSVGElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGSwitchElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGSymbolElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTextContentElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTextElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTextPathElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTextPositioningElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTitleElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTransform",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTransformList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGTSpanElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGUnitTypes",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGUseElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGViewElement",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGZoomAndPan",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "SVGZoomEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "Telephony", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TelephonyCall", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TelephonyCallGroup", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TelephonyCallId", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Text",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextDecoder",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextEncoder",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextMetrics",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextTrack",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextTrackCue",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextTrackCueList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TextTrackList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TimeEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TimeRanges",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Touch",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TouchEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TouchList",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TrackEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TransitionEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TreeColumn", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TreeColumns", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TreeContentView", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TreeSelection", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "TreeWalker",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVChannel", b2g: true, permission: "tv"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVCurrentChannelChangedEvent", b2g: true, permission: "tv"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVCurrentSourceChangedEvent", b2g: true, permission: "tv"},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVEITBroadcastedEvent", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVManager", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVProgram", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVScanningStateChangedEvent", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVSource", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "TVTuner", b2g: true, permission: ["tv"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "U2F", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "UDPMessageEvent", b2g: true, permission: ["udp-socket"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "UDPSocket", b2g: true, permission: ["udp-socket"]},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "UIEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "UndoManager",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "URL",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "URLSearchParams",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "UserProximityEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "ValidityState",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "VideoPlaybackQuality",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "VideoStreamTrack",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VRDisplay", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VRDisplayCapabilities", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VREyeParameters", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VRFieldOfView", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VRPose", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VRStageParameters", release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "VTTCue",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "VTTRegion", disabled: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WaveShaperNode",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLActiveInfo",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLBuffer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLContextEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLFramebuffer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLProgram",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLQuery",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLRenderbuffer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLRenderingContext",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGL2RenderingContext",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLSampler",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLShader",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLShaderPrecisionFormat",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLSync",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLTexture",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLTransformFeedback",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLUniformLocation",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebGLVertexArrayObject",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebKitCSSMatrix",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WebSocket",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "WheelEvent",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Window",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "Worker",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLDocument",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLHttpRequest",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLHttpRequestEventTarget",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLHttpRequestUpload",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLSerializer",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XMLStylesheetProcessingInstruction",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XPathEvaluator",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XPathExpression",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XPathResult",
// IMPORTANT: Do not change this list without review from a DOM peer!
    "XSLTProcessor",
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULButtonElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULCheckboxElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULCommandDispatcher", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULCommandEvent", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULControlElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULControllers", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULDocument", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULLabeledControlElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULPopupElement", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULTemplateBuilder", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
    {name: "XULTreeBuilder", xbl: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
  ];
// IMPORTANT: Do not change the list above without review from a DOM peer!

function createInterfaceMap(isXBLScope) {
  var version = SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService(SpecialPowers.Ci.nsIXULAppInfo).version;
  var isNightly = version.endsWith("a1");
  var isRelease = !version.includes("a");
  var isDesktop = !/Mobile|Tablet/.test(navigator.userAgent);
  var isB2G = !isDesktop && !navigator.userAgent.includes("Android");
  var isMac = /Mac OS/.test(navigator.oscpu);
  var isWindows = /Windows/.test(navigator.oscpu);
  var isAndroid = navigator.userAgent.includes("Android");
  var isLinux = /Linux/.test(navigator.oscpu) && !isAndroid;
  var hasPermission = function (aPermissions) {
    var result = false;
    for (var p of aPermissions) {
      result = result || SpecialPowers.hasPermission(p, window.document);
    }
    return result;
  };

  var interfaceMap = {};

  function addInterfaces(interfaces)
  {
    for (var entry of interfaces) {
      if (typeof(entry) === "string") {
        interfaceMap[entry] = true;
      } else {
        ok(!("pref" in entry), "Bogus pref annotation for " + entry.name);
        if ((entry.nightly === !isNightly) ||
            (entry.nightlyAndroid === !(isAndroid && isNightly) && isAndroid) ||
            (entry.xbl === !isXBLScope) ||
            (entry.desktop === !isDesktop) ||
            (entry.b2g === !isB2G) ||
            (entry.windows === !isWindows) ||
            (entry.mac === !isMac) ||
            (entry.linux === !isLinux) ||
            (entry.android === !isAndroid && !entry.nightlyAndroid) ||
            (entry.release === !isRelease) ||
            (entry.permission && !hasPermission(entry.permission)) ||
            entry.disabled) {
          interfaceMap[entry.name] = false;
        } else {
          interfaceMap[entry.name] = true;
        }
      }
    }
  }

  addInterfaces(ecmaGlobals);
  addInterfaces(interfaceNamesInGlobalScope);
  if (isXBLScope) {
    // We expose QueryInterface to XBL scopes. It's not an interface but we
    // need to handle it because it's an own property of the global and the
    // property name starts with an uppercase letter.
    interfaceMap["QueryInterface"] = true;
  }

  return interfaceMap;
}

function runTest(isXBLScope) {
  var interfaceMap = createInterfaceMap(isXBLScope);
  for (var name of Object.getOwnPropertyNames(window)) {
    // An interface name should start with an upper case character.
    // However, we have a couple of legacy interfaces that start with 'moz', so
    // we want to allow those until we can remove them.
    if (!/^[A-Z]/.test(name) && legacyMozPrefixedInterfaces.indexOf(name) < 0) {
      continue;
    }
    ok(interfaceMap[name],
       "If this is failing: DANGER, are you sure you want to expose the new interface " + name +
       " to all webpages as a property on the window (XBL: " + isXBLScope + ")? Do not make a change to this file without a " +
       " review from a DOM peer for that specific change!!! (or a JS peer for changes to ecmaGlobals)");
    delete interfaceMap[name];
  }
  for (var name of Object.keys(interfaceMap)) {
    ok(name in window === interfaceMap[name],
       name + " should " + (interfaceMap[name] ? "" : " NOT") + " be defined on the " + (isXBLScope ? "XBL" : "global") +" scope");
    if (!interfaceMap[name]) {
      delete interfaceMap[name];
    }
  }
  if (isXBLScope) {
    todo_is(Object.keys(interfaceMap).length, 0,
            "The following interface(s) are not enumerated: " + Object.keys(interfaceMap).join(", "));
  } else {
    is(Object.keys(interfaceMap).length, 0,
       "The following interface(s) are not enumerated: " + Object.keys(interfaceMap).join(", "));
  }
}

runTest(false);
SimpleTest.waitForExplicitFinish();

</script>
<span id="span" style="-moz-binding: url(file_interfaces.xml)"></span>
</pre>
</body>
</html>