mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-27 10:57:34 +09:00
Merge remote-tracking branch 'origin/master' into custom
This commit is contained in:
commit
924da4a2cc
559 changed files with 9029 additions and 12082 deletions
|
|
@ -84,12 +84,12 @@ SVGAElement::Href()
|
|||
// nsINode methods
|
||||
|
||||
nsresult
|
||||
SVGAElement::PreHandleEvent(EventChainPreVisitor& aVisitor)
|
||||
SVGAElement::GetEventTargetParent(EventChainPreVisitor& aVisitor)
|
||||
{
|
||||
nsresult rv = Element::PreHandleEvent(aVisitor);
|
||||
nsresult rv = Element::GetEventTargetParent(aVisitor);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return PreHandleEventForLinks(aVisitor);
|
||||
return GetEventTargetParentForLinks(aVisitor);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
|
|
|||
|
|
@ -37,7 +37,8 @@ public:
|
|||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(SVGAElement, SVGAElementBase)
|
||||
|
||||
// nsINode interface methods
|
||||
virtual nsresult PreHandleEvent(EventChainPreVisitor& aVisitor) override;
|
||||
virtual nsresult GetEventTargetParent(
|
||||
EventChainPreVisitor& aVisitor) override;
|
||||
virtual nsresult PostHandleEvent(
|
||||
EventChainPostVisitor& aVisitor) override;
|
||||
virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override;
|
||||
|
|
|
|||
|
|
@ -299,11 +299,12 @@ SVGAnimationElement::ParseAttribute(int32_t aNamespaceID,
|
|||
|
||||
nsresult
|
||||
SVGAnimationElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
nsresult rv =
|
||||
SVGAnimationElementBase::AfterSetAttr(aNamespaceID, aName, aValue,
|
||||
aNotify);
|
||||
aOldValue, aNotify);
|
||||
|
||||
if (SVGTests::IsConditionalProcessingAttribute(aName)) {
|
||||
bool isDisabled = !SVGTests::PassesConditionalProcessingTests();
|
||||
|
|
|
|||
|
|
@ -58,7 +58,9 @@ public:
|
|||
const nsAString& aValue,
|
||||
nsAttrValue& aResult) override;
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
|
||||
const nsAttrValue* GetAnimAttr(nsIAtom* aName) const;
|
||||
bool GetAnimAttr(nsIAtom* aAttName, nsAString& aResult) const;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,8 @@ SVGFEImageElement::IsAttributeMapped(const nsIAtom* name) const
|
|||
|
||||
nsresult
|
||||
SVGFEImageElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
if (aName == nsGkAtoms::href &&
|
||||
(aNamespaceID == kNameSpaceID_XLink ||
|
||||
|
|
@ -139,7 +140,7 @@ SVGFEImageElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
|||
}
|
||||
|
||||
return SVGFEImageElementBase::AfterSetAttr(aNamespaceID, aName,
|
||||
aValue, aNotify);
|
||||
aValue, aOldValue, aNotify);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -58,7 +58,9 @@ public:
|
|||
virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override;
|
||||
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
||||
nsIContent* aBindingParent,
|
||||
bool aCompileEventHandlers) override;
|
||||
|
|
|
|||
|
|
@ -150,7 +150,8 @@ SVGImageElement::AsyncEventRunning(AsyncEventDispatcher* aEvent)
|
|||
|
||||
nsresult
|
||||
SVGImageElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
if (aName == nsGkAtoms::href &&
|
||||
(aNamespaceID == kNameSpaceID_None ||
|
||||
|
|
@ -169,7 +170,7 @@ SVGImageElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
|||
}
|
||||
}
|
||||
return SVGImageElementBase::AfterSetAttr(aNamespaceID, aName,
|
||||
aValue, aNotify);
|
||||
aValue, aOldValue, aNotify);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ public:
|
|||
|
||||
// nsIContent interface
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
||||
nsIContent* aBindingParent,
|
||||
bool aCompileEventHandlers) override;
|
||||
|
|
|
|||
|
|
@ -589,7 +589,7 @@ SVGSVGElement::IsAttributeMapped(const nsIAtom* name) const
|
|||
// nsIContent methods:
|
||||
|
||||
nsresult
|
||||
SVGSVGElement::PreHandleEvent(EventChainPreVisitor& aVisitor)
|
||||
SVGSVGElement::GetEventTargetParent(EventChainPreVisitor& aVisitor)
|
||||
{
|
||||
if (aVisitor.mEvent->mMessage == eSVGLoad) {
|
||||
if (mTimedDocumentRoot) {
|
||||
|
|
@ -600,7 +600,7 @@ SVGSVGElement::PreHandleEvent(EventChainPreVisitor& aVisitor)
|
|||
AnimationNeedsResample();
|
||||
}
|
||||
}
|
||||
return SVGSVGElementBase::PreHandleEvent(aVisitor);
|
||||
return SVGSVGElementBase::GetEventTargetParent(aVisitor);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -152,7 +152,8 @@ public:
|
|||
|
||||
// nsIContent interface
|
||||
NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const override;
|
||||
virtual nsresult PreHandleEvent(EventChainPreVisitor& aVisitor) override;
|
||||
virtual nsresult GetEventTargetParent(
|
||||
EventChainPreVisitor& aVisitor) override;
|
||||
|
||||
virtual bool IsEventAttributeName(nsIAtom* aName) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -211,7 +211,8 @@ SVGScriptElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
|||
|
||||
nsresult
|
||||
SVGScriptElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
if ((aNamespaceID == kNameSpaceID_XLink ||
|
||||
aNamespaceID == kNameSpaceID_None) &&
|
||||
|
|
@ -219,7 +220,7 @@ SVGScriptElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
|||
MaybeProcessScript();
|
||||
}
|
||||
return SVGScriptElementBase::AfterSetAttr(aNamespaceID, aName,
|
||||
aValue, aNotify);
|
||||
aValue, aOldValue, aNotify);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@ public:
|
|||
nsIContent* aBindingParent,
|
||||
bool aCompileEventHandlers) override;
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
virtual bool ParseAttribute(int32_t aNamespaceID,
|
||||
nsIAtom* aAttribute,
|
||||
const nsAString& aValue,
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ nsSVGClass::SetBaseValue(const nsAString& aValue,
|
|||
{
|
||||
NS_ASSERTION(aSVGElement, "Null element passed to SetBaseValue");
|
||||
|
||||
aSVGElement->SetFlags(NODE_MAY_HAVE_CLASS);
|
||||
aSVGElement->SetMayHaveClass();
|
||||
if (aDoSetAttr) {
|
||||
aSVGElement->SetAttr(kNameSpaceID_None, nsGkAtoms::_class, aValue, true);
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ nsSVGClass::SetAnimValue(const nsAString& aValue, nsSVGElement *aSVGElement)
|
|||
mAnimVal = new nsString();
|
||||
}
|
||||
*mAnimVal = aValue;
|
||||
aSVGElement->SetFlags(NODE_MAY_HAVE_CLASS);
|
||||
aSVGElement->SetMayHaveClass();
|
||||
aSVGElement->DidAnimateClass();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "nsIDOMMutationEvent.h"
|
||||
#include "nsSVGPathGeometryElement.h"
|
||||
#include "mozilla/InternalMutationEvent.h"
|
||||
#include "mozAutoDocUpdate.h"
|
||||
#include "nsError.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsGkAtoms.h"
|
||||
|
|
@ -272,7 +273,9 @@ nsSVGElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
|||
ParseStyleAttribute(stringValue, attrValue, true);
|
||||
// Don't bother going through SetInlineStyleDeclaration; we don't
|
||||
// want to fire off mutation events or document notifications anyway
|
||||
rv = mAttrsAndChildren.SetAndSwapAttr(nsGkAtoms::style, attrValue);
|
||||
bool oldValueSet;
|
||||
rv = mAttrsAndChildren.SetAndSwapAttr(nsGkAtoms::style, attrValue,
|
||||
&oldValueSet);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
|
@ -281,7 +284,8 @@ nsSVGElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
|||
|
||||
nsresult
|
||||
nsSVGElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
// We don't currently use nsMappedAttributes within SVG. If this changes, we
|
||||
// need to be very careful because some nsAttrValues used by SVG point to
|
||||
|
|
@ -309,7 +313,8 @@ nsSVGElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
return nsSVGElementBase::AfterSetAttr(aNamespaceID, aName, aValue, aNotify);
|
||||
return nsSVGElementBase::AfterSetAttr(aNamespaceID, aName, aValue, aOldValue,
|
||||
aNotify);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
@ -1441,27 +1446,16 @@ nsSVGElement::WillChangeValue(nsIAtom* aName)
|
|||
// We need an empty attr value:
|
||||
// a) to pass to BeforeSetAttr when GetParsedAttr returns nullptr
|
||||
// b) to store the old value in the case we have mutation listeners
|
||||
// We can use the same value for both purposes since (a) happens before (b).
|
||||
//
|
||||
// We can use the same value for both purposes, because if GetParsedAttr
|
||||
// returns non-null its return value is what will get passed to BeforeSetAttr,
|
||||
// not matter what our mutation listener situation is.
|
||||
//
|
||||
// Also, we should be careful to always return this value to benefit from
|
||||
// return value optimization.
|
||||
nsAttrValue emptyOrOldAttrValue;
|
||||
const nsAttrValue* attrValue = GetParsedAttr(aName);
|
||||
|
||||
// This is not strictly correct--the attribute value parameter for
|
||||
// BeforeSetAttr should reflect the value that *will* be set but that implies
|
||||
// allocating, e.g. an extra nsSVGLength2, and isn't necessary at the moment
|
||||
// since no SVG elements overload BeforeSetAttr. For now we just pass the
|
||||
// current value.
|
||||
nsAttrValueOrString attrStringOrValue(attrValue ? *attrValue
|
||||
: emptyOrOldAttrValue);
|
||||
DebugOnly<nsresult> rv =
|
||||
BeforeSetAttr(kNameSpaceID_None, aName, &attrStringOrValue,
|
||||
kNotifyDocumentObservers);
|
||||
// SVG elements aren't expected to overload BeforeSetAttr in such a way that
|
||||
// it may fail. So long as this is the case we don't need to check and pass on
|
||||
// the return value which simplifies the calling code significantly.
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv), "Unexpected failure from BeforeSetAttr");
|
||||
|
||||
// We only need to set the old value if we have listeners since otherwise it
|
||||
// isn't used.
|
||||
if (attrValue &&
|
||||
|
|
@ -1477,6 +1471,21 @@ nsSVGElement::WillChangeValue(nsIAtom* aName)
|
|||
nsNodeUtils::AttributeWillChange(this, kNameSpaceID_None, aName, modType,
|
||||
nullptr);
|
||||
|
||||
// This is not strictly correct--the attribute value parameter for
|
||||
// BeforeSetAttr should reflect the value that *will* be set but that implies
|
||||
// allocating, e.g. an extra nsSVGLength2, and isn't necessary at the moment
|
||||
// since no SVG elements overload BeforeSetAttr. For now we just pass the
|
||||
// current value.
|
||||
nsAttrValueOrString attrStringOrValue(attrValue ? *attrValue
|
||||
: emptyOrOldAttrValue);
|
||||
DebugOnly<nsresult> rv =
|
||||
BeforeSetAttr(kNameSpaceID_None, aName, &attrStringOrValue,
|
||||
kNotifyDocumentObservers);
|
||||
// SVG elements aren't expected to overload BeforeSetAttr in such a way that
|
||||
// it may fail. So long as this is the case we don't need to check and pass on
|
||||
// the return value which simplifies the calling code significantly.
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv), "Unexpected failure from BeforeSetAttr");
|
||||
|
||||
return emptyOrOldAttrValue;
|
||||
}
|
||||
|
||||
|
|
@ -1505,9 +1514,17 @@ nsSVGElement::DidChangeValue(nsIAtom* aName,
|
|||
uint8_t modType = HasAttr(kNameSpaceID_None, aName)
|
||||
? static_cast<uint8_t>(nsIDOMMutationEvent::MODIFICATION)
|
||||
: static_cast<uint8_t>(nsIDOMMutationEvent::ADDITION);
|
||||
SetAttrAndNotify(kNameSpaceID_None, aName, nullptr, aEmptyOrOldValue,
|
||||
|
||||
nsIDocument* document = GetComposedDoc();
|
||||
mozAutoDocUpdate updateBatch(document, UPDATE_CONTENT_MODEL,
|
||||
kNotifyDocumentObservers);
|
||||
// XXX Really, the fourth argument to SetAttrAndNotify should be null if
|
||||
// aEmptyOrOldValue does not represent the actual previous value of the
|
||||
// attribute, but currently SVG elements do not even use the old attribute
|
||||
// value in |AfterSetAttr|, so this should be ok.
|
||||
SetAttrAndNotify(kNameSpaceID_None, aName, nullptr, &aEmptyOrOldValue,
|
||||
aNewValue, modType, hasListeners, kNotifyDocumentObservers,
|
||||
kCallAfterSetAttr);
|
||||
kCallAfterSetAttr, document, updateBatch);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1527,7 +1544,8 @@ nsSVGElement::MaybeSerializeAttrBeforeRemoval(nsIAtom* aName, bool aNotify)
|
|||
nsAutoString serializedValue;
|
||||
attrValue->ToString(serializedValue);
|
||||
nsAttrValue oldAttrValue(serializedValue);
|
||||
mAttrsAndChildren.SetAndSwapAttr(aName, oldAttrValue);
|
||||
bool oldValueSet;
|
||||
mAttrsAndChildren.SetAndSwapAttr(aName, oldAttrValue, &oldValueSet);
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
|
|
|||
|
|
@ -329,14 +329,16 @@ protected:
|
|||
// BeforeSetAttr since it would involve allocating extra SVG value types.
|
||||
// See the comment in nsSVGElement::WillChangeValue.
|
||||
virtual nsresult BeforeSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
nsAttrValueOrString* aValue,
|
||||
const nsAttrValueOrString* aValue,
|
||||
bool aNotify) override final
|
||||
{
|
||||
return nsSVGElementBase::BeforeSetAttr(aNamespaceID, aName, aValue, aNotify);
|
||||
}
|
||||
#endif // DEBUG
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
virtual bool ParseAttribute(int32_t aNamespaceID, nsIAtom* aAttribute,
|
||||
const nsAString& aValue, nsAttrValue& aResult) override;
|
||||
static nsresult ReportAttributeParseFailure(nsIDocument* aDocument,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ nsSVGPathGeometryElement::nsSVGPathGeometryElement(already_AddRefed<mozilla::dom
|
|||
|
||||
nsresult
|
||||
nsSVGPathGeometryElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify)
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue, bool aNotify)
|
||||
{
|
||||
if (mCachedPath &&
|
||||
aNamespaceID == kNameSpaceID_None &&
|
||||
|
|
@ -34,7 +35,7 @@ nsSVGPathGeometryElement::AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
|||
mCachedPath = nullptr;
|
||||
}
|
||||
return nsSVGPathGeometryElementBase::AfterSetAttr(aNamespaceID, aName,
|
||||
aValue, aNotify);
|
||||
aValue, aOldValue, aNotify);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -45,7 +45,9 @@ public:
|
|||
explicit nsSVGPathGeometryElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
|
||||
|
||||
virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsIAtom* aName,
|
||||
const nsAttrValue* aValue, bool aNotify) override;
|
||||
const nsAttrValue* aValue,
|
||||
const nsAttrValue* aOldValue,
|
||||
bool aNotify) override;
|
||||
|
||||
/**
|
||||
* Causes this element to discard any Path object that GetOrBuildPath may
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue