tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3a0b29121e2273701a63210a4dc075f1fa60c976
parent e821559f74fdbcff1b9d7434ade855a5991ec25b
Author: Alice Boxhall <95208+alice@users.noreply.github.com>
Date:   Tue,  6 Jan 2026 16:13:54 +0000

Bug 1989323 - Make `referenceTarget` IDL attributes on ShadowRoot, HTMLTemplateElement and ShadowRootInit nullable. r=dom-core,webidl,saschanaz,smaug

This was resolved in https://github.com/WICG/webcomponents/issues/1093.

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

Diffstat:
Mdom/base/Element.h | 2+-
Mdom/base/ShadowRoot.cpp | 4+---
Mdom/base/ShadowRoot.h | 10++++++++--
Mdom/webidl/Element.webidl | 2+-
Mdom/webidl/HTMLTemplateElement.webidl | 2+-
Mdom/webidl/ShadowRoot.webidl | 2+-
Dtesting/web-platform/meta/shadow-dom/reference-target/tentative/reference-target-basics.html.ini | 6------
7 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/dom/base/Element.h b/dom/base/Element.h @@ -1511,7 +1511,7 @@ class Element : public FragmentOrElement { SlotAssignmentMode aSlotAssignmentMode = SlotAssignmentMode::Named, ShadowRootClonable aClonable = ShadowRootClonable::No, ShadowRootSerializable aSerializable = ShadowRootSerializable::No, - const nsAString& aReferenceTarget = EmptyString()); + const nsAString& aReferenceTarget = VoidString()); // Attach UA Shadow Root if it is not attached. enum class NotifyUAWidgetSetup : bool { No, Yes }; diff --git a/dom/base/ShadowRoot.cpp b/dom/base/ShadowRoot.cpp @@ -71,8 +71,7 @@ ShadowRoot::ShadowRoot(Element* aElement, ShadowRootMode aMode, mIsAvailableToElementInternals(false), mIsDeclarative(aDeclarative), mIsClonable(aIsClonable), - mIsSerializable(aIsSerializable), - mReferenceTarget(nsGkAtoms::_empty) { + mIsSerializable(aIsSerializable) { // nsINode.h relies on this. MOZ_ASSERT(static_cast<nsINode*>(this) == reinterpret_cast<nsINode*>(this)); MOZ_ASSERT(static_cast<nsIContent*>(this) == @@ -941,6 +940,5 @@ void ShadowRoot::GetHTML(const GetHTMLOptions& aOptions, nsAString& aResult) { aOptions.mShadowRoots); } void ShadowRoot::SetReferenceTarget(RefPtr<nsAtom> aTarget) { - MOZ_ASSERT(aTarget); mReferenceTarget = std::move(aTarget); } diff --git a/dom/base/ShadowRoot.h b/dom/base/ShadowRoot.h @@ -276,16 +276,22 @@ class ShadowRoot final : public DocumentFragment, public DocumentOrShadowRoot { void GetHTML(const GetHTMLOptions& aOptions, nsAString& aResult); void GetReferenceTarget(nsAString& aResult) const { + if (!mReferenceTarget) { + aResult.SetIsVoid(true); + return; + } mReferenceTarget->ToString(aResult); } nsAtom* ReferenceTarget() const { return mReferenceTarget; } void SetReferenceTarget(const nsAString& aValue) { + if (aValue.IsVoid()) { + return SetReferenceTarget(nullptr); + } SetReferenceTarget(NS_Atomize(aValue)); } void SetReferenceTarget(RefPtr<nsAtom> aTarget); Element* GetReferenceTargetElement() const { - return mReferenceTarget->IsEmpty() ? nullptr - : GetElementById(mReferenceTarget); + return mReferenceTarget ? GetElementById(mReferenceTarget) : nullptr; } protected: diff --git a/dom/webidl/Element.webidl b/dom/webidl/Element.webidl @@ -282,7 +282,7 @@ dictionary ShadowRootInit { // https://github.com/whatwg/dom/pull/1353 [Pref="dom.shadowdom.referenceTarget.enabled"] - DOMString referenceTarget; + DOMString? referenceTarget; }; // https://dom.spec.whatwg.org/#element diff --git a/dom/webidl/HTMLTemplateElement.webidl b/dom/webidl/HTMLTemplateElement.webidl @@ -23,5 +23,5 @@ interface HTMLTemplateElement : HTMLElement { [CEReactions, SetterThrows] attribute boolean shadowRootSerializable; [CEReactions, SetterThrows, Pref="dom.shadowdom.referenceTarget.enabled"] - attribute DOMString shadowRootReferenceTarget; + attribute DOMString? shadowRootReferenceTarget; }; diff --git a/dom/webidl/ShadowRoot.webidl b/dom/webidl/ShadowRoot.webidl @@ -32,7 +32,7 @@ interface ShadowRoot : DocumentFragment attribute EventHandler onslotchange; [Pref="dom.shadowdom.referenceTarget.enabled"] - attribute DOMString referenceTarget; + attribute DOMString? referenceTarget; Element? getElementById(DOMString elementId); diff --git a/testing/web-platform/meta/shadow-dom/reference-target/tentative/reference-target-basics.html.ini b/testing/web-platform/meta/shadow-dom/reference-target/tentative/reference-target-basics.html.ini @@ -1,6 +0,0 @@ -[reference-target-basics.html] - [ShadowRoot.referenceTarget defaults to null when shadow is created declaratively] - expected: FAIL - - [ShadowRoot.referenceTarget defaults to null when shadow is created imperatively] - expected: FAIL