зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1333117. We should ensure, at build-time, that partial interfaces are defined in the same file as the interface they extend, since our build system doesn't really support correct dep builds if they're placed in a different file. r=qdot
This commit is contained in:
Родитель
6e1985e035
Коммит
b1b6ca681a
|
@ -45,7 +45,8 @@ class Configuration(DescriptorProvider):
|
||||||
# Our build system doesn't support dep build involving
|
# Our build system doesn't support dep build involving
|
||||||
# addition/removal of "implements" statements that appear in a
|
# addition/removal of "implements" statements that appear in a
|
||||||
# different .webidl file than their LHS interface. Make sure we
|
# different .webidl file than their LHS interface. Make sure we
|
||||||
# don't have any of those.
|
# don't have any of those. See similar block below for partial
|
||||||
|
# interfaces!
|
||||||
#
|
#
|
||||||
# But whitelist a RHS that is LegacyQueryInterface,
|
# But whitelist a RHS that is LegacyQueryInterface,
|
||||||
# since people shouldn't be adding any of those.
|
# since people shouldn't be adding any of those.
|
||||||
|
@ -66,6 +67,33 @@ class Configuration(DescriptorProvider):
|
||||||
if not thing.isInterface() and not thing.isNamespace():
|
if not thing.isInterface() and not thing.isNamespace():
|
||||||
continue
|
continue
|
||||||
iface = thing
|
iface = thing
|
||||||
|
# Our build system doesn't support dep builds involving
|
||||||
|
# addition/removal of partial interfaces that appear in a different
|
||||||
|
# .webidl file than the interface they are extending. Make sure we
|
||||||
|
# don't have any of those. See similar block above for "implements"
|
||||||
|
# statements!
|
||||||
|
if not iface.isExternal():
|
||||||
|
for partialIface in iface.getPartialInterfaces():
|
||||||
|
if (partialIface.filename() != iface.filename() and
|
||||||
|
# Unfortunately, NavigatorProperty does exactly the
|
||||||
|
# thing we're trying to prevent here. I'm not sure how
|
||||||
|
# to deal with that, short of effectively requiring a
|
||||||
|
# clobber when NavigatorProperty is added/removed and
|
||||||
|
# whitelisting the things it outputs here as
|
||||||
|
# restrictively as I can.
|
||||||
|
(partialIface.identifier.name != "Navigator" or
|
||||||
|
len(partialIface.members) != 1 or
|
||||||
|
partialIface.members[0].location != partialIface.location or
|
||||||
|
partialIface.members[0].identifier.location.filename() !=
|
||||||
|
"<builtin>")):
|
||||||
|
raise TypeError(
|
||||||
|
"The binding build system doesn't really support "
|
||||||
|
"partial interfaces which don't appear in the "
|
||||||
|
"file in which the interface they are extending is "
|
||||||
|
"defined. Don't do this.\n"
|
||||||
|
"%s\n"
|
||||||
|
"%s" %
|
||||||
|
(partialIface.location, iface.location))
|
||||||
self.interfaces[iface.identifier.name] = iface
|
self.interfaces[iface.identifier.name] = iface
|
||||||
if iface.identifier.name not in config:
|
if iface.identifier.name not in config:
|
||||||
# Completely skip consequential interfaces with no descriptor
|
# Completely skip consequential interfaces with no descriptor
|
||||||
|
|
|
@ -1480,6 +1480,10 @@ class IDLInterfaceOrNamespace(IDLObjectWithScope, IDLExposureMixins):
|
||||||
assert self.identifier.name == partial.identifier.name
|
assert self.identifier.name == partial.identifier.name
|
||||||
self._partialInterfaces.append(partial)
|
self._partialInterfaces.append(partial)
|
||||||
|
|
||||||
|
def getPartialInterfaces(self):
|
||||||
|
# Don't let people mutate our guts.
|
||||||
|
return list(self._partialInterfaces)
|
||||||
|
|
||||||
def getJSImplementation(self):
|
def getJSImplementation(self):
|
||||||
classId = self.getExtendedAttribute("JSImplementation")
|
classId = self.getExtendedAttribute("JSImplementation")
|
||||||
if not classId:
|
if not classId:
|
||||||
|
|
|
@ -171,3 +171,51 @@ interface BrowserElementPrivileged {
|
||||||
DOMRequest getWebManifest();
|
DOMRequest getWebManifest();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Bits needed for BrowserElementAudioChannel.
|
||||||
|
partial interface BrowserElementPrivileged {
|
||||||
|
[Pure, Cached, Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
readonly attribute sequence<BrowserElementAudioChannel> allowedAudioChannels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mutes all audio in this browser.
|
||||||
|
*/
|
||||||
|
[Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
void mute();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unmutes all audio in this browser.
|
||||||
|
*/
|
||||||
|
[Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
void unmute();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtains whether or not the browser is muted.
|
||||||
|
*/
|
||||||
|
[Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
DOMRequest getMuted();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the volume for the browser.
|
||||||
|
*/
|
||||||
|
[Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
void setVolume(float volume);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the volume for the browser.
|
||||||
|
*/
|
||||||
|
[Throws,
|
||||||
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
ChromeOnly]
|
||||||
|
DOMRequest getVolume();
|
||||||
|
};
|
||||||
|
|
|
@ -28,50 +28,3 @@ interface BrowserElementAudioChannel : EventTarget {
|
||||||
[Throws]
|
[Throws]
|
||||||
DOMRequest isActive();
|
DOMRequest isActive();
|
||||||
};
|
};
|
||||||
|
|
||||||
partial interface BrowserElementPrivileged {
|
|
||||||
[Pure, Cached, Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
readonly attribute sequence<BrowserElementAudioChannel> allowedAudioChannels;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mutes all audio in this browser.
|
|
||||||
*/
|
|
||||||
[Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
void mute();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unmutes all audio in this browser.
|
|
||||||
*/
|
|
||||||
[Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
void unmute();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Obtains whether or not the browser is muted.
|
|
||||||
*/
|
|
||||||
[Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
DOMRequest getMuted();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the volume for the browser.
|
|
||||||
*/
|
|
||||||
[Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
void setVolume(float volume);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the volume for the browser.
|
|
||||||
*/
|
|
||||||
[Throws,
|
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
|
||||||
ChromeOnly]
|
|
||||||
DOMRequest getVolume();
|
|
||||||
};
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*
|
*
|
||||||
* The origin of this IDL file is
|
* The origin of this IDL file is
|
||||||
* http://notifications.spec.whatwg.org/
|
* https://notifications.spec.whatwg.org/
|
||||||
*
|
*
|
||||||
* Copyright:
|
* Copyright:
|
||||||
* To the extent possible under law, the editors have waived all copyright and
|
* To the extent possible under law, the editors have waived all copyright and
|
||||||
|
@ -96,10 +96,3 @@ enum NotificationDirection {
|
||||||
"ltr",
|
"ltr",
|
||||||
"rtl"
|
"rtl"
|
||||||
};
|
};
|
||||||
|
|
||||||
partial interface ServiceWorkerRegistration {
|
|
||||||
[Throws, Func="mozilla::dom::ServiceWorkerRegistration::NotificationAPIVisible"]
|
|
||||||
Promise<void> showNotification(DOMString title, optional NotificationOptions options);
|
|
||||||
[Throws, Func="mozilla::dom::ServiceWorkerRegistration::NotificationAPIVisible"]
|
|
||||||
Promise<sequence<Notification>> getNotifications(optional GetNotificationOptions filter);
|
|
||||||
};
|
|
||||||
|
|
|
@ -20,8 +20,3 @@ interface NotificationEvent : ExtendableEvent {
|
||||||
dictionary NotificationEventInit : ExtendableEventInit {
|
dictionary NotificationEventInit : ExtendableEventInit {
|
||||||
required Notification notification;
|
required Notification notification;
|
||||||
};
|
};
|
||||||
|
|
||||||
partial interface ServiceWorkerGlobalScope {
|
|
||||||
attribute EventHandler onnotificationclick;
|
|
||||||
attribute EventHandler onnotificationclose;
|
|
||||||
};
|
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
*
|
*
|
||||||
* The origin of this IDL file is
|
* The origin of this IDL file is
|
||||||
* http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html
|
* http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html
|
||||||
|
* http://w3c.github.io/push-api/
|
||||||
|
* https://notifications.spec.whatwg.org/
|
||||||
*
|
*
|
||||||
* You are granted a license to use, reproduce and create derivative works of
|
* You are granted a license to use, reproduce and create derivative works of
|
||||||
* this document.
|
* this document.
|
||||||
|
@ -34,3 +36,8 @@ partial interface ServiceWorkerGlobalScope {
|
||||||
attribute EventHandler onpushsubscriptionchange;
|
attribute EventHandler onpushsubscriptionchange;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// https://notifications.spec.whatwg.org/
|
||||||
|
partial interface ServiceWorkerGlobalScope {
|
||||||
|
attribute EventHandler onnotificationclick;
|
||||||
|
attribute EventHandler onnotificationclose;
|
||||||
|
};
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
*
|
*
|
||||||
* The origin of this IDL file is
|
* The origin of this IDL file is
|
||||||
* http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html
|
* http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html
|
||||||
*
|
* https://w3c.github.io/push-api/
|
||||||
|
* https://notifications.spec.whatwg.org/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[Func="mozilla::dom::ServiceWorkerRegistration::Visible",
|
[Func="mozilla::dom::ServiceWorkerRegistration::Visible",
|
||||||
|
@ -27,7 +28,16 @@ interface ServiceWorkerRegistration : EventTarget {
|
||||||
attribute EventHandler onupdatefound;
|
attribute EventHandler onupdatefound;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// https://w3c.github.io/push-api/
|
||||||
partial interface ServiceWorkerRegistration {
|
partial interface ServiceWorkerRegistration {
|
||||||
[Throws, Exposed=(Window,Worker), Func="nsContentUtils::PushEnabled"]
|
[Throws, Exposed=(Window,Worker), Func="nsContentUtils::PushEnabled"]
|
||||||
readonly attribute PushManager pushManager;
|
readonly attribute PushManager pushManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// https://notifications.spec.whatwg.org/
|
||||||
|
partial interface ServiceWorkerRegistration {
|
||||||
|
[Throws, Func="mozilla::dom::ServiceWorkerRegistration::NotificationAPIVisible"]
|
||||||
|
Promise<void> showNotification(DOMString title, optional NotificationOptions options);
|
||||||
|
[Throws, Func="mozilla::dom::ServiceWorkerRegistration::NotificationAPIVisible"]
|
||||||
|
Promise<sequence<Notification>> getNotifications(optional GetNotificationOptions filter);
|
||||||
|
};
|
||||||
|
|
Загрузка…
Ссылка в новой задаче