Bug 1423562 part 3. Remove [PrimaryGlobal] and require explicit [Exposed] annotations on everything. r=edgar

For review purposes, the important changes are in dom/bindings/Configuration.py
and dom/bindings/parser.

The changes to the IDL files were done by running these in dom/webidl
and dom/bindings/test:

  perl -pi -e 's/^interface ([A-Za-z0-9_]+)($| [:{])/[Exposed=Window]\ninterface \1\2/' *.webidl

  perl -pi -e 'BEGIN { $/ = undef; } s/\[HTMLConstructor\]\n\[Exposed=Window\]/[HTMLConstructor,\n Exposed=Window]/g' *.webidl

  perl -pi -e 'BEGIN { $/ = undef; } s/\[NoInterfaceObject\]\n\[Exposed=Window\]/[NoInterfaceObject,\n Exposed=Window]/g' *.webidl

  perl -pi -e 'BEGIN { $/ = undef; } s/\[ChromeOnly\]\n\[Exposed=Window\]/[ChromeOnly,\n Exposed=Window]/g' *.webidl

And running this in dom/chrome-webidl:

  perl -pi -e 'BEGIN { $/ = undef; } s/\[ChromeOnly\]\ninterface/[ChromeOnly, Exposed=Window]\ninterface/g' *.webidl

and then fixing all the resulting parser failures.  I then verified that the
generated code is the same as before this change.

Differential Revision: https://phabricator.services.mozilla.com/D46697

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Boris Zbarsky 2019-09-27 15:26:14 +00:00
parent 29f544b623
commit e5497b955e
544 changed files with 1241 additions and 578 deletions

View File

@ -708,9 +708,8 @@ struct NamedConstructor {
* underlying global.
* unscopableNames if not null it points to a null-terminated list of const
* char* names of the unscopable properties for this interface.
* isGlobal if true, we're creating interface objects for a [Global] or
* [PrimaryGlobal] interface, and hence shouldn't define properties on
* the prototype object.
* isGlobal if true, we're creating interface objects for a [Global] interface,
* and hence shouldn't define properties on the prototype object.
* legacyWindowAliases if not null it points to a null-terminated list of const
* char* names of the legacy window aliases for this
* interface.

View File

@ -748,8 +748,7 @@ class Descriptor(DescriptorProvider):
Returns true if this is the primary interface for a global object
of some sort.
"""
return (self.interface.getExtendedAttribute("Global") or
self.interface.getExtendedAttribute("PrimaryGlobal"))
return self.interface.getExtendedAttribute("Global")
@property
def namedPropertiesEnumerable(self):

View File

@ -236,8 +236,6 @@ class IDLScope(IDLObject):
# A mapping from global name to the set of global interfaces
# that have that global name.
self.globalNameMapping = defaultdict(set)
self.primaryGlobalAttr = None
self.primaryGlobalName = None
def __str__(self):
return self.QName()
@ -465,8 +463,17 @@ class IDLExposureMixins():
raise WebIDLError("Unknown [Exposed] value %s" % globalName,
[self._location])
if len(self._exposureGlobalNames) == 0:
self._exposureGlobalNames.add(scope.primaryGlobalName)
# Verify that we are exposed _somwhere_ if we have some place to be
# exposed. We don't want to assert that we're definitely exposed
# because a lot of our parser tests have small-enough IDL snippets that
# they don't include any globals, and we don't really want to go through
# and add global interfaces and [Exposed] annotations to all those
# tests.
if len(scope.globalNames) != 0:
if (len(self._exposureGlobalNames) == 0):
raise WebIDLError(("'%s' is not exposed anywhere even though we have "
"globals to be exposed to") % self,
[self.location])
globalNameSetToExposureSet(scope, self._exposureGlobalNames,
self.exposureSet)
@ -798,8 +805,10 @@ class IDLInterfaceMixin(IDLInterfaceOrInterfaceMixinOrNamespace):
# Expose to the globals of interfaces that includes this mixin if this
# mixin has no explicit [Exposed] so that its members can be exposed
# based on the base interface exposure set.
# Make sure this is done before IDLExposureMixins.finish call to
# prevent exposing to PrimaryGlobal by default.
#
# Make sure this is done before IDLExposureMixins.finish call, since
# that converts our set of exposure global names to an actual exposure
# set.
hasImplicitExposure = len(self._exposureGlobalNames) == 0
if hasImplicitExposure:
self._exposureGlobalNames.update(self.actualExposureGlobalNames)
@ -997,10 +1006,8 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
self.totalMembersInSlots = self.parent.totalMembersInSlots
# Interfaces with [Global] or [PrimaryGlobal] must not
# have anything inherit from them
if (self.parent.getExtendedAttribute("Global") or
self.parent.getExtendedAttribute("PrimaryGlobal")):
# Interfaces with [Global] must not have anything inherit from them
if self.parent.getExtendedAttribute("Global"):
# Note: This is not a self.parent.isOnGlobalProtoChain() check
# because ancestors of a [Global] interface can have other
# descendants.
@ -1094,7 +1101,7 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
if self.globalNames:
raise WebIDLError(
"Can't have both a named constructor and [Global]",
[self.location, self.namedConstructors.location])
[self.location, ctor.location])
assert len(ctor._exposureGlobalNames) == 0
ctor._exposureGlobalNames.update(self._exposureGlobalNames)
ctor.finish(scope)
@ -1718,20 +1725,6 @@ class IDLInterface(IDLInterfaceOrNamespace):
self.parentScope.addIfaceGlobalNames(self.identifier.name,
self.globalNames)
self._isOnGlobalProtoChain = True
elif identifier == "PrimaryGlobal":
if not attr.noArguments():
raise WebIDLError("[PrimaryGlobal] must take no arguments",
[attr.location])
if self.parentScope.primaryGlobalAttr is not None:
raise WebIDLError(
"[PrimaryGlobal] specified twice",
[attr.location,
self.parentScope.primaryGlobalAttr.location])
self.parentScope.primaryGlobalAttr = attr
self.parentScope.primaryGlobalName = self.identifier.name
self.parentScope.addIfaceGlobalNames(self.identifier.name,
[self.identifier.name])
self._isOnGlobalProtoChain = True
elif identifier == "LegacyWindowAlias":
if attr.hasValue():
self.legacyWindowAliases = [attr.value()]
@ -3780,10 +3773,6 @@ class IDLInterfaceMember(IDLObjectWithIdentifier, IDLExposureMixins):
return self._extendedAttrDict.get(name, None)
def finish(self, scope):
# We better be exposed _somewhere_.
if (len(self._exposureGlobalNames) == 0):
print(self.identifier.name)
assert len(self._exposureGlobalNames) != 0
IDLExposureMixins.finish(self, scope)
def validate(self):
@ -5484,10 +5473,8 @@ class IDLIncludesStatement(IDLObject):
raise WebIDLError("Right-hand side of 'includes' is not an "
"interface mixin",
[self.mixin.location, mixin.location])
if len(interface._exposureGlobalNames) != 0:
mixin.actualExposureGlobalNames.update(interface._exposureGlobalNames)
else:
mixin.actualExposureGlobalNames.add(scope.primaryGlobalName);
mixin.actualExposureGlobalNames.update(interface._exposureGlobalNames)
interface.addIncludedMixin(mixin)
self.interface = interface
@ -7335,12 +7322,6 @@ class Parser(Tokenizer):
self._globalScope = IDLScope(BuiltinLocation("<Global Scope>"), None, None)
# To make our test harness work, pretend like we have a primary global already.
# Note that we _don't_ set _globalScope.primaryGlobalAttr,
# so we'll still be able to detect multiple PrimaryGlobal extended attributes.
self._globalScope.primaryGlobalName = "FakeTestPrimaryGlobal"
self._globalScope.addIfaceGlobalNames("FakeTestPrimaryGlobal", ["FakeTestPrimaryGlobal"])
self._installBuiltins(self._globalScope)
self._productions = []

View File

@ -1,8 +1,10 @@
import traceback
def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global]
[Global, Exposed=TestConstructorGlobal]
interface TestConstructorGlobal {
constructor();
};
@ -18,7 +20,8 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global, NamedConstructor=FooBar]
[Global, Exposed=TestNamedConstructorGlobal,
NamedConstructor=FooBar]
interface TestNamedConstructorGlobal {
};
""")
@ -32,7 +35,8 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[NamedConstructor=FooBar, Global]
[NamedConstructor=FooBar, Global,
Exposed=TestNamedConstructorGlobal]
interface TestNamedConstructorGlobal {
};
""")
@ -46,7 +50,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global, HTMLConstructor]
[Global, HTMLConstructor, Exposed=TestHTMLConstructorGlobal]
interface TestHTMLConstructorGlobal {
};
""")
@ -61,7 +65,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[HTMLConstructor, Global]
[HTMLConstructor, Global, Exposed=TestHTMLConstructorGlobal]
interface TestHTMLConstructorGlobal {
};
""")

View File

@ -2,9 +2,9 @@ import WebIDL
def WebIDLTest(parser, harness):
parser.parse("""
[PrimaryGlobal] interface Foo {};
[Global=(Bar1,Bar2)] interface Bar {};
[Global=Baz2] interface Baz {};
[Global, Exposed=Foo] interface Foo {};
[Global=(Bar, Bar1,Bar2), Exposed=Bar] interface Bar {};
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
[Exposed=(Foo,Bar1)]
interface Iface {
@ -51,10 +51,11 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[PrimaryGlobal] interface Foo {};
[Global=(Bar1,Bar2)] interface Bar {};
[Global=Baz2] interface Baz {};
[Global, Exposed=Foo] interface Foo {};
[Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
[Exposed=Foo]
interface Iface2 {
void method3();
};
@ -80,9 +81,9 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[PrimaryGlobal] interface Foo {};
[Global=(Bar1,Bar2)] interface Bar {};
[Global=Baz2] interface Baz {};
[Global, Exposed=Foo] interface Foo {};
[Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
[Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
[Exposed=Foo]
interface Iface3 {
@ -181,8 +182,8 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global] interface Foo {};
[Global] interface Bar {};
[Global, Exposed=Foo] interface Foo {};
[Global, Exposed=Bar] interface Bar {};
[Exposed=Foo]
interface Baz {
@ -199,8 +200,8 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[Global] interface Foo {};
[Global] interface Bar {};
[Global, Exposed=Foo] interface Foo {};
[Global, Exposed=Bar] interface Bar {};
[Exposed=Foo]
interface Baz {

View File

@ -1,9 +1,10 @@
def WebIDLTest(parser, harness):
parser.parse("""
[Global]
[Global, Exposed=Foo]
interface Foo : Bar {
getter any(DOMString name);
};
[Exposed=Foo]
interface Bar {};
""")
@ -18,7 +19,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global]
[Global, Exposed=Foo]
interface Foo {
getter any(DOMString name);
setter void(DOMString name, any arg);
@ -36,7 +37,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global]
[Global, Exposed=Foo]
interface Foo {
getter any(DOMString name);
deleter void(DOMString name);
@ -54,7 +55,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global, OverrideBuiltins]
[Global, OverrideBuiltins, Exposed=Foo]
interface Foo {
};
""")
@ -70,10 +71,10 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global]
[Global, Exposed=Foo]
interface Foo : Bar {
};
[OverrideBuiltins]
[OverrideBuiltins, Exposed=Foo]
interface Bar {
};
""")
@ -89,9 +90,10 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global]
[Global, Exposed=Foo]
interface Foo {
};
[Exposed=Foo]
interface Bar : Foo {
};
""")

View File

@ -283,7 +283,7 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[Global] interface Window {};
[Global, Exposed=Window] interface Window {};
[Exposed=Window, LegacyWindowAlias=A]
interface B {};
[Exposed=Window, LegacyWindowAlias=(C, D)]
@ -325,7 +325,8 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global] interface Window {};
[Global, Exposed=Window] interface Window {};
[Exposed=Window]
interface A {};
[Exposed=Window, LegacyWindowAlias=A]
interface B {};
@ -340,9 +341,10 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global] interface Window {};
[Global, Exposed=Window] interface Window {};
[Exposed=Window, LegacyWindowAlias=A]
interface B {};
[Exposed=Window]
interface A {};
""")
results = parser.finish()
@ -355,7 +357,7 @@ def WebIDLTest(parser, harness):
threw = False
try:
parser.parse("""
[Global] interface Window {};
[Global, Exposed=Window] interface Window {};
[Exposed=Window, LegacyWindowAlias=A]
interface B {};
[Exposed=Window, LegacyWindowAlias=A]

View File

@ -377,8 +377,8 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[Global] interface Window {};
[Global] interface Worker {};
[Global, Exposed=Window] interface Window {};
[Global, Exposed=Worker] interface Worker {};
[Exposed=Window]
interface Base {};
interface mixin Mixin {
@ -394,8 +394,8 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[Global] interface Window {};
[Global] interface Worker {};
[Global, Exposed=Window] interface Window {};
[Global, Exposed=Worker] interface Worker {};
[Exposed=Window]
interface Base {};
[Exposed=Window]
@ -412,8 +412,8 @@ def WebIDLTest(parser, harness):
parser = parser.reset()
parser.parse("""
[Global] interface Window {};
[Global] interface Worker {};
[Global, Exposed=Window] interface Window {};
[Global, Exposed=Worker] interface Worker {};
[Exposed=Window]
interface Base1 {};
[Exposed=Worker]
@ -435,28 +435,3 @@ def WebIDLTest(parser, harness):
harness.check(attr.exposureSet, set(["Window", "Worker"]),
"Should expose on all globals where including interfaces are "
"exposed")
parser = parser.reset()
parser.parse("""
[PrimaryGlobal] interface Window {};
[Global] interface Worker {};
interface Base1 {};
[Exposed=Worker]
interface Base2 {};
interface mixin Mixin {
attribute short a;
};
Base1 includes Mixin;
Base2 includes Mixin;
""")
results = parser.finish()
base = results[2]
attr = base.members[0]
harness.check(attr.exposureSet, set(["Window", "Worker"]),
"Should expose on all globals where including interfaces are "
"exposed")
base = results[3]
attr = base.members[0]
harness.check(attr.exposureSet, set(["Window", "Worker"]),
"Should expose on all globals where including interfaces are "
"exposed")

View File

@ -12,10 +12,12 @@ typedef CustomEventInit TestDictionaryTypedef;
interface TestExternalInterface;
// We need a pref name that's in StaticPrefList.h here.
[Pref="dom.webidl.test1"]
[Pref="dom.webidl.test1",
Exposed=Window]
interface TestRenamedInterface {
};
[Exposed=Window]
callback interface TestCallbackInterface {
readonly attribute long foo;
attribute DOMString bar;
@ -59,6 +61,7 @@ callback interface TestCallbackInterface {
Promise<void> receivePromise();
};
[Exposed=Window]
callback interface TestSingleOperationCallbackInterface {
TestInterface doSomething(short arg, sequence<double> anotherArg);
};
@ -142,6 +145,7 @@ callback constructor TestSequenceConstruction = sequence<boolean>();
TestInterface includes InterfaceMixin;
// This interface is only for use in the constructor below
[Exposed=Window]
interface OnlyForUseInConstructor {
};
@ -154,6 +158,7 @@ interface OnlyForUseInConstructor {
NamedConstructor=Test4(record<DOMString, record<DOMString, any>> arg1),
NamedConstructor=Test5(record<DOMString, sequence<record<DOMString, record<DOMString, sequence<sequence<any>>>>>> arg1),
NamedConstructor=Test6(sequence<record<ByteString, sequence<sequence<record<ByteString, record<USVString, any>>>>>> arg1),
Exposed=Window,
]
interface TestInterface {
constructor();
@ -1019,12 +1024,15 @@ interface TestInterface {
// If you add things here, add them to TestExampleGen and TestJSImplGen as well
};
[Exposed=Window]
interface TestParentInterface {
};
[Exposed=Window]
interface TestChildInterface : TestParentInterface {
};
[Exposed=Window]
interface TestNonWrapperCacheInterface {
};
@ -1189,6 +1197,7 @@ dictionary DictWithConditionalMembers {
long chromeOnlyFuncAndPrefControlledMember;
};
[Exposed=Window]
interface TestIndexedGetterInterface {
getter long item(unsigned long idx);
readonly attribute unsigned long length;
@ -1197,10 +1206,12 @@ interface TestIndexedGetterInterface {
[StoreInSlot, Pure] readonly attribute long storeInSlotAttr;
};
[Exposed=Window]
interface TestNamedGetterInterface {
getter DOMString (DOMString name);
};
[Exposed=Window]
interface TestIndexedGetterAndSetterAndNamedGetterInterface {
getter DOMString (DOMString myName);
getter long (unsigned long index);
@ -1208,23 +1219,27 @@ interface TestIndexedGetterAndSetterAndNamedGetterInterface {
readonly attribute unsigned long length;
};
[Exposed=Window]
interface TestIndexedAndNamedGetterInterface {
getter long (unsigned long index);
getter DOMString namedItem(DOMString name);
readonly attribute unsigned long length;
};
[Exposed=Window]
interface TestIndexedSetterInterface {
setter void setItem(unsigned long idx, DOMString item);
getter DOMString (unsigned long idx);
readonly attribute unsigned long length;
};
[Exposed=Window]
interface TestNamedSetterInterface {
setter void (DOMString myName, TestIndexedSetterInterface item);
getter TestIndexedSetterInterface (DOMString name);
};
[Exposed=Window]
interface TestIndexedAndNamedSetterInterface {
setter void (unsigned long index, TestIndexedSetterInterface item);
getter TestIndexedSetterInterface (unsigned long index);
@ -1233,6 +1248,7 @@ interface TestIndexedAndNamedSetterInterface {
getter TestIndexedSetterInterface (DOMString name);
};
[Exposed=Window]
interface TestIndexedAndNamedGetterAndSetterInterface : TestIndexedSetterInterface {
getter long item(unsigned long index);
getter DOMString namedItem(DOMString name);
@ -1242,23 +1258,27 @@ interface TestIndexedAndNamedGetterAndSetterInterface : TestIndexedSetterInterfa
readonly attribute unsigned long length;
};
[Exposed=Window]
interface TestNamedDeleterInterface {
deleter void (DOMString name);
getter long (DOMString name);
};
[Exposed=Window]
interface TestNamedDeleterWithRetvalInterface {
deleter boolean delNamedItem(DOMString name);
getter long (DOMString name);
};
[Exposed=Window]
interface TestCppKeywordNamedMethodsInterface {
boolean continue();
boolean delete();
long volatile();
};
[Deprecated="EnablePrivilege"]
[Deprecated="EnablePrivilege",
Exposed=Window]
interface TestDeprecatedInterface {
constructor();
@ -1266,10 +1286,12 @@ interface TestDeprecatedInterface {
};
[Exposed=Window]
interface TestInterfaceWithPromiseConstructorArg {
constructor(Promise<void> promise);
};
[Exposed=Window]
namespace TestNamespace {
readonly attribute boolean foo;
long bar();
@ -1279,15 +1301,18 @@ partial namespace TestNamespace {
void baz();
};
[ClassString="RenamedNamespaceClassName"]
[ClassString="RenamedNamespaceClassName",
Exposed=Window]
namespace TestRenamedNamespace {
};
[ProtoObjectHack]
[ProtoObjectHack,
Exposed=Window]
namespace TestProtoObjectHackedNamespace {
};
[SecureContext]
[SecureContext,
Exposed=Window]
interface TestSecureContextInterface {
static void alsoSecureContext();
};
@ -1302,10 +1327,12 @@ interface TestWorkerExposedInterface {
[NeedsSubjectPrincipal=NonSystem] attribute boolean needsNonSystemSubjectPrincipalAttr;
};
[HTMLConstructor]
[HTMLConstructor,
Exposed=Window]
interface TestHTMLConstructorInterface {
};
[Exposed=Window]
interface TestThrowingConstructorInterface {
[Throws]
constructor();
@ -1326,6 +1353,7 @@ interface TestThrowingConstructorInterface {
// [Throws] constructor(long arg1, long arg2, (TestInterface or OnlyForUseInConstructor) arg3);
};
[Exposed=Window]
interface TestCEReactionsInterface {
[CEReactions] setter void (unsigned long index, long item);
[CEReactions] setter void (DOMString name, DOMString item);
@ -1349,6 +1377,7 @@ dictionary TestAttributesOnDictionaryMembers {
// test [ChromeOnly] required [Clamp] octet e
};
[Exposed=Window]
interface TestAttributesOnTypes {
void foo(OctetClamp thingy);
void bar(OctetRange thingy);

View File

@ -8,7 +8,8 @@
NamedConstructor=Example2(DictForConstructor dict, any any1, object obj1,
object? obj2, sequence<Dict> seq, optional any any2,
optional object obj3, optional object? obj4),
NamedConstructor=Example2((long or record<DOMString, any>) arg1)
NamedConstructor=Example2((long or record<DOMString, any>) arg1),
Exposed=Window,
]
interface TestExampleInterface {
constructor();
@ -820,6 +821,7 @@ interface TestExampleInterface {
// If you add things here, add them to TestCodeGen and TestJSImplGen as well
};
[Exposed=Window]
interface TestExampleProxyInterface {
getter long longIndexedGetter(unsigned long ix);
setter void longIndexedSetter(unsigned long y, long z);
@ -840,6 +842,7 @@ interface TestExampleWorkerInterface {
[NeedsSubjectPrincipal=NonSystem] attribute boolean needsNonSystemSubjectPrincipalAttr;
};
[Exposed=Window]
interface TestExampleThrowingConstructorInterface {
[Throws]
constructor();

View File

@ -15,7 +15,7 @@ enum MyTestEnum {
"b"
};
[JSImplementation="@mozilla.org/test-js-impl-interface;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface;1"]
interface TestJSImplInterface {
// We don't support multiple constructors (bug 869268) or named constructors
// for JS-implemented WebIDL.
@ -842,14 +842,17 @@ interface TestJSImplInterface {
// If you add things here, add them to TestCodeGen as well
};
[Exposed=Window]
interface TestCImplementedInterface : TestJSImplInterface {
};
[Exposed=Window]
interface TestCImplementedInterface2 {
};
[NoInterfaceObject,
JSImplementation="@mozilla.org/test-js-impl-interface;2"]
JSImplementation="@mozilla.org/test-js-impl-interface;2",
Exposed=Window]
interface TestJSImplNoInterfaceObject {
// [Cached] is not supported in JS-implemented WebIDL.
//[Cached, Pure]

View File

@ -4,13 +4,13 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[JSImplementation="@mozilla.org/test-js-impl-interface2;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface2;1"]
interface TestJSImplInterface2 : TestCImplementedInterface {
[Throws]
constructor();
};
[JSImplementation="@mozilla.org/test-js-impl-interface3;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface3;1"]
interface TestJSImplInterface3 : TestCImplementedInterface2 {
[Throws]
constructor();
@ -18,7 +18,7 @@ interface TestJSImplInterface3 : TestCImplementedInterface2 {
// Important: TestJSImplInterface5 needs to come before TestJSImplInterface6 in
// this file to test what it's trying to test.
[JSImplementation="@mozilla.org/test-js-impl-interface5;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface5;1"]
interface TestJSImplInterface5 : TestJSImplInterface6 {
[Throws]
constructor();
@ -26,13 +26,13 @@ interface TestJSImplInterface5 : TestJSImplInterface6 {
// Important: TestJSImplInterface6 needs to come after TestJSImplInterface3 in
// this file to test what it's trying to test.
[JSImplementation="@mozilla.org/test-js-impl-interface6;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface6;1"]
interface TestJSImplInterface6 : TestJSImplInterface3 {
[Throws]
constructor();
};
[JSImplementation="@mozilla.org/test-js-impl-interface4;1"]
[Exposed=Window, JSImplementation="@mozilla.org/test-js-impl-interface4;1"]
interface TestJSImplInterface4 : EventTarget {
[Throws]
constructor();

View File

@ -24,7 +24,7 @@
*
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface DOMLocalization : Localization {
/**
* Constructor arguments:

View File

@ -20,7 +20,7 @@ enum DebuggerNotificationType {
"domEvent",
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface DebuggerNotification {
readonly attribute DebuggerNotificationType type;
@ -37,7 +37,7 @@ enum CallbackDebuggerNotificationPhase {
// A base notification type for notifications that are dispatched as pairs with
// a before and after notification.
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface CallbackDebuggerNotification : DebuggerNotification {
readonly attribute CallbackDebuggerNotificationPhase phase;
};
@ -50,7 +50,7 @@ enum EventCallbackDebuggerNotificationType {
};
// A notification that about the engine calling a DOM event handler.
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface EventCallbackDebuggerNotification : CallbackDebuggerNotification {
readonly attribute Event event;
readonly attribute EventCallbackDebuggerNotificationType targetType;

View File

@ -16,7 +16,8 @@
* are added to the document, and is removed in case all links
* of that type are removed from it.
*/
[NoInterfaceObject]
[NoInterfaceObject,
Exposed=Window]
interface DocumentL10n : DOMLocalization {
/**
* A promise which gets resolved when the initial DOM localization resources

View File

@ -20,7 +20,7 @@ enum FlexPhysicalDirection {
"vertical-bt",
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface Flex
{
sequence<FlexLineValues> getLines();
@ -51,7 +51,7 @@ interface Flex
*/
enum FlexLineGrowthState { "shrinking", "growing" };
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface FlexLineValues
{
readonly attribute FlexLineGrowthState growthState;
@ -79,7 +79,7 @@ enum FlexItemClampState {
"unclamped", "clamped_to_min", "clamped_to_max"
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface FlexItemValues
{
readonly attribute Node? node;

View File

@ -9,7 +9,8 @@
*
* See InspectorUtils.h for documentation on these methods.
*/
[Func="nsContentUtils::IsCallerChromeOrFuzzingEnabled"]
[Func="nsContentUtils::IsCallerChromeOrFuzzingEnabled",
Exposed=Window]
namespace InspectorUtils {
// documentOnly tells whether user and UA sheets should get included.
sequence<StyleSheet> getAllStyleSheets(Document document, optional boolean documentOnly = false);
@ -136,7 +137,8 @@ dictionary InspectorFontFeature {
required DOMString languageSystem;
};
[Func="nsContentUtils::IsCallerChromeOrFuzzingEnabled"]
[Func="nsContentUtils::IsCallerChromeOrFuzzingEnabled",
Exposed=Window]
interface InspectorFontFace {
// An indication of how we found this font during font-matching.
// Note that the same physical font may have been found in multiple ways within a range.

View File

@ -16,7 +16,7 @@ interface mixin JSWindowActor {
optional any obj);
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface JSWindowActorParent {
[ChromeOnly]
constructor();
@ -33,7 +33,7 @@ interface JSWindowActorParent {
};
JSWindowActorParent includes JSWindowActor;
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface JSWindowActorChild {
[ChromeOnly]
constructor();
@ -71,6 +71,7 @@ JSWindowActorChild includes JSWindowActor;
* NOTE: This isn't marked as ChromeOnly, as it has no interface object, and
* thus cannot be conditionally exposed.
*/
[Exposed=Window]
callback interface MozObserverCallback {
void observe(nsISupports subject, ByteString topic, DOMString? data);
};

View File

@ -10,7 +10,8 @@ dictionary L10nOverlaysError {
DOMString l10nName;
};
[ChromeOnly]
[ChromeOnly,
Exposed=Window]
namespace L10nOverlays {
const unsigned short ERROR_FORBIDDEN_TYPE = 1;
const unsigned short ERROR_NAMED_ELEMENT_MISSING = 2;

View File

@ -62,7 +62,7 @@ callback GenerateMessages = Promise<any> (sequence<DOMString> aResourceIds);
* - formatMessages - format multiple compound messages
*
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface Localization {
/**
* Constructor arguments:

View File

@ -203,6 +203,7 @@ dictionary ReceiveMessageArgument
FrameLoader targetFrameLoader;
};
[Exposed=Window]
callback interface MessageListener
{
/**
@ -220,7 +221,7 @@ callback interface MessageListener
any receiveMessage(ReceiveMessageArgument argument);
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MessageListenerManager
{
// All the methods are pulled in via mixin.
@ -286,7 +287,7 @@ interface mixin MessageListenerManagerMixin
* messages that are only delivered to its one parent-process message
* manager.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MessageSender : MessageListenerManager
{
// All the methods are pulled in via mixin.
@ -336,7 +337,7 @@ interface mixin MessageSenderMixin {
readonly attribute DOMString remoteType;
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface SyncMessageSender : MessageSender
{
// All the methods are pulled in via mixin.
@ -379,7 +380,7 @@ interface mixin SyncMessageSenderMixin
* ChildProcessMessageManager is used in a child process to communicate with the parent
* process.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ChildProcessMessageManager : SyncMessageSender
{
};
@ -487,7 +488,7 @@ interface mixin GlobalProcessScriptLoader
readonly attribute MozWritableSharedMap sharedData;
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ContentFrameMessageManager : EventTarget
{
/**
@ -521,7 +522,7 @@ ContentFrameMessageManager includes SyncMessageSenderMixin;
ContentFrameMessageManager includes MessageSenderMixin;
ContentFrameMessageManager includes MessageListenerManagerMixin;
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ContentProcessMessageManager
{
/**
@ -544,7 +545,7 @@ ContentProcessMessageManager includes MessageListenerManagerMixin;
* through a window message manager will broadcast the message to all frame message
* managers within its window.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MessageBroadcaster : MessageListenerManager
{
/**
@ -580,7 +581,7 @@ interface MessageBroadcaster : MessageListenerManager
/**
* ChromeMessageBroadcaster is used for window and group message managers.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ChromeMessageBroadcaster : MessageBroadcaster
{
};
@ -590,14 +591,14 @@ ChromeMessageBroadcaster includes FrameScriptLoader;
* ParentProcessMessageManager is used in a parent process to communicate with all the
* child processes.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ParentProcessMessageManager : MessageBroadcaster
{
};
ParentProcessMessageManager includes ProcessScriptLoader;
ParentProcessMessageManager includes GlobalProcessScriptLoader;
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ChromeMessageSender : MessageSender
{
};
@ -607,7 +608,7 @@ ChromeMessageSender includes FrameScriptLoader;
* ProcessMessageManager is used in a parent process to communicate with a child process
* (or with the process itself in a single-process scenario).
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface ProcessMessageManager : MessageSender
{
};

View File

@ -4,6 +4,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Exposed=Window]
callback interface MozDocumentCallback {
void onNewDocument(MozDocumentMatcher matcher, WindowProxy window);
void onPreloadDocument(MozDocumentMatcher matcher, LoadInfo loadInfo);

View File

@ -6,7 +6,7 @@
typedef any StructuredClonable;
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozSharedMapChangeEvent : Event {
[Cached, Constant]
readonly attribute sequence<DOMString> changedKeys;
@ -16,7 +16,7 @@ dictionary MozSharedMapChangeEventInit : EventInit {
required sequence<DOMString> changedKeys;
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozSharedMap : EventTarget {
boolean has(DOMString name);
@ -26,7 +26,7 @@ interface MozSharedMap : EventTarget {
iterable<DOMString, StructuredClonable>;
};
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozWritableSharedMap : MozSharedMap {
/**
* Sets the given key to the given structured-clonable value. The value is

View File

@ -3,7 +3,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozStorageAsyncStatementParams
{
readonly attribute unsigned long length;

View File

@ -3,7 +3,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozStorageStatementParams
{
readonly attribute unsigned long length;

View File

@ -3,7 +3,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface MozStorageStatementRow
{
[Throws]

View File

@ -29,6 +29,7 @@ enum PromiseDebuggingState { "pending", "fulfilled", "rejected" };
* this interface are responsible for presenting the information
* in a meaningful manner.
*/
[Exposed=Window]
callback interface UncaughtRejectionObserver {
/**
* A Promise has been left in `rejected` state and is the

View File

@ -6,7 +6,8 @@
interface nsIDocShell;
interface nsIWebNavigation;
[HTMLConstructor, Func="IsChromeOrXBL"]
[HTMLConstructor, Func="IsChromeOrXBL",
Exposed=Window]
interface XULFrameElement : XULElement
{
readonly attribute nsIDocShell? docShell;

View File

@ -5,7 +5,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[HTMLConstructor, Func="IsChromeOrXBL"]
[HTMLConstructor, Func="IsChromeOrXBL",
Exposed=Window]
interface XULMenuElement : XULElement {
attribute Element? activeChild;

View File

@ -5,7 +5,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[HTMLConstructor, Func="IsChromeOrXBL"]
[HTMLConstructor, Func="IsChromeOrXBL",
Exposed=Window]
interface XULTextElement : XULElement {
attribute boolean disabled;
attribute DOMString value;

View File

@ -13,7 +13,8 @@ dictionary TreeCellInfo {
DOMString childElt = "";
};
[HTMLConstructor, Func="IsChromeOrXBL"]
[HTMLConstructor, Func="IsChromeOrXBL",
Exposed=Window]
interface XULTreeElement : XULElement
{
/**

View File

@ -30,7 +30,8 @@ dictionary APZBucket {
sequence<ScrollFrameData> scrollFrames;
};
[Pref="apz.test.logging_enabled"]
[Pref="apz.test.logging_enabled",
Exposed=Window]
namespace APZHitResultFlags {
// These constants should be kept in sync with mozilla::gfx::CompositorHitTestInfo
const unsigned short INVISIBLE = 0;

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface AbstractRange {
[BinaryName="GetStartContainer"]
readonly attribute Node startContainer;

View File

@ -4,7 +4,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Func="mozilla::dom::AccessibleNode::IsAOMEnabled"]
[Func="mozilla::dom::AccessibleNode::IsAOMEnabled",
Exposed=Window]
interface AccessibleNode {
readonly attribute DOMString computedRole;
[Frozen, Cached, Pure]

View File

@ -1,4 +1,5 @@
[Func="mozilla::AddonManagerWebAPI::IsAPIEnabled"]
[Func="mozilla::AddonManagerWebAPI::IsAPIEnabled",
Exposed=Window]
interface AddonEvent : Event {
constructor(DOMString type, AddonEventInit eventInitDict);

View File

@ -6,7 +6,8 @@
/* We need a JSImplementation but cannot get one without a contract ID.
Since Addon and AddonInstall are only ever created from JS they don't need
real contract IDs. */
[ChromeOnly, JSImplementation="dummy"]
[ChromeOnly, JSImplementation="dummy",
Exposed=Window]
interface Addon {
// The add-on's ID.
readonly attribute DOMString id;
@ -31,7 +32,8 @@ interface Addon {
Promise<void> setEnabled(boolean value);
};
[ChromeOnly, JSImplementation="dummy"]
[ChromeOnly, JSImplementation="dummy",
Exposed=Window]
interface AddonInstall : EventTarget {
// One of the STATE_* symbols from AddonManager.jsm
readonly attribute DOMString state;
@ -57,7 +59,8 @@ dictionary addonInstallOptions {
[HeaderFile="mozilla/AddonManagerWebAPI.h",
Func="mozilla::AddonManagerWebAPI::IsAPIEnabled",
JSImplementation="@mozilla.org/addon-web-api/manager;1",
WantsEventListenerHooks]
WantsEventListenerHooks,
Exposed=Window]
interface AddonManager : EventTarget {
/**
* Gets information about an add-on

View File

@ -17,7 +17,8 @@ dictionary AnalyserOptions : AudioNodeOptions {
double smoothingTimeConstant = 0.8;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AnalyserNode : AudioNode {
[Throws]
constructor(BaseAudioContext context,

View File

@ -14,6 +14,7 @@ enum AnimationPlayState { "idle", "running", "paused", "finished" };
enum AnimationReplaceState { "active", "removed", "persisted" };
[Exposed=Window]
interface Animation : EventTarget {
[Throws]
constructor(optional AnimationEffect? effect = null,

View File

@ -55,7 +55,8 @@ dictionary ComputedEffectTiming : EffectTiming {
unrestricted double? currentIteration = null;
};
[Func="Document::IsWebAnimationsEnabled"]
[Func="Document::IsWebAnimationsEnabled",
Exposed=Window]
interface AnimationEffect {
EffectTiming getTiming();
[BinaryName="getComputedTimingAsDict"]

View File

@ -11,6 +11,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface AnimationEvent : Event {
constructor(DOMString type, optional AnimationEventInit eventInitDict = {});

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Func="Document::IsWebAnimationsEnabled"]
[Func="Document::IsWebAnimationsEnabled",
Exposed=Window]
interface AnimationPlaybackEvent : Event {
constructor(DOMString type,
optional AnimationPlaybackEventInit eventInitDict = {});

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Func="Document::AreWebAnimationsTimelinesEnabled"]
[Func="Document::AreWebAnimationsTimelinesEnabled",
Exposed=Window]
interface AnimationTimeline {
[BinaryName="currentTimeAsDouble"]
readonly attribute double? currentTime;

View File

@ -16,7 +16,7 @@
* the inserted content.
*/
[ChromeOnly]
[ChromeOnly, Exposed=Window]
interface AnonymousContent {
/**
* Get the text content of an element inside this custom anonymous content.

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface Attr : Node {
readonly attribute DOMString localName;
[CEReactions, SetterNeedsSubjectPrincipal=NonSystem, SetterThrows]

View File

@ -16,7 +16,8 @@ dictionary AudioBufferOptions {
required float sampleRate;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioBuffer {
[Throws]
constructor(AudioBufferOptions options);

View File

@ -19,7 +19,8 @@ dictionary AudioBufferSourceOptions {
float playbackRate = 1;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioBufferSourceNode : AudioScheduledSourceNode {
constructor(BaseAudioContext context,
optional AudioBufferSourceOptions options = {});

View File

@ -19,7 +19,8 @@ dictionary AudioTimestamp {
DOMHighResTimeStamp performanceTime;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioContext : BaseAudioContext {
[Throws]
constructor(optional AudioContextOptions contextOptions = {});

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioDestinationNode : AudioNode {
readonly attribute unsigned long maxChannelCount;

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioListener {
// Uses a 3D cartesian coordinate system
void setPosition(double x, double y, double z);

View File

@ -27,7 +27,8 @@ dictionary AudioNodeOptions {
ChannelInterpretation channelInterpretation;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioNode : EventTarget {
[Throws]

View File

@ -15,7 +15,8 @@ enum AutomationRate {
"k-rate"
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioParam {
attribute float value;

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="dom.audioworklet.enabled"]
[Pref="dom.audioworklet.enabled",
Exposed=Window]
interface AudioParamMap {
readonly maplike<DOMString, AudioParam>;
};

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface AudioProcessingEvent : Event {
readonly attribute double playbackTime;

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface AudioScheduledSourceNode : AudioNode {
attribute EventHandler onended;
[Throws]

View File

@ -7,7 +7,8 @@
* http://www.whatwg.org/specs/web-apps/current-work/#audiotrack
*/
[Pref="media.track.enabled"]
[Pref="media.track.enabled",
Exposed=Window]
interface AudioTrack {
readonly attribute DOMString id;
readonly attribute DOMString kind;

View File

@ -7,7 +7,8 @@
* http://www.whatwg.org/specs/web-apps/current-work/#audiotracklist
*/
[Pref="media.track.enabled"]
[Pref="media.track.enabled",
Exposed=Window]
interface AudioTrackList : EventTarget {
readonly attribute unsigned long length;
getter AudioTrack (unsigned long index);

View File

@ -12,4 +12,4 @@
[Exposed=Window, SecureContext, Pref="dom.audioworklet.enabled"]
interface AudioWorklet : Worklet {
};
};

View File

@ -18,7 +18,8 @@ dictionary AudioWorkletNodeOptions : AudioNodeOptions {
object? processorOptions = null;
};
[SecureContext, Pref="dom.audioworklet.enabled"]
[SecureContext, Pref="dom.audioworklet.enabled",
Exposed=Window]
interface AudioWorkletNode : AudioNode {
[Throws]
constructor(BaseAudioContext context, DOMString name,

View File

@ -4,6 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Exposed=Window]
interface BarProp
{
[Throws, NeedsCallerType]

View File

@ -19,6 +19,7 @@ enum AudioContextState {
"closed"
};
[Exposed=Window]
interface BaseAudioContext : EventTarget {
readonly attribute AudioDestinationNode destination;
readonly attribute float sampleRate;

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface BatteryManager : EventTarget {
readonly attribute boolean charging;
readonly attribute unrestricted double chargingTime;

View File

@ -7,6 +7,7 @@
* http://www.whatwg.org/specs/web-apps/current-work/#beforeunloadevent
*/
[Exposed=Window]
interface BeforeUnloadEvent : Event {
attribute DOMString returnValue;
};

View File

@ -29,7 +29,8 @@ dictionary BiquadFilterOptions : AudioNodeOptions {
float gain = 0;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface BiquadFilterNode : AudioNode {
[Throws]
constructor(BaseAudioContext context,

View File

@ -7,6 +7,7 @@
* https://w3c.github.io/mediacapture-record/#blobevent-section
*/
[Exposed=Window]
interface BlobEvent : Event
{
constructor(DOMString type, optional BlobEventInit eventInitDict = {});

View File

@ -4,5 +4,6 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Exposed=Window]
interface CDATASection : Text {
};

View File

@ -11,6 +11,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
namespace CSS {
[Throws]
boolean supports(DOMString property, DOMString value);

View File

@ -1,3 +1,4 @@
[Exposed=Window]
interface CSS2Properties : CSSStyleDeclaration {
${props}
};

View File

@ -11,7 +11,8 @@
*/
[Func="Document::IsWebAnimationsGetAnimationsEnabled",
HeaderFile="nsAnimationManager.h"]
HeaderFile="nsAnimationManager.h",
Exposed=Window]
interface CSSAnimation : Animation {
[Constant] readonly attribute DOMString animationName;
};

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/css-conditional/#the-cssconditionrule-interface
[Exposed=Window]
interface CSSConditionRule : CSSGroupingRule {
[SetterThrows]
attribute DOMString conditionText;

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/css-counter-styles-3/#the-csscounterstylerule-interface
[Exposed=Window]
interface CSSCounterStyleRule : CSSRule {
attribute DOMString name;
attribute DOMString system;

View File

@ -10,6 +10,7 @@
// https://drafts.csswg.org/css-fonts/#om-fontface
// But we implement a very old draft, apparently....
// See bug 1058408 for implementing the current spec.
[Exposed=Window]
interface CSSFontFaceRule : CSSRule {
[SameObject] readonly attribute CSSStyleDeclaration style;
};

View File

@ -9,6 +9,7 @@
// https://drafts.csswg.org/css-fonts/#om-fontfeaturevalues
// but we don't implement anything remotely resembling the spec.
[Exposed=Window]
interface CSSFontFeatureValuesRule : CSSRule {
[SetterThrows]
attribute DOMString fontFamily;

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/cssom/#cssgroupingrule
[Exposed=Window]
interface CSSGroupingRule : CSSRule {
[SameObject] readonly attribute CSSRuleList cssRules;
[Throws]

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/cssom/#cssimportrule
[Exposed=Window]
interface CSSImportRule : CSSRule {
readonly attribute DOMString href;
// Per spec, the .media is never null, but in our implementation it can

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/css-animations/#interface-csskeyframerule
[Exposed=Window]
interface CSSKeyframeRule : CSSRule {
attribute DOMString keyText;
[SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/css-animations/#interface-csskeyframesrule
[Exposed=Window]
interface CSSKeyframesRule : CSSRule {
attribute DOMString name;
readonly attribute CSSRuleList cssRules;

View File

@ -12,6 +12,7 @@
// https://drafts.csswg.org/css-conditional/#the-cssmediarule-interface
// except they disagree with each other. We're taking the inheritance from
// css-conditional and the PutForwards behavior from cssom.
[Exposed=Window]
interface CSSMediaRule : CSSConditionRule {
[SameObject, PutForwards=mediaText] readonly attribute MediaList media;
};

View File

@ -5,6 +5,7 @@
*/
// This is a non-standard interface for @-moz-document rules
[Exposed=Window]
interface CSSMozDocumentRule : CSSConditionRule {
// XXX Add access to the URL list.
};

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/cssom/#cssnamespacerule
[Exposed=Window]
interface CSSNamespaceRule : CSSRule {
readonly attribute DOMString namespaceURI;
readonly attribute DOMString prefix;

View File

@ -10,6 +10,7 @@
// https://drafts.csswg.org/cssom/#the-csspagerule-interface
// Per spec, this should inherit from CSSGroupingRule, but we don't
// implement this yet.
[Exposed=Window]
interface CSSPageRule : CSSRule {
// selectorText not implemented yet
// attribute DOMString selectorText;

View File

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Func="Document::IsWebAnimationsGetAnimationsEnabled"]
[Func="Document::IsWebAnimationsGetAnimationsEnabled",
Exposed=Window]
interface CSSPseudoElement {
readonly attribute DOMString type;
readonly attribute Element element;

View File

@ -12,6 +12,7 @@
*/
// https://drafts.csswg.org/cssom/#the-cssrule-interface
[Exposed=Window]
interface CSSRule {
const unsigned short STYLE_RULE = 1;

View File

@ -4,6 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Exposed=Window]
interface CSSRuleList {
readonly attribute unsigned long length;
getter CSSRule? item(unsigned long index);

View File

@ -9,7 +9,8 @@
// Because of getComputedStyle, many CSSStyleDeclaration objects can be
// short-living.
[ProbablyShortLivingWrapper]
[ProbablyShortLivingWrapper,
Exposed=Window]
interface CSSStyleDeclaration {
[CEReactions, SetterNeedsSubjectPrincipal=NonSystem, SetterThrows]
attribute DOMString cssText;

View File

@ -8,6 +8,7 @@
*/
// https://drafts.csswg.org/cssom/#the-cssstylerule-interface
[Exposed=Window]
interface CSSStyleRule : CSSRule {
attribute DOMString selectorText;
[SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;

View File

@ -13,6 +13,7 @@ enum CSSStyleSheetParsingMode {
"agent"
};
[Exposed=Window]
interface CSSStyleSheet : StyleSheet {
[Pure, BinaryName="DOMOwnerRule"]
readonly attribute CSSRule? ownerRule;

View File

@ -8,5 +8,6 @@
*/
// https://drafts.csswg.org/css-conditional/#the-csssupportsrule-interface
[Exposed=Window]
interface CSSSupportsRule : CSSConditionRule {
};

View File

@ -11,7 +11,8 @@
*/
[Func="Document::IsWebAnimationsGetAnimationsEnabled",
HeaderFile="nsTransitionManager.h"]
HeaderFile="nsTransitionManager.h",
Exposed=Window]
interface CSSTransition : Animation {
[Constant] readonly attribute DOMString transitionProperty;
};

View File

@ -10,7 +10,8 @@
* W3C liability, trademark and document use rules apply.
*/
[Pref="canvas.capturestream.enabled"]
[Pref="canvas.capturestream.enabled",
Exposed=Window]
interface CanvasCaptureMediaStream : MediaStream {
readonly attribute HTMLCanvasElement canvas;
void requestFrame();

View File

@ -34,6 +34,7 @@ typedef (HTMLOrSVGImageElement or
HTMLVideoElement or
ImageBitmap) CanvasImageSource;
[Exposed=Window]
interface CanvasRenderingContext2D {
// back-reference to the canvas. Might be null if we're not
@ -332,6 +333,7 @@ interface mixin CanvasHitRegions {
[Pref="canvas.hitregions.enabled"] void clearHitRegions();
};
[Exposed=Window]
interface CanvasGradient {
// opaque object
[Throws]
@ -339,6 +341,7 @@ interface CanvasGradient {
void addColorStop(float offset, DOMString color);
};
[Exposed=Window]
interface CanvasPattern {
// opaque object
// [Throws, LenientFloat] - could not do this overload because of bug 1020975
@ -348,6 +351,7 @@ interface CanvasPattern {
void setTransform(SVGMatrix matrix);
};
[Exposed=Window]
interface TextMetrics {
// x-direction
@ -373,7 +377,8 @@ interface TextMetrics {
};
[Pref="canvas.path.enabled"]
[Pref="canvas.path.enabled",
Exposed=Window]
interface Path2D
{
constructor();

View File

@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
[Exposed=Window]
interface CaretPosition {
/**

View File

@ -25,7 +25,8 @@ dictionary CaretStateChangedEventInit : EventInit {
DOMString selectedTextContent = "";
};
[ChromeOnly]
[ChromeOnly,
Exposed=Window]
interface CaretStateChangedEvent : Event {
constructor(DOMString type,
optional CaretStateChangedEventInit eventInit = {});

View File

@ -14,7 +14,8 @@ dictionary ChannelMergerOptions : AudioNodeOptions {
unsigned long numberOfInputs = 6;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface ChannelMergerNode : AudioNode {
[Throws]
constructor(BaseAudioContext context,

View File

@ -14,7 +14,8 @@ dictionary ChannelSplitterOptions : AudioNodeOptions {
unsigned long numberOfOutputs = 6;
};
[Pref="dom.webaudio.enabled"]
[Pref="dom.webaudio.enabled",
Exposed=Window]
interface ChannelSplitterNode : AudioNode {
[Throws]
constructor(BaseAudioContext context,

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface CharacterData : Node {
[Pure, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString data;

View File

@ -28,7 +28,8 @@ dictionary CheckerboardReport {
// The guard function only allows creation of this interface on the
// about:checkerboard page, and only if it's in the parent process.
[Func="mozilla::dom::CheckerboardReportService::IsEnabled"]
[Func="mozilla::dom::CheckerboardReportService::IsEnabled",
Exposed=Window]
interface CheckerboardReportService {
constructor();

View File

@ -10,7 +10,8 @@ interface nsISHistory;
* The ChildSHistory interface represents the child side of a browsing
* context's session history.
*/
[ChromeOnly]
[ChromeOnly,
Exposed=Window]
interface ChildSHistory {
[Pure]
readonly attribute long count;

View File

@ -4,7 +4,8 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[Func="IsChromeOrXBL"]
[Func="IsChromeOrXBL",
Exposed=Window]
interface ChromeNodeList : NodeList {
constructor();

View File

@ -22,4 +22,4 @@ interface Clipboard : EventTarget {
Promise<void> write(DataTransfer data);
[Throws, NeedsSubjectPrincipal]
Promise<void> writeText(DOMString data);
};
};

View File

@ -10,6 +10,7 @@
* liability, trademark and document use rules apply.
*/
[Exposed=Window]
interface ClipboardEvent : Event
{
[Throws]

Some files were not shown because too many files have changed in this diff Show More