ported from UXP:

- Issue #2548 - Part 1 - Implement MathML DOM and pre-requisites. https://bugzilla.mozilla.org/show_bug.cgi?id=1571487 Introduce interface mixins. https://bugzilla.mozilla.org/show_bug.cgi?id=1414372 Switch XPathEvaluator to using IDL mixins and remaining users of IDL "implements" over to mixin syntax. https://bugzilla.mozilla.org/show_bug.cgi?id=1574195 Introduce GlobalEventHandlers/DocumentAndElementEventHandlers/ElementCSSInlineStyle mixin. https://bugzilla.mozilla.org/show_bug.cgi?id=1579457 Introduce DocumentAndElementEventHandlers to more closely align with the HTML spec. https://bugzilla.mozilla.org/show_bug.cgi?id=1330457 Remove the use of IsCallerChrome in FetchRequest. https://bugzilla.mozilla.org/show_bug.cgi?id=1335368 (85600c73)
- Issue #2548 - Part 2 - Collection of WebIDL parsing updates in an attempt to fix partial interface mixin error. 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. https://bugzilla.mozilla.org/show_bug.cgi?id=1333117 WebIDL: Better error message for trying to inherit from a mixin. https://bugzilla.mozilla.org/show_bug.cgi?id=1575384 Fix webidl identifier conflicts involving typedefs to produce saner exceptions. https://bugzilla.mozilla.org/show_bug.cgi?id=1531623 Disallow nullable types for WebIDL constants. https://bugzilla.mozilla.org/show_bug.cgi?id=1535647 Add support for extended attributes on types in Web IDL https://bugzilla.mozilla.org/show_bug.cgi?id=1359269 Allow LenientFloat to be only in a specific overload https://bugzilla.mozilla.org/show_bug.cgi?id=1020975 (81b4f0c3)
- Issue #2548 - Part 3 - Fix some MathML issues encountered since WebIDL works. https://bugzilla.mozilla.org/show_bug.cgi?id=1316616 Also added a Fetch() change that was not in the Mozilla patch. (20354b67)
- Issue #2548 - Part 4 - Fix some missed changes for ElementCSSInlineStyle. Introduce GlobalEventHandlers/DocumentAndElementEventHandlers/ElementCSSInlineStyle mixin. https://bugzilla.mozilla.org/show_bug.cgi?id=157945 (502c7047)
- Issue #2548 - Part 5 - Implement the HTMLOrForeignElement mixin. https://bugzilla.mozilla.org/show_bug.cgi?id=1577660 Add 'preventScroll' option to HTMLElement's, SVGElement's and XULElement's 'focus' method. https://bugzilla.mozilla.org/show_bug.cgi?id=1374045 (3febe21f)
This commit is contained in:
2026-03-27 09:54:37 +08:00
parent c7997448b2
commit eb31645dcb
189 changed files with 1526 additions and 956 deletions
+8 -2
View File
@@ -311,12 +311,18 @@ Element::TabIndex()
}
void
Element::Focus(mozilla::ErrorResult& aError)
Element::Focus(const FocusOptions& aOptions, ErrorResult& aError)
{
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(this);
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
// Also other browsers seem to have the hack to not re-focus (and flush) when
// the element is already focused.
// Until https://github.com/whatwg/html/issues/4512 is clarified, we'll
// maintain interoperatibility by not re-focusing, independent of aOptions.
// I.e., `focus({ preventScroll: true})` followed by `focus( { preventScroll:
// false })` won't re-focus.
if (fm && domElement) {
aError = fm->SetFocus(domElement, 0);
aError = fm->SetFocus(domElement, nsFocusManager::FocusOptionsToFocusManagerFlags(aOptions));
}
}
+1 -1
View File
@@ -223,7 +223,7 @@ public:
/**
* Make focus on this element.
*/
virtual void Focus(mozilla::ErrorResult& aError);
virtual void Focus(const FocusOptions& aOptions, ErrorResult& aError);
/**
* Show blur and clear focus.
+11
View File
@@ -7378,6 +7378,17 @@ nsContentUtils::HasDistributedChildren(nsIContent* aContent)
return false;
}
// static
bool nsContentUtils::IsNodeInEditableRegion(nsINode* aNode) {
while (aNode) {
if (aNode->IsEditable()) {
return true;
}
aNode = aNode->GetParent();
}
return false;
}
// static
bool
nsContentUtils::IsForbiddenRequestHeader(const nsACString& aHeader,
+7
View File
@@ -2567,6 +2567,13 @@ public:
*/
static bool GPCEnabled();
/**
* Returns whether a node has an editable ancestor.
*
* @param aNode The node to test.
*/
static bool IsNodeInEditableRegion(nsINode* aNode);
/**
* Returns a LogModule that dump calls from content script are logged to.
* This can be enabled with the 'Dump' module, and is useful for synchronizing
+6
View File
@@ -49,6 +49,7 @@
#include "mozilla/ContentEvents.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/ElementBinding.h"
#include "mozilla/dom/ShadowRoot.h"
#include "mozilla/dom/HTMLInputElement.h"
#include "mozilla/dom/HTMLSlotElement.h"
@@ -2999,6 +3000,11 @@ nsFocusManager::DetermineElementToMoveFocus(nsPIDOMWindowOuter* aWindow,
return NS_OK;
}
uint32_t nsFocusManager::FocusOptionsToFocusManagerFlags(
const mozilla::dom::FocusOptions& aOptions) {
return aOptions.mPreventScroll ? nsIFocusManager::FLAG_NOSCROLL : 0;
}
static bool
IsHostOrSlot(nsIContent* aContent)
{
+4
View File
@@ -27,6 +27,7 @@ class nsIMessageBroadcaster;
namespace mozilla {
namespace dom {
struct FocusOptions;
class TabParent;
}
}
@@ -111,6 +112,9 @@ public:
static nsIContent* GetFocusedDescendant(nsPIDOMWindowOuter* aWindow, bool aDeep,
nsPIDOMWindowOuter** aFocusedWindow);
static uint32_t FocusOptionsToFocusManagerFlags(
const mozilla::dom::FocusOptions& aOptions);
/**
* Returns the content node that focus will be redirected to if aContent was
* focused. This is used for the special case of certain XUL elements such
+3 -2
View File
@@ -7388,9 +7388,10 @@ nsGlobalWindow::Confirm(const nsAString& aMessage,
already_AddRefed<Promise>
nsGlobalWindow::Fetch(const RequestOrUSVString& aInput,
const RequestInit& aInit, ErrorResult& aRv)
const RequestInit& aInit,
CallerType aCallerType, ErrorResult& aRv)
{
return FetchRequest(this, aInput, aInit, aRv);
return FetchRequest(this, aInput, aInit, aCallerType, aRv);
}
void
+1
View File
@@ -958,6 +958,7 @@ public:
already_AddRefed<mozilla::dom::cache::CacheStorage> GetCaches(mozilla::ErrorResult& aRv);
already_AddRefed<mozilla::dom::Promise> Fetch(const mozilla::dom::RequestOrUSVString& aInput,
const mozilla::dom::RequestInit& aInit,
mozilla::dom::CallerType aCallerType,
mozilla::ErrorResult& aRv);
void PrintOuter(mozilla::ErrorResult& aError);
void Print(mozilla::ErrorResult& aError);
+1 -1
View File
@@ -37,7 +37,7 @@ native Visibility(mozilla::Visibility);
* observers to check which request they are getting notifications for.
*
* Please make sure to update the MozImageLoadingContent WebIDL
* interface to mirror this interface when changing it.
* mixin to mirror this interface when changing it.
*/
[scriptable, builtinclass, uuid(0357123d-9224-4d12-a47e-868c32689777)]
+10 -22
View File
@@ -4475,9 +4475,6 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
isOptional=False,
invalidEnumValueFatal=True,
defaultValue=None,
treatNullAs="Default",
isEnforceRange=False,
isClamp=False,
isNullOrUndefined=False,
exceptionCode=None,
lenientFloatCode=None,
@@ -4555,6 +4552,12 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
# And we can't both be an object and be null or undefined
assert not isDefinitelyObject or not isNullOrUndefined
# Types can also have extended attributes, copy them over
isClamp = type.clamp
isEnforceRange = type.enforceRange
if type.treatNullAsEmpty:
treatNullAs = "EmptyString"
# If exceptionCode is not set, we'll just rethrow the exception we got.
# Note that we can't just set failureCode to exceptionCode, because setting
# failureCode will prevent pending exceptions from being set in cases when
@@ -5659,6 +5662,10 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
undefinedBehavior = "eNull"
else:
undefinedBehavior = "eStringify"
if type.treatNullAsEmpty:
treatNullAs = "EmptyString"
else:
treatNullAs = "Default"
nullBehavior = treatAs[treatNullAs]
def getConversionCode(varName):
@@ -6302,9 +6309,6 @@ class CGArgumentConverter(CGThing):
not self.argument.variadic),
invalidEnumValueFatal=self.invalidEnumValueFatal,
defaultValue=self.argument.defaultValue,
treatNullAs=self.argument.treatNullAs,
isEnforceRange=self.argument.enforceRange,
isClamp=self.argument.clamp,
lenientFloatCode=self.lenientFloatCode,
isMember="Variadic" if self.argument.variadic else False,
allowTreatNonCallableAsNull=self.argument.allowTreatNonCallableAsNull(),
@@ -8385,18 +8389,6 @@ class FakeArgument():
self.variadic = False
self.defaultValue = None
self._allowTreatNonCallableAsNull = allowTreatNonCallableAsNull
# For FakeArguments generated by maplike/setlike convenience functions,
# we won't have an interfaceMember to pass in.
if interfaceMember:
self.treatNullAs = interfaceMember.treatNullAs
else:
self.treatNullAs = "Default"
if isinstance(interfaceMember, IDLAttribute):
self.enforceRange = interfaceMember.enforceRange
self.clamp = interfaceMember.clamp
else:
self.enforceRange = False
self.clamp = False
self.identifier = FakeIdentifier(name)
@@ -11117,7 +11109,6 @@ class CGProxySpecialOperation(CGPerSignatureCall):
argument = arguments[1]
info = getJSToNativeConversionInfo(
argument.type, descriptor,
treatNullAs=argument.treatNullAs,
sourceDescription=("value being assigned to %s setter" %
descriptor.interface.identifier.name))
if argumentHandleValue is None:
@@ -12767,8 +12758,6 @@ class CGDictionary(CGThing):
getJSToNativeConversionInfo(
member.type,
descriptorProvider,
isEnforceRange=member.enforceRange,
isClamp=member.clamp,
isMember="Dictionary",
isOptional=member.canHaveMissingValue(),
defaultValue=member.defaultValue,
@@ -15649,7 +15638,6 @@ class CGCallbackInterface(CGCallback):
class FakeMember():
def __init__(self, name=None):
self.treatNullAs = "Default"
if name is not None:
self.identifier = FakeIdentifier(name)
+29 -1
View File
@@ -45,7 +45,8 @@ class Configuration(DescriptorProvider):
# Our build system doesn't support dep build involving
# addition/removal of "implements" statements that appear in a
# 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,
# since people shouldn't be adding any of those.
@@ -66,6 +67,33 @@ class Configuration(DescriptorProvider):
if not thing.isInterface() and not thing.isNamespace():
continue
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.getPartials():
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
if iface.identifier.name not in config:
# Completely skip consequential interfaces with no descriptor
+2 -2
View File
@@ -13,7 +13,7 @@ from mozbuild import shellutil
# (whether camelCase, _underscorePrefixed, etc.) and the given array of
# extended attributes.
def generateLine(propName, extendedAttrs):
return " [%s] attribute DOMString %s;\n" % (", ".join(extendedAttrs),
return " [%s] attribute [TreatNullAs=EmptyString] DOMString %s;\n" % (", ".join(extendedAttrs),
propName)
def generate(output, idlFilename, preprocessorHeader):
cpp = list(buildconfig.substs['CPP'])
@@ -28,7 +28,7 @@ def generate(output, idlFilename, preprocessorHeader):
continue
# Unfortunately, even some of the getters here are fallible
# (e.g. on nsComputedDOMStyle).
extendedAttrs = ["Throws", "TreatNullAs=EmptyString"]
extendedAttrs = ["Throws"]
if pref is not "":
extendedAttrs.append('Pref="%s"' % pref)
File diff suppressed because it is too large Load Diff
+7 -5
View File
@@ -329,7 +329,7 @@ Cache::MatchAll(JSContext* aCx, const Optional<RequestOrUSVString>& aRequest,
already_AddRefed<Promise>
Cache::Add(JSContext* aContext, const RequestOrUSVString& aRequest,
ErrorResult& aRv)
CallerType aCallerType, ErrorResult& aRv)
{
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
@@ -359,12 +359,13 @@ Cache::Add(JSContext* aContext, const RequestOrUSVString& aRequest,
}
requestList.AppendElement(Move(request));
return AddAll(global, Move(requestList), aRv);
return AddAll(global, Move(requestList), aCallerType, aRv);
}
already_AddRefed<Promise>
Cache::AddAll(JSContext* aContext,
const Sequence<OwningRequestOrUSVString>& aRequestList,
CallerType aCallerType,
ErrorResult& aRv)
{
if (NS_WARN_IF(!mActor)) {
@@ -408,7 +409,7 @@ Cache::AddAll(JSContext* aContext,
requestList.AppendElement(Move(request));
}
return AddAll(global, Move(requestList), aRv);
return AddAll(global, Move(requestList), aCallerType, aRv);
}
already_AddRefed<Promise>
@@ -601,7 +602,8 @@ Cache::ExecuteOp(AutoChildOpArgs& aOpArgs, ErrorResult& aRv)
already_AddRefed<Promise>
Cache::AddAll(const GlobalObject& aGlobal,
nsTArray<RefPtr<Request>>&& aRequestList, ErrorResult& aRv)
nsTArray<RefPtr<Request>>&& aRequestList,
CallerType aCallerType, ErrorResult& aRv)
{
MOZ_DIAGNOSTIC_ASSERT(mActor);
@@ -627,7 +629,7 @@ Cache::AddAll(const GlobalObject& aGlobal,
RequestOrUSVString requestOrString;
requestOrString.SetAsRequest() = aRequestList[i];
RefPtr<Promise> fetch = FetchRequest(mGlobal, requestOrString,
RequestInit(), aRv);
RequestInit(), aCallerType, aRv);
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
+5 -3
View File
@@ -29,6 +29,7 @@ class RequestOrUSVString;
class Response;
template<typename T> class Optional;
template<typename T> class Sequence;
enum class CallerType : uint32_t;
namespace cache {
@@ -51,10 +52,11 @@ public:
const CacheQueryOptions& aOptions, ErrorResult& aRv);
already_AddRefed<Promise>
Add(JSContext* aContext, const RequestOrUSVString& aRequest,
ErrorResult& aRv);
CallerType aCallerType, ErrorResult& aRv);
already_AddRefed<Promise>
AddAll(JSContext* aContext,
const Sequence<OwningRequestOrUSVString>& aRequests, ErrorResult& aRv);
const Sequence<OwningRequestOrUSVString>& aRequests,
CallerType aCallerType, ErrorResult& aRv);
already_AddRefed<Promise>
Put(JSContext* aCx, const RequestOrUSVString& aRequest, Response& aResponse,
ErrorResult& aRv);
@@ -98,7 +100,7 @@ private:
already_AddRefed<Promise>
AddAll(const GlobalObject& aGlobal, nsTArray<RefPtr<Request>>&& aRequestList,
ErrorResult& aRv);
CallerType aCallerType, ErrorResult& aRv);
already_AddRefed<Promise>
PutAll(JSContext* aCx, const nsTArray<RefPtr<Request>>& aRequestList,
+4 -5
View File
@@ -21,6 +21,7 @@
#include "nsStringStream.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/BodyUtil.h"
#include "mozilla/dom/DOMError.h"
#include "mozilla/dom/Exceptions.h"
@@ -317,7 +318,7 @@ public:
already_AddRefed<Promise>
FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
const RequestInit& aInit, ErrorResult& aRv)
const RequestInit& aInit, CallerType aCallerType, ErrorResult& aRv)
{
RefPtr<Promise> p = Promise::Create(aGlobal, aRv);
if (NS_WARN_IF(aRv.Failed())) {
@@ -325,12 +326,10 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
}
// Double check that we have chrome privileges if the Request's content
// policy type has been overridden. Note, we must do this before
// entering the global below. Otherwise the IsCallerChrome() will
// always fail.
// policy type has been overridden.
MOZ_ASSERT_IF(aInput.IsRequest() &&
aInput.GetAsRequest().IsContentPolicyTypeOverridden(),
nsContentUtils::IsCallerChrome());
aCallerType == CallerType::System);
AutoJSAPI jsapi;
if (!jsapi.Init(aGlobal)) {
+3 -1
View File
@@ -36,6 +36,7 @@ class InternalRequest;
class OwningBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString;
struct ReadableStream;
class RequestOrUSVString;
enum class CallerType : uint32_t;
namespace workers {
class WorkerPrivate;
@@ -43,7 +44,8 @@ class WorkerPrivate;
already_AddRefed<Promise>
FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
const RequestInit& aInit, ErrorResult& aRv);
const RequestInit& aInit, CallerType aCallerType,
ErrorResult& aRv);
nsresult
UpdateRequestReferrer(nsIGlobalObject* aGlobal, InternalRequest* aRequest);
+3 -3
View File
@@ -3537,7 +3537,7 @@ HTMLInputElement::Blur(ErrorResult& aError)
}
void
HTMLInputElement::Focus(ErrorResult& aError)
HTMLInputElement::Focus(const FocusOptions& aOptions, ErrorResult& aError)
{
if (mType == NS_FORM_INPUT_NUMBER) {
// Focus our anonymous text control, if we have one.
@@ -3547,7 +3547,7 @@ HTMLInputElement::Focus(ErrorResult& aError)
RefPtr<HTMLInputElement> textControl =
numberControlFrame->GetAnonTextControl();
if (textControl) {
textControl->Focus(aError);
textControl->Focus(aOptions, aError);
return;
}
}
@@ -3563,7 +3563,7 @@ HTMLInputElement::Focus(ErrorResult& aError)
}
if (mType != NS_FORM_INPUT_FILE) {
nsGenericHTMLElement::Focus(aError);
nsGenericHTMLElement::Focus(aOptions, aError);
return;
}
+2 -1
View File
@@ -136,7 +136,8 @@ public:
virtual int32_t TabIndexDefault() override;
using nsGenericHTMLElement::Focus;
virtual void Blur(ErrorResult& aError) override;
virtual void Focus(ErrorResult& aError) override;
virtual void Focus(const FocusOptions& aOptions,
ErrorResult& aError) override;
// nsINode
#if !defined(ANDROID) && !defined(XP_MACOSX)
+3 -2
View File
@@ -94,14 +94,15 @@ HTMLLabelElement::GetForm() const
}
void
HTMLLabelElement::Focus(ErrorResult& aError)
HTMLLabelElement::Focus(const FocusOptions& aOptions,
ErrorResult& aError)
{
// retarget the focus method at the for content
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
if (fm) {
nsCOMPtr<nsIDOMElement> elem = do_QueryObject(GetLabeledElement());
if (elem)
fm->SetFocus(elem, 0);
fm->SetFocus(elem, nsFocusManager::FocusOptionsToFocusManagerFlags(aOptions));
}
}
+2 -1
View File
@@ -57,7 +57,8 @@ public:
}
using nsGenericHTMLElement::Focus;
virtual void Focus(mozilla::ErrorResult& aError) override;
virtual void Focus(const FocusOptions& aOptions,
ErrorResult& aError) override;
virtual bool IsDisabled() const override { return false; }
+8 -5
View File
@@ -87,7 +87,8 @@ HTMLLegendElement::UnbindFromTree(bool aDeep, bool aNullParent)
}
void
HTMLLegendElement::Focus(ErrorResult& aError)
HTMLLegendElement::Focus(const FocusOptions& aOptions,
ErrorResult& aError)
{
nsIFrame* frame = GetPrimaryFrame();
if (!frame) {
@@ -96,7 +97,7 @@ HTMLLegendElement::Focus(ErrorResult& aError)
int32_t tabIndex;
if (frame->IsFocusable(&tabIndex, false)) {
nsGenericHTMLElement::Focus(aError);
nsGenericHTMLElement::Focus(aOptions, aError);
return;
}
@@ -109,7 +110,8 @@ HTMLLegendElement::Focus(ErrorResult& aError)
nsCOMPtr<nsIDOMElement> result;
aError = fm->MoveFocus(nullptr, this, nsIFocusManager::MOVEFOCUS_FORWARD,
nsIFocusManager::FLAG_NOPARENTFRAME,
nsIFocusManager::FLAG_NOPARENTFRAME |
nsFocusManager::FocusOptionsToFocusManagerFlags(aOptions),
getter_AddRefs(result));
}
@@ -117,9 +119,10 @@ bool
HTMLLegendElement::PerformAccesskey(bool aKeyCausesActivation,
bool aIsTrustedEvent)
{
// just use the same behaviour as the focus method
FocusOptions options;
ErrorResult rv;
Focus(rv);
Focus(options, rv);
return NS_SUCCEEDED(rv.StealNSResult());
}
+2 -1
View File
@@ -25,7 +25,8 @@ public:
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLLegendElement, legend)
using nsGenericHTMLElement::Focus;
virtual void Focus(ErrorResult& aError) override;
virtual void Focus(const FocusOptions& aOptions,
ErrorResult& aError) override;
virtual bool PerformAccesskey(bool aKeyCausesActivation,
bool aIsTrustedEvent) override;
+3 -2
View File
@@ -150,8 +150,9 @@ public:
// If something is focused in the same document, ignore autofocus.
if (!fm->GetFocusedContent() ||
fm->GetFocusedContent()->OwnerDoc() != document) {
mozilla::ErrorResult rv;
mElement->Focus(rv);
FocusOptions options;
ErrorResult rv;
mElement->Focus(options, rv);
return rv.StealNSResult();
}
+2 -1
View File
@@ -432,8 +432,9 @@ public:
return rv.StealNSResult();
}
NS_IMETHOD Focus() final override {
mozilla::dom::FocusOptions options;
mozilla::ErrorResult rv;
Focus(rv);
Focus(options, rv);
return rv.StealNSResult();
}
NS_IMETHOD GetDraggable(bool* aDraggable) final override {
@@ -5,10 +5,12 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsMathMLElement.h"
#include "mozilla/dom/MathMLElement.h"
#include "base/compiler_specific.h"
#include "mozilla/ArrayUtils.h"
#include "nsGkAtoms.h"
#include "nsIContentInlines.h"
#include "nsITableCellLayout.h" // for MAX_COLSPAN / MAX_ROWSPAN
#include "nsCRT.h"
#include "nsLayoutStylesheetCache.h"
@@ -27,7 +29,8 @@
#include "mozilla/EventDispatcher.h"
#include "mozilla/EventStates.h"
#include "mozilla/dom/ElementBinding.h"
#include "mozilla/EventListenerManager.h" // for EventListenerManager
#include "mozilla/dom/MathMLElementBinding.h"
using namespace mozilla;
using namespace mozilla::dom;
@@ -35,7 +38,7 @@ using namespace mozilla::dom;
//----------------------------------------------------------------------
// nsISupports methods:
NS_IMPL_ISUPPORTS_INHERITED(nsMathMLElement, nsMathMLElementBase,
NS_IMPL_ISUPPORTS_INHERITED(MathMLElement, MathMLElementBase,
nsIDOMElement, nsIDOMNode, Link)
static nsresult
@@ -76,28 +79,28 @@ ReportParseErrorNoTag(const nsString& aValue,
"AttributeParsingErrorNoTag", argv, 2);
}
nsMathMLElement::nsMathMLElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
: nsMathMLElementBase(aNodeInfo),
MathMLElement::MathMLElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
: MathMLElementBase(aNodeInfo),
ALLOW_THIS_IN_INITIALIZER_LIST(Link(this)),
mIncrementScriptLevel(false)
{
}
nsMathMLElement::nsMathMLElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
: nsMathMLElementBase(aNodeInfo),
MathMLElement::MathMLElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
: MathMLElementBase(aNodeInfo),
ALLOW_THIS_IN_INITIALIZER_LIST(Link(this)),
mIncrementScriptLevel(false)
{
}
nsresult
nsMathMLElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers)
MathMLElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers)
{
Link::ResetLinkState(false, Link::ElementHasHref());
nsresult rv = nsMathMLElementBase::BindToTree(aDocument, aParent,
nsresult rv = MathMLElementBase::BindToTree(aDocument, aParent,
aBindingParent,
aCompileEventHandlers);
NS_ENSURE_SUCCESS(rv, rv);
@@ -131,7 +134,7 @@ nsMathMLElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
}
void
nsMathMLElement::UnbindFromTree(bool aDeep, bool aNullParent)
MathMLElement::UnbindFromTree(bool aDeep, bool aNullParent)
{
// If this link is ever reinserted into a document, it might
// be under a different xml:base, so forget the cached state now.
@@ -142,14 +145,14 @@ nsMathMLElement::UnbindFromTree(bool aDeep, bool aNullParent)
doc->UnregisterPendingLinkUpdate(this);
}
nsMathMLElementBase::UnbindFromTree(aDeep, aNullParent);
MathMLElementBase::UnbindFromTree(aDeep, aNullParent);
}
bool
nsMathMLElement::ParseAttribute(int32_t aNamespaceID,
nsIAtom* aAttribute,
const nsAString& aValue,
nsAttrValue& aResult)
MathMLElement::ParseAttribute(int32_t aNamespaceID,
nsIAtom* aAttribute,
const nsAString& aValue,
nsAttrValue& aResult)
{
MOZ_ASSERT(IsMathMLElement());
if (aNamespaceID == kNameSpaceID_None) {
@@ -167,6 +170,9 @@ nsMathMLElement::ParseAttribute(int32_t aNamespaceID,
aAttribute == nsGkAtoms::mathbackground_) {
return aResult.ParseColor(aValue);
}
if (aAttribute == nsGkAtoms::tabindex) {
return aResult.ParseIntValue(aValue);
}
if (mNodeInfo->Equals(nsGkAtoms::mtd_)) {
if (aAttribute == nsGkAtoms::columnspan_) {
aResult.ParseClampedNonNegativeInt(aValue, 1, 1, MAX_COLSPAN);
@@ -179,8 +185,8 @@ nsMathMLElement::ParseAttribute(int32_t aNamespaceID,
}
}
return nsMathMLElementBase::ParseAttribute(aNamespaceID, aAttribute,
aValue, aResult);
return MathMLElementBase::ParseAttribute(aNamespaceID, aAttribute,
aValue, aResult);
}
static Element::MappedAttributeEntry sMtableStyles[] = {
@@ -219,7 +225,7 @@ static Element::MappedAttributeEntry sDirStyles[] = {
};
bool
nsMathMLElement::IsAttributeMapped(const nsIAtom* aAttribute) const
MathMLElement::IsAttributeMapped(const nsIAtom* aAttribute) const
{
MOZ_ASSERT(IsMathMLElement());
@@ -288,7 +294,7 @@ nsMathMLElement::IsAttributeMapped(const nsIAtom* aAttribute) const
}
nsMapRuleToAttributesFunc
nsMathMLElement::GetAttributeMappingFunction() const
MathMLElement::GetAttributeMappingFunction() const
{
// It doesn't really matter what our tag is here, because only attributes
// that satisfy IsAttributeMapped will be stored in the mapped attributes
@@ -297,9 +303,9 @@ nsMathMLElement::GetAttributeMappingFunction() const
}
/* static */ bool
nsMathMLElement::ParseNamedSpaceValue(const nsString& aString,
nsCSSValue& aCSSValue,
uint32_t aFlags)
MathMLElement::ParseNamedSpaceValue(const nsString& aString,
nsCSSValue& aCSSValue,
uint32_t aFlags)
{
int32_t i = 0;
// See if it is one of the 'namedspace' (ranging -7/18em, -6/18, ... 7/18em)
@@ -379,10 +385,10 @@ nsMathMLElement::ParseNamedSpaceValue(const nsString& aString,
// number)"
//
/* static */ bool
nsMathMLElement::ParseNumericValue(const nsString& aString,
nsCSSValue& aCSSValue,
uint32_t aFlags,
nsIDocument* aDocument)
MathMLElement::ParseNumericValue(const nsString& aString,
nsCSSValue& aCSSValue,
uint32_t aFlags,
nsIDocument* aDocument)
{
nsAutoString str(aString);
str.CompressWhitespace(); // aString is const in this code...
@@ -430,6 +436,13 @@ nsMathMLElement::ParseNumericValue(const nsString& aString,
number.Append(c);
}
if (gotDot && str[i - 1] == '.') {
if (!(aFlags & PARSE_SUPPRESS_WARNINGS)) {
ReportLengthParseError(aString, aDocument);
}
return false; // Number ending with a dot.
}
// Convert number to floating point
nsresult errorCode;
float floatValue = number.ToFloat(&errorCode);
@@ -500,8 +513,8 @@ nsMathMLElement::ParseNumericValue(const nsString& aString,
}
void
nsMathMLElement::MapMathMLAttributesInto(const nsMappedAttributes* aAttributes,
nsRuleData* aData)
MathMLElement::MapMathMLAttributesInto(const nsMappedAttributes* aAttributes,
nsRuleData* aData)
{
if (aData->mSIDs & NS_STYLE_INHERIT_BIT(Font)) {
// scriptsizemultiplier
@@ -919,7 +932,7 @@ nsMathMLElement::MapMathMLAttributesInto(const nsMappedAttributes* aAttributes,
}
nsresult
nsMathMLElement::GetEventTargetParent(EventChainPreVisitor& aVisitor)
MathMLElement::GetEventTargetParent(EventChainPreVisitor& aVisitor)
{
nsresult rv = Element::GetEventTargetParent(aVisitor);
NS_ENSURE_SUCCESS(rv, rv);
@@ -928,30 +941,30 @@ nsMathMLElement::GetEventTargetParent(EventChainPreVisitor& aVisitor)
}
nsresult
nsMathMLElement::PostHandleEvent(EventChainPostVisitor& aVisitor)
MathMLElement::PostHandleEvent(EventChainPostVisitor& aVisitor)
{
return PostHandleEventForLinks(aVisitor);
}
NS_IMPL_ELEMENT_CLONE(nsMathMLElement)
NS_IMPL_ELEMENT_CLONE(MathMLElement)
EventStates
nsMathMLElement::IntrinsicState() const
MathMLElement::IntrinsicState() const
{
return Link::LinkState() | nsMathMLElementBase::IntrinsicState() |
return Link::LinkState() | MathMLElementBase::IntrinsicState() |
(mIncrementScriptLevel ?
NS_EVENT_STATE_INCREMENT_SCRIPT_LEVEL : EventStates());
}
bool
nsMathMLElement::IsNodeOfType(uint32_t aFlags) const
MathMLElement::IsNodeOfType(uint32_t aFlags) const
{
return !(aFlags & ~eCONTENT);
}
void
nsMathMLElement::SetIncrementScriptLevel(bool aIncrementScriptLevel,
bool aNotify)
MathMLElement::SetIncrementScriptLevel(bool aIncrementScriptLevel,
bool aNotify)
{
if (aIncrementScriptLevel == mIncrementScriptLevel)
return;
@@ -962,26 +975,55 @@ nsMathMLElement::SetIncrementScriptLevel(bool aIncrementScriptLevel,
UpdateState(true);
}
bool
nsMathMLElement::IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse)
int32_t
MathMLElement::TabIndexDefault()
{
nsCOMPtr<nsIURI> uri;
if (IsLink(getter_AddRefs(uri))) {
return IsLink(getter_AddRefs(uri)) ? 0 : -1;
}
// XXX Bug 1586011: Share logic with other element classes.
bool
MathMLElement::IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse)
{
nsIDocument* doc = GetComposedDoc();
if (!doc || doc->HasFlag(NODE_IS_EDITABLE)) {
// In designMode documents we only allow focusing the document.
if (aTabIndex) {
*aTabIndex = ((sTabFocusModel & eTabFocus_linksMask) == 0 ? -1 : 0);
*aTabIndex = -1;
}
return true;
return false;
}
int32_t tabIndex = TabIndex();
if (aTabIndex) {
*aTabIndex = tabIndex;
}
nsCOMPtr<nsIURI> uri;
if (!IsLink(getter_AddRefs(uri))) {
// If a tabindex is specified at all we're focusable
return HasAttr(kNameSpaceID_None, nsGkAtoms::tabindex);
}
// Links that are in an editable region should never be focusable, even if
// they are in a contenteditable="false" region.
if (nsContentUtils::IsNodeInEditableRegion(this)) {
if (aTabIndex) {
*aTabIndex = -1;
}
return false;
}
if (aTabIndex && (sTabFocusModel & eTabFocus_linksMask) == 0) {
*aTabIndex = -1;
}
return false;
return true;
}
bool
nsMathMLElement::IsLink(nsIURI** aURI) const
MathMLElement::IsLink(nsIURI** aURI) const
{
// http://www.w3.org/TR/2010/REC-MathML3-20101021/chapter6.html#interf.link
// The REC says that the following elements should not be linking elements:
@@ -1052,7 +1094,7 @@ nsMathMLElement::IsLink(nsIURI** aURI) const
}
void
nsMathMLElement::GetLinkTarget(nsAString& aTarget)
MathMLElement::GetLinkTarget(nsAString& aTarget)
{
const nsAttrValue* target = mAttrsAndChildren.GetAttr(nsGkAtoms::target,
kNameSpaceID_XLink);
@@ -1078,14 +1120,59 @@ nsMathMLElement::GetLinkTarget(nsAString& aTarget)
}
already_AddRefed<nsIURI>
nsMathMLElement::GetHrefURI() const
MathMLElement::GetHrefURI() const
{
nsCOMPtr<nsIURI> hrefURI;
return IsLink(getter_AddRefs(hrefURI)) ? hrefURI.forget() : nullptr;
}
// XXX Bug 1586014: Share logic with other element classes.
void
MathMLElement::RecompileScriptEventListeners() {
int32_t i, count = mAttrsAndChildren.AttrCount();
for (i = 0; i < count; ++i) {
const nsAttrName* name = mAttrsAndChildren.AttrNameAt(i);
// Eventlistenener-attributes are always in the null namespace
if (!name->IsAtom()) {
continue;
}
nsIAtom* attr = name->Atom();
if (!IsEventAttributeName(attr)) {
continue;
}
nsAutoString value;
GetAttr(kNameSpaceID_None, attr, value);
SetEventHandler(attr, value, true);
}
}
bool
MathMLElement::IsEventAttributeNameInternal(nsIAtom* aName) {
// The intent is to align MathML event attributes on HTML5, so the flag
// EventNameType_HTML is used here.
return nsContentUtils::IsEventAttributeName(aName, EventNameType_HTML);
}
nsresult
nsMathMLElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
MathMLElement::BeforeSetAttr(int32_t aNamespaceID, nsIAtom* aName,
const nsAttrValueOrString* aValue,
bool aNotify) {
if (aNamespaceID == kNameSpaceID_None) {
if (!aValue && IsEventAttributeName(aName)) {
if (EventListenerManager* manager = GetExistingListenerManager()) {
manager->RemoveEventHandler(aName, EmptyString());
}
}
}
return MathMLElementBase::BeforeSetAttr(aNamespaceID, aName, aValue, aNotify);
}
nsresult
MathMLElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
const nsAttrValue* aValue,
const nsAttrValue* aOldValue,
nsIPrincipal* aSubjectPrincipal,
@@ -1106,13 +1193,22 @@ nsMathMLElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
Link::ResetLinkState(aNotify, aValue || Link::ElementHasHref());
}
return nsMathMLElementBase::AfterSetAttr(aNameSpaceID, aName, aValue,
aOldValue, aSubjectPrincipal,
aNotify);
if (aNameSpaceID == kNameSpaceID_None) {
if (IsEventAttributeName(aName) && aValue) {
MOZ_ASSERT(aValue->Type() == nsAttrValue::eString,
"Expected string value for script body");
nsresult rv = SetEventHandler(aName, aValue->GetStringValue());
NS_ENSURE_SUCCESS(rv, rv);
}
}
return MathMLElementBase::AfterSetAttr(aNameSpaceID, aName, aValue,
aOldValue, aSubjectPrincipal,
aNotify);
}
JSObject*
nsMathMLElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
MathMLElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto)
{
return ElementBinding::Wrap(aCx, this, aGivenProto);
return MathMLElementBinding::Wrap(aCx, this, aGivenProto);
}
@@ -4,8 +4,8 @@
* 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/. */
#ifndef nsMathMLElement_h
#define nsMathMLElement_h
#ifndef mozilla_dom_MathMLElement_h_
#define mozilla_dom_MathMLElement_h_
#include "mozilla/Attributes.h"
#include "mozilla/dom/Element.h"
@@ -16,28 +16,30 @@
class nsCSSValue;
typedef nsMappedAttributeElement nsMathMLElementBase;
namespace mozilla {
class EventChainPostVisitor;
class EventChainPreVisitor;
} // namespace mozilla
namespace dom {
typedef nsMappedAttributeElement MathMLElementBase;
/*
* The base class for MathML elements.
*/
class nsMathMLElement final : public nsMathMLElementBase,
public nsIDOMElement,
public mozilla::dom::Link
class MathMLElement final : public MathMLElementBase,
public nsIDOMElement,
public mozilla::dom::Link
{
public:
explicit nsMathMLElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
explicit nsMathMLElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
explicit MathMLElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
explicit MathMLElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
// Implementation of nsISupports is inherited from nsMathMLElementBase
// Implementation of nsISupports is inherited from MathMLElementBase
NS_DECL_ISUPPORTS_INHERITED
// Forward implementations of parent interfaces of nsMathMLElement to
NS_IMPL_FROMCONTENT(MathMLElement, kNameSpaceID_MathML)
// Forward implementations of parent interfaces of MathMLElement to
// our base class
NS_FORWARD_NSIDOMNODE_TO_NSINODE
NS_FORWARD_NSIDOMELEMENT_TO_GENERIC
@@ -89,6 +91,7 @@ public:
return mIncrementScriptLevel;
}
int32_t TabIndexDefault() final;
virtual bool IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse) override;
virtual bool IsLink(nsIURI** aURI) const override;
virtual void GetLinkTarget(nsAString& aTarget) override;
@@ -96,11 +99,16 @@ public:
virtual nsIDOMNode* AsDOMNode() override { return this; }
void RecompileScriptEventListeners() override;
bool IsEventAttributeNameInternal(nsIAtom* aName);
protected:
virtual ~nsMathMLElement() {}
virtual ~MathMLElement() {}
virtual JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
nsresult BeforeSetAttr(int32_t aNamespaceID, nsIAtom* aName,
const nsAttrValueOrString* aValue, bool aNotify) override;
virtual nsresult AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
const nsAttrValue* aValue,
const nsAttrValue* aOldValue,
@@ -111,4 +119,7 @@ private:
bool mIncrementScriptLevel;
};
#endif // nsMathMLElement_h
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_MathMLElement_h_
@@ -6,7 +6,7 @@
#include "nsContentCreatorFunctions.h"
#include "nsGkAtoms.h"
#include "nsMathMLElement.h"
#include "mozilla/dom/MathMLElement.h"
using namespace mozilla::dom;
@@ -14,6 +14,6 @@ using namespace mozilla::dom;
nsresult
NS_NewMathMLElement(Element** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
{
NS_ADDREF(*aResult = new nsMathMLElement(aNodeInfo));
NS_ADDREF(*aResult = new MathMLElement(aNodeInfo));
return NS_OK;
}
+6 -2
View File
@@ -4,9 +4,13 @@
# 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/.
EXPORTS.mozilla.dom += [
'MathMLElement.h',
]
UNIFIED_SOURCES += [
'nsMathMLElement.cpp',
'nsMathMLElementFactory.cpp',
'MathMLElement.cpp',
'MathMLElementFactory.cpp',
]
include('/ipc/chromium/chromium-config.mozbuild')
+2 -2
View File
@@ -4,7 +4,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
[NoInterfaceObject, Exposed=(Window,Worker,System)]
interface AbstractWorker {
[Exposed=(Window,Worker)]
interface mixin AbstractWorker {
attribute EventHandler onerror;
};
+1 -1
View File
@@ -45,4 +45,4 @@ interface AnalyserNode : AudioNode {
};
// Mozilla extension
AnalyserNode implements AudioNodePassThrough;
AnalyserNode includes AudioNodePassThrough;
+1 -2
View File
@@ -18,8 +18,7 @@ dictionary AnimationFilter {
boolean subtree = false;
};
[NoInterfaceObject]
interface Animatable {
interface mixin Animatable {
[Func="nsDocument::IsElementAnimateEnabled", Throws]
Animation animate(object? keyframes,
optional UnrestrictedDoubleOrKeyframeAnimationOptions options);
+1 -1
View File
@@ -38,4 +38,4 @@ interface AudioBufferSourceNode : AudioScheduledSourceNode {
};
// Mozilla extensions
AudioBufferSourceNode implements AudioNodePassThrough;
AudioBufferSourceNode includes AudioNodePassThrough;
+1 -2
View File
@@ -67,8 +67,7 @@ partial interface AudioNode {
[ChromeOnly]
readonly attribute unsigned long id;
};
[NoInterfaceObject]
interface AudioNodePassThrough {
interface mixin AudioNodePassThrough {
[ChromeOnly]
attribute boolean passThrough;
};
+1 -1
View File
@@ -46,5 +46,5 @@ interface BiquadFilterNode : AudioNode {
};
// Mozilla extension
BiquadFilterNode implements AudioNodePassThrough;
BiquadFilterNode includes AudioNodePassThrough;
+2 -2
View File
@@ -27,8 +27,8 @@ interface Blob {
//slice Blob into byte-ranged chunks
[Throws]
Blob slice([Clamp] optional long long start,
[Clamp] optional long long end,
Blob slice(optional [Clamp] long long start,
optional [Clamp] long long end,
optional DOMString contentType = "");
// void close(); TODO bug 1048325
+5 -10
View File
@@ -19,15 +19,7 @@ dictionary BrowserElementExecuteScriptOptions {
DOMString? origin;
};
[NoInterfaceObject]
interface BrowserElement {
};
BrowserElement implements BrowserElementCommon;
BrowserElement implements BrowserElementPrivileged;
[NoInterfaceObject]
interface BrowserElementCommon {
interface mixin BrowserElementCommon {
[Throws,
Pref="dom.mozBrowserFramesEnabled",
ChromeOnly]
@@ -60,7 +52,7 @@ interface BrowserElementCommon {
};
[NoInterfaceObject]
interface BrowserElementPrivileged {
interface BrowserElement {
[Throws,
Pref="dom.mozBrowserFramesEnabled",
ChromeOnly]
@@ -171,3 +163,6 @@ interface BrowserElementPrivileged {
DOMRequest getWebManifest();
};
BrowserElement includes BrowserElementCommon;
+1 -1
View File
@@ -29,7 +29,7 @@ interface BrowserElementAudioChannel : EventTarget {
DOMRequest isActive();
};
partial interface BrowserElementPrivileged {
interface mixin BrowserElementPrivileged {
[Pure, Cached, Throws,
Pref="dom.mozBrowserFramesEnabled",
ChromeOnly]
+1 -1
View File
@@ -22,4 +22,4 @@ interface CSSPseudoElement {
};
// https://w3c.github.io/web-animations/#extensions-to-the-pseudoelement-interface
CSSPseudoElement implements Animatable;
CSSPseudoElement includes Animatable;
+1 -1
View File
@@ -21,7 +21,7 @@ interface CSSStyleDeclaration {
CSSValue? getPropertyCSSValue(DOMString property);
DOMString getPropertyPriority(DOMString property);
[CEReactions, Throws]
void setProperty(DOMString property, [TreatNullAs=EmptyString] DOMString value, [TreatNullAs=EmptyString] optional DOMString priority = "");
void setProperty(DOMString property, [TreatNullAs=EmptyString] DOMString value, optional [TreatNullAs=EmptyString] DOMString priority = "");
[CEReactions, Throws]
DOMString removeProperty(DOMString property);
+2 -2
View File
@@ -17,9 +17,9 @@ interface Cache {
Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<sequence<Response>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
[NewObject]
[NewObject, NeedsCallerType]
Promise<void> add(RequestInfo request);
[NewObject]
[NewObject, NeedsCallerType]
Promise<void> addAll(sequence<RequestInfo> requests);
[NewObject]
Promise<void> put(RequestInfo request, Response response);
+6 -8
View File
@@ -139,9 +139,9 @@ CanvasRenderingContext2D implements CanvasUserInterface;
CanvasRenderingContext2D implements CanvasText;
CanvasRenderingContext2D implements CanvasDrawImage;
CanvasRenderingContext2D implements CanvasImageData;
CanvasRenderingContext2D implements CanvasPathDrawingStyles;
CanvasRenderingContext2D includes CanvasPathDrawingStyles;
CanvasRenderingContext2D implements CanvasTextDrawingStyles;
CanvasRenderingContext2D implements CanvasPathMethods;
CanvasRenderingContext2D includes CanvasPathMethods;
CanvasRenderingContext2D implements CanvasHitRegions;
@@ -169,7 +169,7 @@ interface CanvasTransform {
DOMMatrix getTransform();
[Throws, LenientFloat]
void setTransform(double a, double b, double c, double d, double e, double f);
[Throws, LenientFloat]
[Throws]
void setTransform(optional DOMMatrix2DInit transform);
[Throws]
void resetTransform();
@@ -291,8 +291,7 @@ interface CanvasImageData {
void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight);
};
[NoInterfaceObject]
interface CanvasPathDrawingStyles {
interface mixin CanvasPathDrawingStyles {
// line caps/joins
[LenientFloat]
attribute double lineWidth; // (default 1)
@@ -317,8 +316,7 @@ interface CanvasTextDrawingStyles {
attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
};
[NoInterfaceObject]
interface CanvasPathMethods {
interface mixin CanvasPathMethods {
// shared path API methods
void closePath();
[LenientFloat]
@@ -402,4 +400,4 @@ interface Path2D
{
[Throws] void addPath(Path2D path, optional DOMMatrix2DInit transformation);
};
Path2D implements CanvasPathMethods;
Path2D includes CanvasPathMethods;
+4 -4
View File
@@ -11,8 +11,8 @@
*/
interface CharacterData : Node {
[TreatNullAs=EmptyString, Pure, SetterThrows]
attribute DOMString data;
[Pure, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString data;
[Pure]
readonly attribute unsigned long length;
[Throws]
@@ -27,5 +27,5 @@ interface CharacterData : Node {
void replaceData(unsigned long offset, unsigned long count, DOMString data);
};
CharacterData implements ChildNode;
CharacterData implements NonDocumentTypeChildNode;
CharacterData includes ChildNode;
CharacterData includes NonDocumentTypeChildNode;
+2 -4
View File
@@ -7,8 +7,7 @@
* http://dom.spec.whatwg.org/#interface-childnode
*/
[NoInterfaceObject]
interface ChildNode {
interface mixin ChildNode {
[CEReactions, Throws, Unscopable]
void before((Node or DOMString)... nodes);
[CEReactions, Throws, Unscopable]
@@ -19,8 +18,7 @@ interface ChildNode {
void remove();
};
[NoInterfaceObject]
interface NonDocumentTypeChildNode {
interface mixin NonDocumentTypeChildNode {
[Pure]
readonly attribute Element? previousElementSibling;
[Pure]
+1 -1
View File
@@ -26,5 +26,5 @@ interface ConvolverNode : AudioNode {
};
// Mozilla extension
ConvolverNode implements AudioNodePassThrough;
ConvolverNode includes AudioNodePassThrough;
+2 -2
View File
@@ -7,8 +7,8 @@
* https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#crypto-interface
*/
[NoInterfaceObject, Exposed=(Window,Worker)]
interface GlobalCrypto {
[Exposed=(Window,Worker)]
interface mixin GlobalCrypto {
[Throws] readonly attribute Crypto crypto;
};
+1 -1
View File
@@ -10,4 +10,4 @@ interface DOMCursor : EventTarget {
void continue();
};
DOMCursor implements DOMRequestShared;
DOMCursor includes DOMRequestShared;
+3 -5
View File
@@ -15,9 +15,7 @@
interface StackFrame;
[NoInterfaceObject,
Exposed=(Window,Worker)]
interface ExceptionMembers
interface mixin ExceptionMembers
{
// A custom message set by the thrower. LenientThis so it can be
// gotten on the prototype, which Error.prototype.toString will do
@@ -68,7 +66,7 @@ interface Exception {
stringifier;
};
Exception implements ExceptionMembers;
Exception includes ExceptionMembers;
// XXXkhuey this is an 'exception', not an interface, but we don't have any
// parser or codegen mechanisms for dealing with exceptions.
@@ -107,4 +105,4 @@ interface DOMException {
// XXXkhuey copy all of Gecko's non-standard stuff onto DOMException, but leave
// the prototype chain sane.
DOMException implements ExceptionMembers;
DOMException includes ExceptionMembers;
+3 -3
View File
@@ -5,8 +5,8 @@
enum DOMRequestReadyState { "pending", "done" };
[Exposed=(Window,Worker,System), NoInterfaceObject]
interface DOMRequestShared {
[Exposed=(Window,Worker)]
interface mixin DOMRequestShared {
readonly attribute DOMRequestReadyState readyState;
readonly attribute any result;
@@ -26,4 +26,4 @@ interface DOMRequest : EventTarget {
[TreatNonCallableAsNull] optional AnyCallback? rejectCallback = null);
};
DOMRequest implements DOMRequestShared;
DOMRequest includes DOMRequestShared;
+1 -1
View File
@@ -24,5 +24,5 @@ interface DelayNode : AudioNode {
};
// Mozilla extension
DelayNode implements AudioNodePassThrough;
DelayNode includes AudioNodePassThrough;
+9 -9
View File
@@ -451,12 +451,12 @@ partial interface Document {
readonly attribute FlashClassification documentFlashClassification;
};
Document implements XPathEvaluator;
Document implements GlobalEventHandlers;
Document implements DocumentAndElementEventHandlers;
Document implements TouchEventHandlers;
Document implements ParentNode;
Document implements OnErrorEventHandlerForNodes;
Document implements GeometryUtils;
Document implements FontFaceSource;
Document implements DocumentOrShadowRoot;
Document includes XPathEvaluatorMixin;
Document includes GlobalEventHandlers;
Document includes DocumentAndElementEventHandlers;
Document includes TouchEventHandlers;
Document includes ParentNode;
Document includes OnErrorEventHandlerForNodes;
Document includes GeometryUtils;
Document includes FontFaceSource;
Document includes DocumentOrShadowRoot;
+1 -1
View File
@@ -24,4 +24,4 @@ partial interface DocumentFragment {
NodeList querySelectorAll(DOMString selectors);
};
DocumentFragment implements ParentNode;
DocumentFragment includes ParentNode;
+1 -2
View File
@@ -8,8 +8,7 @@
* http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-the-documentorshadowroot-mixin
*/
[NoInterfaceObject]
interface DocumentOrShadowRoot {
interface mixin DocumentOrShadowRoot {
// Not implemented yet: bug 1430308.
// Selection? getSelection();
Element? elementFromPoint (float x, float y);
+1 -1
View File
@@ -16,4 +16,4 @@ interface DocumentType : Node {
readonly attribute DOMString systemId;
};
DocumentType implements ChildNode;
DocumentType includes ChildNode;
+1 -1
View File
@@ -32,5 +32,5 @@ interface DynamicsCompressorNode : AudioNode {
};
// Mozilla extension
DynamicsCompressorNode implements AudioNodePassThrough;
DynamicsCompressorNode includes AudioNodePassThrough;
+32 -9
View File
@@ -169,6 +169,29 @@ interface Element : Node {
sequence<Grid> getGridFragments();
};
// https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-mixin
interface mixin ElementCSSInlineStyle {
[SameObject, PutForwards=cssText]
readonly attribute CSSStyleDeclaration style;
};
// https://html.spec.whatwg.org/#focus-management-apis
dictionary FocusOptions {
boolean preventScroll = false;
};
interface mixin HTMLOrForeignElement {
[SameObject] readonly attribute DOMStringMap dataset;
// See bug 1389421
// attribute DOMString nonce; // intentionally no [CEReactions]
// See bug 1575154
// [CEReactions] attribute boolean autofocus;
[CEReactions, SetterThrows, Pure] attribute long tabIndex;
[Throws] void focus(optional FocusOptions options);
[Throws] void blur();
};
// http://dev.w3.org/csswg/cssom-view/
enum ScrollLogicalPosition { "start", "center", "end", "nearest" };
dictionary ScrollIntoViewOptions : ScrollOptions {
@@ -218,10 +241,10 @@ partial interface Element {
// http://domparsing.spec.whatwg.org/#extensions-to-the-element-interface
partial interface Element {
[CEReactions, Pure,SetterThrows,TreatNullAs=EmptyString]
attribute DOMString innerHTML;
[CEReactions, Pure,SetterThrows,TreatNullAs=EmptyString]
attribute DOMString outerHTML;
[CEReactions, Pure, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString innerHTML;
[CEReactions, Pure, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString outerHTML;
[CEReactions, Throws]
void insertAdjacentHTML(DOMString position, DOMString text);
};
@@ -252,11 +275,11 @@ partial interface Element {
attribute DOMString slot;
};
Element implements ChildNode;
Element implements NonDocumentTypeChildNode;
Element implements ParentNode;
Element implements Animatable;
Element implements GeometryUtils;
Element includes ChildNode;
Element includes NonDocumentTypeChildNode;
Element includes ParentNode;
Element includes Animatable;
Element includes GeometryUtils;
// https://fullscreen.spec.whatwg.org/#api
partial interface Element {
+8 -13
View File
@@ -24,8 +24,7 @@ typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler;
callback OnErrorEventHandlerNonNull = boolean ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
[NoInterfaceObject]
interface GlobalEventHandlers {
interface mixin GlobalEventHandlers {
attribute EventHandler onabort;
attribute EventHandler onblur;
// We think the spec is wrong here. See OnErrorEventHandlerForNodes/Window
@@ -146,8 +145,7 @@ interface GlobalEventHandlers {
attribute EventHandler onwebkittransitionend;
};
[NoInterfaceObject]
interface WindowEventHandlers {
interface mixin WindowEventHandlers {
attribute EventHandler onafterprint;
attribute EventHandler onbeforeprint;
attribute OnBeforeUnloadEventHandler onbeforeunload;
@@ -165,11 +163,10 @@ interface WindowEventHandlers {
attribute EventHandler onunload;
};
[NoInterfaceObject]
interface DocumentAndElementEventHandlers {
attribute EventHandler oncopy;
attribute EventHandler oncut;
attribute EventHandler onpaste;
interface mixin DocumentAndElementEventHandlers {
attribute EventHandler oncopy;
attribute EventHandler oncut;
attribute EventHandler onpaste;
};
// The spec has |attribute OnErrorEventHandler onerror;| on
@@ -177,12 +174,10 @@ interface DocumentAndElementEventHandlers {
// whether an ErrorEvent was fired. We don't do that, and until we do we'll
// need to distinguish between onerror on Window or on nodes.
[NoInterfaceObject]
interface OnErrorEventHandlerForNodes {
interface mixin OnErrorEventHandlerForNodes {
attribute EventHandler onerror;
};
[NoInterfaceObject]
interface OnErrorEventHandlerForWindow {
interface mixin OnErrorEventHandlerForWindow {
attribute OnErrorEventHandler onerror;
};
+1 -2
View File
@@ -10,8 +10,7 @@
typedef object JSON;
typedef (Blob or BufferSource or FormData or URLSearchParams or USVString) BodyInit;
[NoInterfaceObject, Exposed=(Window,Worker)]
interface Body {
interface mixin Body {
readonly attribute boolean bodyUsed;
[Throws]
Promise<ArrayBuffer> arrayBuffer();
+1 -2
View File
@@ -10,8 +10,7 @@
* liability, trademark and document use rules apply.
*/
[NoInterfaceObject]
interface FontFaceSource {
interface mixin FontFaceSource {
[Pref="layout.css.font-loading-api.enabled"]
readonly attribute FontFaceSet fonts;
+1 -1
View File
@@ -23,5 +23,5 @@ interface GainNode : AudioNode {
};
// Mozilla extension
GainNode implements AudioNodePassThrough;
GainNode includes AudioNodePassThrough;
+2 -3
View File
@@ -21,8 +21,7 @@ dictionary ConvertCoordinateOptions {
CSSBoxType toBox = "border";
};
[NoInterfaceObject]
interface GeometryUtils {
interface mixin GeometryUtils {
[Throws, Func="nsINode::HasBoxQuadsSupport"]
sequence<DOMQuad> getBoxQuads(optional BoxQuadOptions options);
[Throws, Pref="layout.css.convertFromNode.enabled"]
@@ -33,6 +32,6 @@ interface GeometryUtils {
DOMPoint convertPointFromNode(DOMPointInit point, GeometryNode from, optional ConvertCoordinateOptions options);
};
// PseudoElement implements GeometryUtils;
// PseudoElement includes GeometryUtils;
typedef (Text or Element /* or PseudoElement */ or Document) GeometryNode;
+1 -1
View File
@@ -35,7 +35,7 @@ interface HTMLAnchorElement : HTMLElement {
attribute DOMString text;
};
HTMLAnchorElement implements HTMLHyperlinkElementUtils;
HTMLAnchorElement includes HTMLHyperlinkElementUtils;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLAnchorElement {
+3 -3
View File
@@ -38,6 +38,6 @@ interface HTMLAppletElement : HTMLElement {
attribute DOMString width;
};
HTMLAppletElement implements MozImageLoadingContent;
HTMLAppletElement implements MozFrameLoaderOwner;
HTMLAppletElement implements MozObjectLoadingContent;
HTMLAppletElement includes MozImageLoadingContent;
HTMLAppletElement includes MozFrameLoaderOwner;
HTMLAppletElement includes MozObjectLoadingContent;
+1 -1
View File
@@ -35,7 +35,7 @@ interface HTMLAreaElement : HTMLElement {
readonly attribute DOMTokenList relList;
};
HTMLAreaElement implements HTMLHyperlinkElementUtils;
HTMLAreaElement includes HTMLHyperlinkElementUtils;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLAreaElement {
+11 -11
View File
@@ -16,18 +16,18 @@ interface HTMLBodyElement : HTMLElement {
};
partial interface HTMLBodyElement {
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString text;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString link;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString vLink;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString aLink;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString bgColor;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString text;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString link;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString vLink;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString aLink;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString bgColor;
[CEReactions, SetterThrows]
attribute DOMString background;
};
HTMLBodyElement implements WindowEventHandlers;
HTMLBodyElement includes WindowEventHandlers;
+5 -5
View File
@@ -58,11 +58,11 @@ interface HTMLDocument : Document {
[Throws]
DOMString queryCommandValue(DOMString commandId);
[CEReactions, TreatNullAs=EmptyString] attribute DOMString fgColor;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString linkColor;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString vlinkColor;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString alinkColor;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString bgColor;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString fgColor;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString linkColor;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString vlinkColor;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString alinkColor;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString bgColor;
[Pure]
readonly attribute HTMLCollection anchors;
+9 -20
View File
@@ -22,23 +22,15 @@ interface HTMLElement : Element {
// attribute boolean translate;
[CEReactions, SetterThrows, Pure]
attribute DOMString dir;
[Constant]
readonly attribute DOMStringMap dataset;
[CEReactions, GetterThrows, Pure, TreatNullAs=EmptyString]
attribute DOMString innerText;
[CEReactions, GetterThrows, Pure]
attribute [TreatNullAs=EmptyString] DOMString innerText;
// user interaction
[CEReactions, SetterThrows, Pure]
attribute boolean hidden;
[NeedsCallerType]
void click();
[CEReactions, SetterThrows, Pure]
attribute long tabIndex;
[Throws]
void focus();
[Throws]
void blur();
[CEReactions, SetterThrows, Pure]
attribute DOMString accessKey;
[Pure]
@@ -62,10 +54,6 @@ interface HTMLElement : Element {
//readonly attribute boolean? commandHidden;
//readonly attribute boolean? commandDisabled;
//readonly attribute boolean? commandChecked;
// styling
[PutForwards=cssText, Constant]
readonly attribute CSSStyleDeclaration style;
};
// http://dev.w3.org/csswg/cssom-view/#extensions-to-the-htmlelement-interface
@@ -85,8 +73,7 @@ partial interface HTMLElement {
attribute boolean scrollgrab;
};
[NoInterfaceObject]
interface TouchEventHandlers {
interface mixin TouchEventHandlers {
[Func="nsGenericHTMLElement::TouchEventsEnabled"]
attribute EventHandler ontouchstart;
[Func="nsGenericHTMLElement::TouchEventsEnabled"]
@@ -97,9 +84,11 @@ interface TouchEventHandlers {
attribute EventHandler ontouchcancel;
};
HTMLElement implements GlobalEventHandlers;
HTMLElement implements DocumentAndElementEventHandlers;
HTMLElement implements TouchEventHandlers;
HTMLElement implements OnErrorEventHandlerForNodes;
HTMLElement includes GlobalEventHandlers;
HTMLElement includes HTMLOrForeignElement;
HTMLElement includes DocumentAndElementEventHandlers;
HTMLElement includes ElementCSSInlineStyle;
HTMLElement includes TouchEventHandlers;
HTMLElement includes OnErrorEventHandlerForNodes;
interface HTMLUnknownElement : HTMLElement {};
+3 -3
View File
@@ -39,6 +39,6 @@ partial interface HTMLEmbedElement {
Document? getSVGDocument();
};
HTMLEmbedElement implements MozImageLoadingContent;
HTMLEmbedElement implements MozFrameLoaderOwner;
HTMLEmbedElement implements MozObjectLoadingContent;
HTMLEmbedElement includes MozImageLoadingContent;
HTMLEmbedElement includes MozFrameLoaderOwner;
HTMLEmbedElement includes MozObjectLoadingContent;
+1 -1
View File
@@ -13,7 +13,7 @@
[HTMLConstructor]
interface HTMLFontElement : HTMLElement {
[CEReactions, TreatNullAs=EmptyString, SetterThrows] attribute DOMString color;
[CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString color;
[CEReactions, SetterThrows] attribute DOMString face;
[CEReactions, SetterThrows] attribute DOMString size;
};
+5 -5
View File
@@ -29,10 +29,10 @@ interface HTMLFrameElement : HTMLElement {
readonly attribute Document? contentDocument;
readonly attribute WindowProxy? contentWindow;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString marginHeight;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString marginWidth;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString marginHeight;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString marginWidth;
};
HTMLFrameElement implements MozFrameLoaderOwner;
HTMLFrameElement includes MozFrameLoaderOwner;
+1 -1
View File
@@ -19,4 +19,4 @@ interface HTMLFrameSetElement : HTMLElement {
attribute DOMString rows;
};
HTMLFrameSetElement implements WindowEventHandlers;
HTMLFrameSetElement includes WindowEventHandlers;
+1 -2
View File
@@ -10,8 +10,7 @@
* and create derivative works of this document.
*/
[NoInterfaceObject]
interface HTMLHyperlinkElementUtils {
interface mixin HTMLHyperlinkElementUtils {
// Bug 824857: no support for stringifier attributes yet.
// stringifier attribute USVString href;
+6 -6
View File
@@ -45,10 +45,10 @@ partial interface HTMLIFrameElement {
[CEReactions, SetterThrows, Pure]
attribute DOMString longDesc;
[CEReactions, TreatNullAs=EmptyString, SetterThrows, Pure]
attribute DOMString marginHeight;
[CEReactions, TreatNullAs=EmptyString, SetterThrows, Pure]
attribute DOMString marginWidth;
[CEReactions, SetterThrows, Pure]
attribute [TreatNullAs=EmptyString] DOMString marginHeight;
[CEReactions, SetterThrows, Pure]
attribute [TreatNullAs=EmptyString] DOMString marginWidth;
};
partial interface HTMLIFrameElement {
@@ -59,9 +59,9 @@ partial interface HTMLIFrameElement {
partial interface HTMLIFrameElement {
// nsIDOMMozBrowserFrame
[ChromeOnly,SetterThrows]
[ChromeOnly, SetterThrows]
attribute boolean mozbrowser;
};
HTMLIFrameElement implements MozFrameLoaderOwner;
HTMLIFrameElement includes MozFrameLoaderOwner;
HTMLIFrameElement implements BrowserElement;
+3 -4
View File
@@ -55,7 +55,7 @@ partial interface HTMLImageElement {
[CEReactions, SetterThrows]
attribute DOMString longDesc;
[CEReactions, TreatNullAs=EmptyString,SetterThrows] attribute DOMString border;
[CEReactions, SetterThrows] attribute [TreatNullAs=EmptyString] DOMString border;
};
// [Update me: not in whatwg spec yet]
@@ -77,8 +77,7 @@ partial interface HTMLImageElement {
readonly attribute long y;
};
[NoInterfaceObject]
interface MozImageLoadingContent {
interface mixin MozImageLoadingContent {
// Mirrored chrome-only nsIImageLoadingContent methods. Please make sure
// to update this list if nsIImageLoadingContent changes.
[ChromeOnly]
@@ -108,4 +107,4 @@ interface MozImageLoadingContent {
void forceImageState(boolean aForce, unsigned long long aState);
};
HTMLImageElement implements MozImageLoadingContent;
HTMLImageElement includes MozImageLoadingContent;
+5 -6
View File
@@ -89,8 +89,8 @@ interface HTMLInputElement : HTMLElement {
attribute DOMString type;
[CEReactions, Pure, SetterThrows]
attribute DOMString defaultValue;
[CEReactions, Pure, TreatNullAs=EmptyString, SetterThrows, NeedsCallerType]
attribute DOMString value;
[CEReactions, Pure, SetterThrows, NeedsCallerType]
attribute [TreatNullAs=EmptyString] DOMString value;
[Throws, Func="HTMLInputElement::ValueAsDateEnabled"]
attribute Date? valueAsDate;
[CEReactions, Pure, SetterThrows]
@@ -226,14 +226,13 @@ partial interface HTMLInputElement {
void chooseDirectory();
};
[NoInterfaceObject]
interface MozPhonetic {
interface mixin MozPhonetic {
[Pure, ChromeOnly]
readonly attribute DOMString phonetic;
};
HTMLInputElement implements MozImageLoadingContent;
HTMLInputElement implements MozPhonetic;
HTMLInputElement includes MozImageLoadingContent;
HTMLInputElement includes MozPhonetic;
// Webkit/Blink
partial interface HTMLInputElement {
+1 -1
View File
@@ -36,7 +36,7 @@ interface HTMLLinkElement : HTMLElement {
attribute DOMString referrerPolicy;
[PutForwards=value] readonly attribute DOMTokenList sizes;
};
HTMLLinkElement implements LinkStyle;
HTMLLinkElement includes LinkStyle;
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
partial interface HTMLLinkElement {
+6 -7
View File
@@ -67,8 +67,8 @@ partial interface HTMLObjectElement {
[CEReactions, Pure, SetterThrows]
attribute DOMString codeType;
[CEReactions, TreatNullAs=EmptyString, Pure, SetterThrows]
attribute DOMString border;
[CEReactions, Pure, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString border;
};
partial interface HTMLObjectElement {
@@ -77,8 +77,7 @@ partial interface HTMLObjectElement {
Document? getSVGDocument();
};
[NoInterfaceObject]
interface MozObjectLoadingContent {
interface mixin MozObjectLoadingContent {
// Mirrored chrome-only scriptable nsIObjectLoadingContent methods. Please
// make sure to update this list if nsIObjectLoadingContent changes. Also,
// make sure everything on here is [ChromeOnly].
@@ -217,6 +216,6 @@ dictionary MozPluginParameter {
DOMString value = "";
};
HTMLObjectElement implements MozImageLoadingContent;
HTMLObjectElement implements MozFrameLoaderOwner;
HTMLObjectElement implements MozObjectLoadingContent;
HTMLObjectElement includes MozImageLoadingContent;
HTMLObjectElement includes MozFrameLoaderOwner;
HTMLObjectElement includes MozObjectLoadingContent;
+1 -1
View File
@@ -21,5 +21,5 @@ interface HTMLStyleElement : HTMLElement {
[SetterThrows, Pure]
attribute boolean scoped;
};
HTMLStyleElement implements LinkStyle;
HTMLStyleElement includes LinkStyle;
+2 -2
View File
@@ -48,6 +48,6 @@ partial interface HTMLTableCellElement {
[CEReactions, SetterThrows]
attribute DOMString vAlign;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString bgColor;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString bgColor;
};
+6 -6
View File
@@ -53,10 +53,10 @@ partial interface HTMLTableElement {
[CEReactions, SetterThrows]
attribute DOMString width;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString bgColor;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString cellPadding;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString cellSpacing;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString bgColor;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString cellPadding;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString cellSpacing;
};
+2 -2
View File
@@ -32,6 +32,6 @@ partial interface HTMLTableRowElement {
[CEReactions, SetterThrows]
attribute DOMString vAlign;
[CEReactions, TreatNullAs=EmptyString, SetterThrows]
attribute DOMString bgColor;
[CEReactions, SetterThrows]
attribute [TreatNullAs=EmptyString] DOMString bgColor;
};
+1 -1
View File
@@ -48,7 +48,7 @@ interface HTMLTextAreaElement : HTMLElement {
readonly attribute DOMString type;
[CEReactions, SetterThrows, Pure]
attribute DOMString defaultValue;
[CEReactions, TreatNullAs=EmptyString] attribute DOMString value;
[CEReactions] attribute [TreatNullAs=EmptyString] DOMString value;
readonly attribute unsigned long textLength;
readonly attribute boolean willValidate;
+4 -4
View File
@@ -58,14 +58,14 @@ interface IDBIndex {
partial interface IDBIndex {
[Throws]
IDBRequest mozGetAll (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest mozGetAll (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest mozGetAllKeys (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest mozGetAllKeys (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest getAll (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest getAll (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest getAllKeys (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest getAllKeys (optional any key, optional [EnforceRange] unsigned long limit);
};
+1 -1
View File
@@ -20,7 +20,7 @@ interface IDBKeyRange {
[Constant]
readonly attribute boolean upperOpen;
[Throws]
boolean includes(any key);
boolean _includes(any key);
[NewObject, Throws]
+3 -3
View File
@@ -61,13 +61,13 @@ interface IDBObjectStore {
partial interface IDBObjectStore {
// Success fires IDBTransactionEvent, result == array of values for given keys
[Throws]
IDBRequest mozGetAll (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest mozGetAll (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest getAll (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest getAll (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest getAllKeys (optional any key, [EnforceRange] optional unsigned long limit);
IDBRequest getAllKeys (optional any key, optional [EnforceRange] unsigned long limit);
[Throws]
IDBRequest openKeyCursor (optional any range, optional IDBCursorDirection direction = "next");
+1 -1
View File
@@ -21,4 +21,4 @@ interface IIRFilterNode : AudioNode {
};
// Mozilla extension
IIRFilterNode implements AudioNodePassThrough;
IIRFilterNode includes AudioNodePassThrough;
+74 -77
View File
@@ -7,86 +7,83 @@
interface nsISupports;
interface IID;
[NoInterfaceObject,
// Need Exposed here, because this is a mixin onto things like Event
// that are exposed in workers.
Exposed=(Window,Worker,System)]
interface LegacyQueryInterface {
[Exposed=Window]
interface mixin LegacyQueryInterface {
// Legacy QueryInterface, only exposed to chrome or XBL code on the
// main thread.
[Exposed=Window]
nsISupports queryInterface(IID iid);
};
Attr implements LegacyQueryInterface;
BarProp implements LegacyQueryInterface;
BoxObject implements LegacyQueryInterface;
CaretPosition implements LegacyQueryInterface;
Comment implements LegacyQueryInterface;
Crypto implements LegacyQueryInterface;
CSSMozDocumentRule implements LegacyQueryInterface;
CSSPrimitiveValue implements LegacyQueryInterface;
CSSStyleDeclaration implements LegacyQueryInterface;
CSSStyleRule implements LegacyQueryInterface;
CSSValueList implements LegacyQueryInterface;
DOMImplementation implements LegacyQueryInterface;
DOMParser implements LegacyQueryInterface;
DOMStringMap implements LegacyQueryInterface;
DOMTokenList implements LegacyQueryInterface;
Document implements LegacyQueryInterface;
DocumentFragment implements LegacyQueryInterface;
DocumentType implements LegacyQueryInterface;
Element implements LegacyQueryInterface;
Event implements LegacyQueryInterface;
EventSource implements LegacyQueryInterface;
FileList implements LegacyQueryInterface;
FormData implements LegacyQueryInterface;
HTMLCollection implements LegacyQueryInterface;
History implements LegacyQueryInterface;
MimeTypeArray implements LegacyQueryInterface;
NamedNodeMap implements LegacyQueryInterface;
MutationObserver implements LegacyQueryInterface;
MutationRecord implements LegacyQueryInterface;
Navigator implements LegacyQueryInterface;
NodeIterator implements LegacyQueryInterface;
NodeList implements LegacyQueryInterface;
Notification implements LegacyQueryInterface;
OfflineResourceList implements LegacyQueryInterface;
PaintRequest implements LegacyQueryInterface;
PaintRequestList implements LegacyQueryInterface;
Performance implements LegacyQueryInterface;
Plugin implements LegacyQueryInterface;
PluginArray implements LegacyQueryInterface;
ProcessingInstruction implements LegacyQueryInterface;
Range implements LegacyQueryInterface;
Rect implements LegacyQueryInterface;
Selection implements LegacyQueryInterface;
SVGAnimatedEnumeration implements LegacyQueryInterface;
SVGAnimatedInteger implements LegacyQueryInterface;
SVGAnimatedNumber implements LegacyQueryInterface;
SVGAnimatedNumberList implements LegacyQueryInterface;
SVGAnimatedPreserveAspectRatio implements LegacyQueryInterface;
SVGAnimatedString implements LegacyQueryInterface;
SVGLengthList implements LegacyQueryInterface;
SVGNumberList implements LegacyQueryInterface;
SVGPathSegList implements LegacyQueryInterface;
SVGPoint implements LegacyQueryInterface;
SVGPointList implements LegacyQueryInterface;
SVGPreserveAspectRatio implements LegacyQueryInterface;
SVGRect implements LegacyQueryInterface;
SVGStringList implements LegacyQueryInterface;
SVGTransformList implements LegacyQueryInterface;
Screen implements LegacyQueryInterface;
StyleSheet implements LegacyQueryInterface;
Text implements LegacyQueryInterface;
Touch implements LegacyQueryInterface;
TouchList implements LegacyQueryInterface;
TreeColumns implements LegacyQueryInterface;
TreeWalker implements LegacyQueryInterface;
ValidityState implements LegacyQueryInterface;
WebSocket implements LegacyQueryInterface;
Window implements LegacyQueryInterface;
XMLHttpRequest implements LegacyQueryInterface;
XMLHttpRequestUpload implements LegacyQueryInterface;
XMLSerializer implements LegacyQueryInterface;
XPathEvaluator implements LegacyQueryInterface;
Attr includes LegacyQueryInterface;
BarProp includes LegacyQueryInterface;
BoxObject includes LegacyQueryInterface;
CaretPosition includes LegacyQueryInterface;
Comment includes LegacyQueryInterface;
Crypto includes LegacyQueryInterface;
CSSMozDocumentRule includes LegacyQueryInterface;
CSSPrimitiveValue includes LegacyQueryInterface;
CSSStyleDeclaration includes LegacyQueryInterface;
CSSStyleRule includes LegacyQueryInterface;
CSSValueList includes LegacyQueryInterface;
DOMImplementation includes LegacyQueryInterface;
DOMParser includes LegacyQueryInterface;
DOMStringMap includes LegacyQueryInterface;
DOMTokenList includes LegacyQueryInterface;
Document includes LegacyQueryInterface;
DocumentFragment includes LegacyQueryInterface;
DocumentType includes LegacyQueryInterface;
Element includes LegacyQueryInterface;
Event includes LegacyQueryInterface;
EventSource includes LegacyQueryInterface;
FileList includes LegacyQueryInterface;
FormData includes LegacyQueryInterface;
HTMLCollection includes LegacyQueryInterface;
History includes LegacyQueryInterface;
MimeTypeArray includes LegacyQueryInterface;
NamedNodeMap includes LegacyQueryInterface;
MutationObserver includes LegacyQueryInterface;
MutationRecord includes LegacyQueryInterface;
Navigator includes LegacyQueryInterface;
NodeIterator includes LegacyQueryInterface;
NodeList includes LegacyQueryInterface;
Notification includes LegacyQueryInterface;
OfflineResourceList includes LegacyQueryInterface;
PaintRequest includes LegacyQueryInterface;
PaintRequestList includes LegacyQueryInterface;
Performance includes LegacyQueryInterface;
Plugin includes LegacyQueryInterface;
PluginArray includes LegacyQueryInterface;
ProcessingInstruction includes LegacyQueryInterface;
Range includes LegacyQueryInterface;
Rect includes LegacyQueryInterface;
Selection includes LegacyQueryInterface;
SVGAnimatedEnumeration includes LegacyQueryInterface;
SVGAnimatedInteger includes LegacyQueryInterface;
SVGAnimatedNumber includes LegacyQueryInterface;
SVGAnimatedNumberList includes LegacyQueryInterface;
SVGAnimatedPreserveAspectRatio includes LegacyQueryInterface;
SVGAnimatedString includes LegacyQueryInterface;
SVGLengthList includes LegacyQueryInterface;
SVGNumberList includes LegacyQueryInterface;
SVGPathSegList includes LegacyQueryInterface;
SVGPoint includes LegacyQueryInterface;
SVGPointList includes LegacyQueryInterface;
SVGPreserveAspectRatio includes LegacyQueryInterface;
SVGRect includes LegacyQueryInterface;
SVGStringList includes LegacyQueryInterface;
SVGTransformList includes LegacyQueryInterface;
Screen includes LegacyQueryInterface;
StyleSheet includes LegacyQueryInterface;
Text includes LegacyQueryInterface;
Touch includes LegacyQueryInterface;
TouchList includes LegacyQueryInterface;
TreeColumns includes LegacyQueryInterface;
TreeWalker includes LegacyQueryInterface;
ValidityState includes LegacyQueryInterface;
WebSocket includes LegacyQueryInterface;
Window includes LegacyQueryInterface;
XMLHttpRequest includes LegacyQueryInterface;
XMLHttpRequestUpload includes LegacyQueryInterface;
XMLSerializer includes LegacyQueryInterface;
XPathEvaluator includes LegacyQueryInterface;
+1 -2
View File
@@ -7,8 +7,7 @@
* http://dev.w3.org/csswg/cssom/#the-linkstyle-interface
*/
[NoInterfaceObject]
interface LinkStyle {
interface mixin LinkStyle {
readonly attribute StyleSheet? sheet;
};
+19
View File
@@ -0,0 +1,19 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://mathml-refresh.github.io/mathml-core/
*
* Copyright © 2019 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark
* and permissive document license rules apply.
*/
[Exposed=Window]
interface MathMLElement : Element { };
MathMLElement includes GlobalEventHandlers;
MathMLElement includes HTMLOrForeignElement;
MathMLElement includes DocumentAndElementEventHandlers;
MathMLElement includes ElementCSSInlineStyle;
MathMLElement includes TouchEventHandlers;
@@ -21,5 +21,5 @@ interface MediaElementAudioSourceNode : AudioNode {
};
// Mozilla extensions
MediaElementAudioSourceNode implements AudioNodePassThrough;
MediaElementAudioSourceNode includes AudioNodePassThrough;
+1 -2
View File
@@ -7,8 +7,7 @@
[ArrayClass]
interface MediaList {
[TreatNullAs=EmptyString]
attribute DOMString mediaText;
attribute [TreatNullAs=EmptyString] DOMString mediaText;
readonly attribute unsigned long length;
getter DOMString? item(unsigned long index);
+1 -1
View File
@@ -21,5 +21,5 @@ interface MediaStreamAudioSourceNode : AudioNode {
};
// Mozilla extensions
MediaStreamAudioSourceNode implements AudioNodePassThrough;
MediaStreamAudioSourceNode includes AudioNodePassThrough;
-1
View File
@@ -20,7 +20,6 @@ interface MessagePort : EventTarget {
// event handlers
attribute EventHandler onmessage;
};
// MessagePort implements Transferable;
// Used to declare which objects should be transferred.
dictionary StructuredSerializeOptions {
+22 -30
View File
@@ -26,18 +26,17 @@
interface Navigator {
// objects implementing this interface also implement the interfaces given below
};
Navigator implements NavigatorID;
Navigator implements NavigatorLanguage;
Navigator implements NavigatorOnLine;
Navigator implements NavigatorContentUtils;
Navigator implements NavigatorStorageUtils;
Navigator implements NavigatorConcurrentHardware;
Navigator implements NavigatorStorage;
Navigator implements NavigatorGlobalPrivacyControl;
Navigator implements NavigatorAutomationInformation;
Navigator includes NavigatorID;
Navigator includes NavigatorLanguage;
Navigator includes NavigatorOnLine;
Navigator includes NavigatorContentUtils;
Navigator includes NavigatorStorageUtils;
Navigator includes NavigatorConcurrentHardware;
Navigator includes NavigatorStorage;
Navigator includes NavigatorGlobalPrivacyControl;
Navigator includes NavigatorAutomationInformation;
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorID {
interface mixin NavigatorID {
// WebKit/Blink/Trident/Presto support this (hardcoded "Mozilla").
[Constant, Cached]
readonly attribute DOMString appCodeName; // constant "Mozilla"
@@ -57,8 +56,7 @@ interface NavigatorID {
boolean taintEnabled(); // constant false
};
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorLanguage {
interface mixin NavigatorLanguage {
// These two attributes are cached because this interface is also implemented
// by Workernavigator and this way we don't have to go back to the
@@ -71,13 +69,11 @@ interface NavigatorLanguage {
readonly attribute sequence<DOMString> languages;
};
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorOnLine {
interface mixin NavigatorOnLine {
readonly attribute boolean onLine;
};
[NoInterfaceObject]
interface NavigatorContentUtils {
interface mixin NavigatorContentUtils {
// content handler registration
[Throws]
void registerProtocolHandler(DOMString scheme, DOMString url, DOMString title);
@@ -90,14 +86,13 @@ interface NavigatorContentUtils {
//void unregisterContentHandler(DOMString mimeType, DOMString url);
};
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorStorage {
[SecureContext]
interface mixin NavigatorStorage {
[Func="mozilla::dom::StorageManager::PrefEnabled"]
readonly attribute StorageManager storage;
};
[NoInterfaceObject]
interface NavigatorStorageUtils {
interface mixin NavigatorStorageUtils {
// NOT IMPLEMENTED
//void yieldForStorageUpdates();
};
@@ -117,18 +112,17 @@ partial interface Navigator {
};
// https://globalprivacycontrol.github.io/gpc-spec/
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorGlobalPrivacyControl {
[Exposed=(Window,Worker)]
interface mixin NavigatorGlobalPrivacyControl {
readonly attribute boolean globalPrivacyControl;
};
// http://www.w3.org/TR/geolocation-API/#geolocation_interface
[NoInterfaceObject]
interface NavigatorGeolocation {
interface mixin NavigatorGeolocation {
[Throws, Pref="geo.enabled"]
readonly attribute Geolocation geolocation;
};
Navigator implements NavigatorGeolocation;
Navigator includes NavigatorGeolocation;
// http://www.w3.org/TR/battery-status/#navigatorbattery-interface
partial interface Navigator {
@@ -371,8 +365,7 @@ partial interface Navigator {
};
#endif
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorConcurrentHardware {
interface mixin NavigatorConcurrentHardware {
readonly attribute unsigned long long hardwareConcurrency;
};
@@ -388,8 +381,7 @@ partial interface Navigator {
};
// https://w3c.github.io/webdriver/webdriver-spec.html#interface
[NoInterfaceObject, Exposed=Window]
interface NavigatorAutomationInformation {
interface mixin NavigatorAutomationInformation {
[Pref="dom.webdriver.enabled"]
readonly attribute boolean webdriver;
};
+1 -8
View File
@@ -4,7 +4,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* http://notifications.spec.whatwg.org/
* https://notifications.spec.whatwg.org/
*
* Copyright:
* To the extent possible under law, the editors have waived all copyright and
@@ -96,10 +96,3 @@ enum NotificationDirection {
"ltr",
"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);
};
-5
View File
@@ -20,8 +20,3 @@ interface NotificationEvent : ExtendableEvent {
dictionary NotificationEventInit : ExtendableEventInit {
required Notification notification;
};
partial interface ServiceWorkerGlobalScope {
attribute EventHandler onnotificationclick;
attribute EventHandler onnotificationclose;
};
-1
View File
@@ -26,4 +26,3 @@ interface OffscreenCanvas : EventTarget {
optional any encoderOptions);
};
// OffscreenCanvas implements Transferable;
+1 -1
View File
@@ -39,4 +39,4 @@ interface OscillatorNode : AudioScheduledSourceNode {
};
// Mozilla extensions
OscillatorNode implements AudioNodePassThrough;
OscillatorNode includes AudioNodePassThrough;
+1 -1
View File
@@ -75,5 +75,5 @@ interface PannerNode : AudioNode {
};
// Mozilla extension
PannerNode implements AudioNodePassThrough;
PannerNode includes AudioNodePassThrough;
+1 -2
View File
@@ -7,8 +7,7 @@
* http://dom.spec.whatwg.org/#interface-parentnode
*/
[NoInterfaceObject]
interface ParentNode {
interface mixin ParentNode {
[Constant]
readonly attribute HTMLCollection children;
[Pure]

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