commit a0cf5d9cd65377d746229d8eee78ad6ac22c07ee parent a4155e38e469996ba05d8dbea6f5cff31c691391 Author: Eitan Isaacson <eitan@monotonous.org> Date: Wed, 19 Nov 2025 23:45:20 +0000 Bug 1998242 - P3: Introduce DirectName() to be used by Name(). r=morgan Mark Name() as final in LocalAccessible and RemoteAccessible, and rely on DirectName for overriding name calculation in local accessibles. Depends on D271310 Differential Revision: https://phabricator.services.mozilla.com/D271311 Diffstat:
26 files changed, 45 insertions(+), 35 deletions(-)
diff --git a/accessible/atk/ApplicationAccessibleWrap.cpp b/accessible/atk/ApplicationAccessibleWrap.cpp @@ -66,7 +66,7 @@ gboolean toplevel_event_watcher(GSignalInvocationHint* ihint, return TRUE; } -ENameValueFlag ApplicationAccessibleWrap::Name(nsString& aName) const { +ENameValueFlag ApplicationAccessibleWrap::DirectName(nsString& aName) const { // ATK doesn't provide a way to obtain an application name (for example, // Firefox or Thunderbird) like IA2 does. Thus let's return an application // name as accessible name that was used to get a branding name (for example, diff --git a/accessible/atk/ApplicationAccessibleWrap.h b/accessible/atk/ApplicationAccessibleWrap.h @@ -18,7 +18,8 @@ class ApplicationAccessibleWrap : public ApplicationAccessible { virtual ~ApplicationAccessibleWrap(); // LocalAccessible - virtual mozilla::a11y::ENameValueFlag Name(nsString& aName) const override; + virtual mozilla::a11y::ENameValueFlag DirectName( + nsString& aName) const override; virtual bool InsertChildAt(uint32_t aIdx, LocalAccessible* aChild) override; virtual bool RemoveChild(LocalAccessible* aChild) override; diff --git a/accessible/base/EventQueue.cpp b/accessible/base/EventQueue.cpp @@ -130,7 +130,7 @@ bool EventQueue::PushNameOrDescriptionChange(AccEvent* aOrigEvent) { bool fireNameChange = parent->IsHTMLFileInput(); if (!fireNameChange) { nsAutoString name; - ENameValueFlag nameFlag = parent->Name(name); + ENameValueFlag nameFlag = parent->DirectName(name); switch (nameFlag) { case eNameOK: // Descendants of subtree may have been removed, making the name diff --git a/accessible/generic/ApplicationAccessible.cpp b/accessible/generic/ApplicationAccessible.cpp @@ -31,7 +31,7 @@ ApplicationAccessible::ApplicationAccessible() //////////////////////////////////////////////////////////////////////////////// // nsIAccessible -ENameValueFlag ApplicationAccessible::Name(nsString& aName) const { +ENameValueFlag ApplicationAccessible::DirectName(nsString& aName) const { aName.Truncate(); nsCOMPtr<nsIStringBundleService> bundleService = diff --git a/accessible/generic/ApplicationAccessible.h b/accessible/generic/ApplicationAccessible.h @@ -37,7 +37,7 @@ class ApplicationAccessible : public AccessibleWrap { virtual nsRect BoundsInAppUnits() const override; virtual already_AddRefed<AccAttributes> NativeAttributes() override; virtual GroupPos GroupPosition() override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual void ApplyARIAState(uint64_t* aState) const override; virtual EDescriptionValueFlag Description( nsString& aDescription) const override; diff --git a/accessible/generic/DocAccessible.cpp b/accessible/generic/DocAccessible.cpp @@ -166,7 +166,7 @@ NS_IMPL_RELEASE_INHERITED(DocAccessible, HyperTextAccessible) //////////////////////////////////////////////////////////////////////////////// // nsIAccessible -ENameValueFlag DocAccessible::Name(nsString& aName) const { +ENameValueFlag DocAccessible::DirectName(nsString& aName) const { aName.Truncate(); if (mParent) { @@ -174,7 +174,7 @@ ENameValueFlag DocAccessible::Name(nsString& aName) const { } if (aName.IsEmpty()) { // Allow name via aria-labelledby or title attribute - LocalAccessible::Name(aName); + LocalAccessible::DirectName(aName); } if (aName.IsEmpty()) { Title(aName); // Try title element diff --git a/accessible/generic/DocAccessible.h b/accessible/generic/DocAccessible.h @@ -65,7 +65,8 @@ class DocAccessible : public HyperTextAccessible, virtual nsINode* GetNode() const override; Document* DocumentNode() const { return mDocumentNode; } - virtual mozilla::a11y::ENameValueFlag Name(nsString& aName) const override; + virtual mozilla::a11y::ENameValueFlag DirectName( + nsString& aName) const override; virtual EDescriptionValueFlag Description( nsString& aDescription) const override; virtual Accessible* FocusedChild() override; diff --git a/accessible/generic/LocalAccessible.cpp b/accessible/generic/LocalAccessible.cpp @@ -124,7 +124,7 @@ LocalAccessible::~LocalAccessible() { NS_ASSERTION(!mDoc, "LastRelease was never called!?!"); } -ENameValueFlag LocalAccessible::Name(nsString& aName) const { +ENameValueFlag LocalAccessible::DirectName(nsString& aName) const { aName.Truncate(); if (!HasOwnContent()) return eNameOK; @@ -150,6 +150,10 @@ ENameValueFlag LocalAccessible::Name(nsString& aName) const { return nameFlag; } +ENameValueFlag LocalAccessible::Name(nsString& aName) const { + return DirectName(aName); +} + EDescriptionValueFlag LocalAccessible::Description( nsString& aDescription) const { // There are 4 conditions that make an accessible have no accDescription: diff --git a/accessible/generic/LocalAccessible.h b/accessible/generic/LocalAccessible.h @@ -155,7 +155,9 @@ class LocalAccessible : public nsISupports, public Accessible { /** * Get the name of this accessible. */ - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag Name(nsString& aName) const override final; + + virtual ENameValueFlag DirectName(nsString& aName) const; /** * Maps ARIA state attributes to state of accessible. Note the given state diff --git a/accessible/generic/RootAccessible.cpp b/accessible/generic/RootAccessible.cpp @@ -64,11 +64,11 @@ RootAccessible::~RootAccessible() {} //////////////////////////////////////////////////////////////////////////////// // LocalAccessible -ENameValueFlag RootAccessible::Name(nsString& aName) const { +ENameValueFlag RootAccessible::DirectName(nsString& aName) const { aName.Truncate(); if (ARIARoleMap()) { - LocalAccessible::Name(aName); + LocalAccessible::DirectName(aName); if (!aName.IsEmpty()) return eNameOK; } diff --git a/accessible/generic/RootAccessible.h b/accessible/generic/RootAccessible.h @@ -35,7 +35,8 @@ class RootAccessible : public DocAccessibleWrap, public nsIDOMEventListener { // LocalAccessible virtual void Shutdown() override; - virtual mozilla::a11y::ENameValueFlag Name(nsString& aName) const override; + virtual mozilla::a11y::ENameValueFlag DirectName( + nsString& aName) const override; virtual Relation RelationByType(RelationType aType) const override; virtual uint64_t NativeState() const override; diff --git a/accessible/generic/TextLeafAccessible.cpp b/accessible/generic/TextLeafAccessible.cpp @@ -39,7 +39,7 @@ void TextLeafAccessible::AppendTextTo(nsAString& aText, uint32_t aStartOffset, aText.Append(Substring(mText, aStartOffset, aLength)); } -ENameValueFlag TextLeafAccessible::Name(nsString& aName) const { +ENameValueFlag TextLeafAccessible::DirectName(nsString& aName) const { // Text node, ARIA can't be used. aName = mText; return eNameOK; diff --git a/accessible/generic/TextLeafAccessible.h b/accessible/generic/TextLeafAccessible.h @@ -23,7 +23,7 @@ class TextLeafAccessible : public LinkableAccessible { virtual mozilla::a11y::role NativeRole() const override; virtual void AppendTextTo(nsAString& aText, uint32_t aStartOffset = 0, uint32_t aLength = UINT32_MAX) override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; // TextLeafAccessible void SetText(const nsAString& aText) { mText = aText; } diff --git a/accessible/html/HTMLFormControlAccessible.cpp b/accessible/html/HTMLFormControlAccessible.cpp @@ -331,8 +331,8 @@ already_AddRefed<AccAttributes> HTMLTextFieldAccessible::NativeAttributes() { return attributes.forget(); } -ENameValueFlag HTMLTextFieldAccessible::Name(nsString& aName) const { - ENameValueFlag nameFlag = LocalAccessible::Name(aName); +ENameValueFlag HTMLTextFieldAccessible::DirectName(nsString& aName) const { + ENameValueFlag nameFlag = LocalAccessible::DirectName(aName); if (!aName.IsEmpty()) return nameFlag; // text inputs and textareas might have useful placeholder text @@ -510,8 +510,8 @@ bool HTMLFileInputAccessible::IsAcceptableChild(nsIContent* aEl) const { return aEl->IsText(); } -ENameValueFlag HTMLFileInputAccessible::Name(nsString& aName) const { - ENameValueFlag flag = HyperTextAccessible::Name(aName); +ENameValueFlag HTMLFileInputAccessible::DirectName(nsString& aName) const { + ENameValueFlag flag = HyperTextAccessible::DirectName(aName); if (flag == eNameFromSubtree) { // The author didn't provide a name. We'll compute the name from our subtree // below. diff --git a/accessible/html/HTMLFormControlAccessible.h b/accessible/html/HTMLFormControlAccessible.h @@ -118,7 +118,7 @@ class HTMLTextFieldAccessible : public HyperTextAccessible { virtual ~HTMLTextFieldAccessible() {} // LocalAccessible - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute, AttrModType aModType, @@ -136,7 +136,7 @@ class HTMLFileInputAccessible : public HyperTextAccessible { // LocalAccessible virtual mozilla::a11y::role NativeRole() const override; virtual bool IsAcceptableChild(nsIContent* aEl) const override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual bool HasPrimaryAction() const override; virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; virtual bool IsWidget() const override; diff --git a/accessible/html/HTMLListAccessible.cpp b/accessible/html/HTMLListAccessible.cpp @@ -85,7 +85,7 @@ HTMLListBulletAccessible::HTMLListBulletAccessible(nsIContent* aContent, //////////////////////////////////////////////////////////////////////////////// // HTMLListBulletAccessible: LocalAccessible -ENameValueFlag HTMLListBulletAccessible::Name(nsString& aName) const { +ENameValueFlag HTMLListBulletAccessible::DirectName(nsString& aName) const { nsLayoutUtils::GetMarkerSpokenText(mContent, aName); return eNameOK; } diff --git a/accessible/html/HTMLListAccessible.h b/accessible/html/HTMLListAccessible.h @@ -67,7 +67,7 @@ class HTMLListBulletAccessible : public LeafAccessible { virtual ~HTMLListBulletAccessible() {} // LocalAccessible - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual a11y::role NativeRole() const override; virtual uint64_t NativeState() const override; virtual already_AddRefed<AccAttributes> NativeAttributes() override; diff --git a/accessible/ipc/RemoteAccessible.h b/accessible/ipc/RemoteAccessible.h @@ -181,7 +181,7 @@ class RemoteAccessible : public Accessible, public HyperTextAccessibleBase { // Methods that potentially access a cache. - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag Name(nsString& aName) const override final; virtual EDescriptionValueFlag Description( nsString& aDescription) const override; virtual void Value(nsString& aValue) const override; diff --git a/accessible/xul/XULAlertAccessible.cpp b/accessible/xul/XULAlertAccessible.cpp @@ -29,7 +29,7 @@ uint64_t XULAlertAccessible::NativeState() const { return LocalAccessible::NativeState() | states::ALERT; } -ENameValueFlag XULAlertAccessible::Name(nsString& aName) const { +ENameValueFlag XULAlertAccessible::DirectName(nsString& aName) const { // Screen readers need to read contents of alert, not the accessible name. // If we have both some screen readers will read the alert twice. aName.Truncate(); diff --git a/accessible/xul/XULAlertAccessible.h b/accessible/xul/XULAlertAccessible.h @@ -22,7 +22,8 @@ class XULAlertAccessible : public AccessibleWrap { NS_INLINE_DECL_REFCOUNTING_INHERITED(XULAlertAccessible, AccessibleWrap) // LocalAccessible - virtual mozilla::a11y::ENameValueFlag Name(nsString& aName) const override; + virtual mozilla::a11y::ENameValueFlag DirectName( + nsString& aName) const override; virtual a11y::role NativeRole() const override; virtual uint64_t NativeState() const override; diff --git a/accessible/xul/XULMenuAccessible.cpp b/accessible/xul/XULMenuAccessible.cpp @@ -130,8 +130,8 @@ ENameValueFlag XULMenuitemAccessible::NativeName(nsString& aName) const { return eNameOK; } -ENameValueFlag XULMenuitemAccessible::Name(nsString& aName) const { - ENameValueFlag flag = AccessibleWrap::Name(aName); +ENameValueFlag XULMenuitemAccessible::DirectName(nsString& aName) const { + ENameValueFlag flag = AccessibleWrap::DirectName(aName); if (!aName.IsEmpty()) { // We can't handle this in NativeName() because some menuitems use // aria-label rather than label, and aria-label is returned by diff --git a/accessible/xul/XULMenuAccessible.h b/accessible/xul/XULMenuAccessible.h @@ -22,7 +22,7 @@ class XULMenuitemAccessible : public AccessibleWrap { XULMenuitemAccessible(nsIContent* aContent, DocAccessible* aDoc); // LocalAccessible - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual EDescriptionValueFlag Description( nsString& aDescription) const override; virtual a11y::role NativeRole() const override; diff --git a/accessible/xul/XULTreeAccessible.cpp b/accessible/xul/XULTreeAccessible.cpp @@ -924,7 +924,7 @@ NS_IMPL_RELEASE_INHERITED(XULTreeItemAccessible, XULTreeItemAccessibleBase) //////////////////////////////////////////////////////////////////////////////// // XULTreeItemAccessible: nsIAccessible implementation -ENameValueFlag XULTreeItemAccessible::Name(nsString& aName) const { +ENameValueFlag XULTreeItemAccessible::DirectName(nsString& aName) const { aName.Truncate(); GetCellName(mColumn, aName); diff --git a/accessible/xul/XULTreeAccessible.h b/accessible/xul/XULTreeAccessible.h @@ -223,7 +223,7 @@ class XULTreeItemAccessible : public XULTreeItemAccessibleBase { // LocalAccessible virtual void Shutdown() override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual a11y::role NativeRole() const override; // XULTreeItemAccessibleBase diff --git a/accessible/xul/XULTreeGridAccessible.cpp b/accessible/xul/XULTreeGridAccessible.cpp @@ -251,7 +251,7 @@ void XULTreeGridRowAccessible::Shutdown() { role XULTreeGridRowAccessible::NativeRole() const { return roles::ROW; } -ENameValueFlag XULTreeGridRowAccessible::Name(nsString& aName) const { +ENameValueFlag XULTreeGridRowAccessible::DirectName(nsString& aName) const { aName.Truncate(); // XXX: the row name sholdn't be a concatenation of cell names (bug 664384). @@ -400,7 +400,7 @@ void XULTreeGridCellAccessible::Shutdown() { Accessible* XULTreeGridCellAccessible::FocusedChild() { return nullptr; } -ENameValueFlag XULTreeGridCellAccessible::Name(nsString& aName) const { +ENameValueFlag XULTreeGridCellAccessible::DirectName(nsString& aName) const { aName.Truncate(); if (!mTreeView) return eNameOK; diff --git a/accessible/xul/XULTreeGridAccessible.h b/accessible/xul/XULTreeGridAccessible.h @@ -87,7 +87,7 @@ class XULTreeGridRowAccessible final : public XULTreeItemAccessibleBase { // LocalAccessible virtual void Shutdown() override; virtual a11y::role NativeRole() const override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual LocalAccessible* LocalChildAtPoint( int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override; @@ -131,7 +131,7 @@ class XULTreeGridCellAccessible : public LeafAccessible, virtual TableCellAccessible* AsTableCell() override { return this; } virtual nsRect BoundsInAppUnits() const override; virtual nsIntRect BoundsInCSSPixels() const override; - virtual ENameValueFlag Name(nsString& aName) const override; + virtual ENameValueFlag DirectName(nsString& aName) const override; virtual Accessible* FocusedChild() override; virtual already_AddRefed<AccAttributes> NativeAttributes() override; virtual int32_t IndexInParent() const override;