Title: [286767] trunk
Revision
286767
Author
[email protected]
Date
2021-12-09 00:26:34 -0800 (Thu, 09 Dec 2021)

Log Message

[GTK][a11y] Ensure atspi wrappers have root set at construction time
https://bugs.webkit.org/show_bug.cgi?id=233804

Reviewed by Joanmarie Diggs.

Source/WebCore:

Pass the AccessibilityRootAtspi as a parameter to AccessibilityObjectAtspi constructor and store it as a
reference. A pointer to the AccessibilityRootAtspi object is now set in Page so that it can be accessed from the
AXObjectCache. Also remove setRoot() and use m_root directly instead of root() accessor.

* accessibility/atspi/AXObjectCacheAtspi.cpp:
(WebCore::AXObjectCache::attachWrapper): Get the AccessibilityRootAtspi from the page and pass it to the wrapper
constructor. Also set the parent of the dom root element wrapper to the atspi root element.
* accessibility/atspi/AccessibilityAtspi.cpp:
(WebCore::AccessibilityAtspi::childrenChanged):
* accessibility/atspi/AccessibilityObjectAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::create):
(WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
(WebCore::AccessibilityObjectAtspi::cacheDestroyed):
(WebCore::AccessibilityObjectAtspi::elementDestroyed):
(WebCore::AccessibilityObjectAtspi::path):
(WebCore::AccessibilityObjectAtspi::reference):
(WebCore::AccessibilityObjectAtspi::hyperlinkReference):
(WebCore::AccessibilityObjectAtspi::parentReference const):
(WebCore::AccessibilityObjectAtspi::childAt const):
(WebCore::AccessibilityObjectAtspi::wrapperVector const):
(WebCore::AccessibilityObjectAtspi::buildRelationSet const):
(WebCore::AccessibilityObjectAtspi::serialize const):
(WebCore::AccessibilityObjectAtspi::childAdded):
(WebCore::AccessibilityObjectAtspi::childRemoved):
(WebCore::AccessibilityObjectAtspi::stateChanged):
(WebCore::AccessibilityObjectAtspi::setRoot): Deleted.
(WebCore::AccessibilityObjectAtspi::root const): Deleted.
* accessibility/atspi/AccessibilityObjectAtspi.h:
* accessibility/atspi/AccessibilityObjectComponentAtspi.cpp:
* accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp:
* accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::hyperlink const):
* accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::selectedChild const):
(WebCore::AccessibilityObjectAtspi::selectionChanged):
* accessibility/atspi/AccessibilityObjectTableAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::cell const):
(WebCore::AccessibilityObjectAtspi::tableCaption const):
(WebCore::AccessibilityObjectAtspi::rowHeader const):
(WebCore::AccessibilityObjectAtspi::columnHeader const):
* accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::cellRowHeaders const):
(WebCore::AccessibilityObjectAtspi::cellColumnHeaders const):
* accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::textInserted):
(WebCore::AccessibilityObjectAtspi::textDeleted):
(WebCore::AccessibilityObjectAtspi::selectionChanged):
(WebCore::AccessibilityObjectAtspi::textAttributesChanged):
* accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
(WebCore::AccessibilityObjectAtspi::valueChanged):
* accessibility/atspi/AccessibilityRootAtspi.cpp:
(WebCore::AccessibilityRootAtspi::registerObject):
(WebCore::AccessibilityRootAtspi::unregisterObject):
(WebCore::AccessibilityRootAtspi::child const):
(WebCore::AccessibilityRootAtspi::focusedObject const): Deleted.
* accessibility/atspi/AccessibilityRootAtspi.h:
* page/Page.h:
(WebCore::Page::accessibilityRootObject const):
(WebCore::Page::setAccessibilityRootObject):

Source/WebKit:

* WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
(WKAccessibilityRootObject): Remove ATSPI specific code.
(WKAccessibilityFocusedObject): Ditto.
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::accessibilityRootObject const): Deleted.

Tools:

* WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
(WTR::AccessibilityController::axRunLoop):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286766 => 286767)


--- trunk/Source/WebCore/ChangeLog	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/ChangeLog	2021-12-09 08:26:34 UTC (rev 286767)
@@ -1,3 +1,70 @@
+2021-12-09  Carlos Garcia Campos  <[email protected]>
+
+        [GTK][a11y] Ensure atspi wrappers have root set at construction time
+        https://bugs.webkit.org/show_bug.cgi?id=233804
+
+        Reviewed by Joanmarie Diggs.
+
+        Pass the AccessibilityRootAtspi as a parameter to AccessibilityObjectAtspi constructor and store it as a
+        reference. A pointer to the AccessibilityRootAtspi object is now set in Page so that it can be accessed from the
+        AXObjectCache. Also remove setRoot() and use m_root directly instead of root() accessor.
+
+        * accessibility/atspi/AXObjectCacheAtspi.cpp:
+        (WebCore::AXObjectCache::attachWrapper): Get the AccessibilityRootAtspi from the page and pass it to the wrapper
+        constructor. Also set the parent of the dom root element wrapper to the atspi root element.
+        * accessibility/atspi/AccessibilityAtspi.cpp:
+        (WebCore::AccessibilityAtspi::childrenChanged):
+        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::create):
+        (WebCore::AccessibilityObjectAtspi::AccessibilityObjectAtspi):
+        (WebCore::AccessibilityObjectAtspi::cacheDestroyed):
+        (WebCore::AccessibilityObjectAtspi::elementDestroyed):
+        (WebCore::AccessibilityObjectAtspi::path):
+        (WebCore::AccessibilityObjectAtspi::reference):
+        (WebCore::AccessibilityObjectAtspi::hyperlinkReference):
+        (WebCore::AccessibilityObjectAtspi::parentReference const):
+        (WebCore::AccessibilityObjectAtspi::childAt const):
+        (WebCore::AccessibilityObjectAtspi::wrapperVector const):
+        (WebCore::AccessibilityObjectAtspi::buildRelationSet const):
+        (WebCore::AccessibilityObjectAtspi::serialize const):
+        (WebCore::AccessibilityObjectAtspi::childAdded):
+        (WebCore::AccessibilityObjectAtspi::childRemoved):
+        (WebCore::AccessibilityObjectAtspi::stateChanged):
+        (WebCore::AccessibilityObjectAtspi::setRoot): Deleted.
+        (WebCore::AccessibilityObjectAtspi::root const): Deleted.
+        * accessibility/atspi/AccessibilityObjectAtspi.h:
+        * accessibility/atspi/AccessibilityObjectComponentAtspi.cpp:
+        * accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp:
+        * accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::hyperlink const):
+        * accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::selectedChild const):
+        (WebCore::AccessibilityObjectAtspi::selectionChanged):
+        * accessibility/atspi/AccessibilityObjectTableAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::cell const):
+        (WebCore::AccessibilityObjectAtspi::tableCaption const):
+        (WebCore::AccessibilityObjectAtspi::rowHeader const):
+        (WebCore::AccessibilityObjectAtspi::columnHeader const):
+        * accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::cellRowHeaders const):
+        (WebCore::AccessibilityObjectAtspi::cellColumnHeaders const):
+        * accessibility/atspi/AccessibilityObjectTextAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::textInserted):
+        (WebCore::AccessibilityObjectAtspi::textDeleted):
+        (WebCore::AccessibilityObjectAtspi::selectionChanged):
+        (WebCore::AccessibilityObjectAtspi::textAttributesChanged):
+        * accessibility/atspi/AccessibilityObjectValueAtspi.cpp:
+        (WebCore::AccessibilityObjectAtspi::valueChanged):
+        * accessibility/atspi/AccessibilityRootAtspi.cpp:
+        (WebCore::AccessibilityRootAtspi::registerObject):
+        (WebCore::AccessibilityRootAtspi::unregisterObject):
+        (WebCore::AccessibilityRootAtspi::child const):
+        (WebCore::AccessibilityRootAtspi::focusedObject const): Deleted.
+        * accessibility/atspi/AccessibilityRootAtspi.h:
+        * page/Page.h:
+        (WebCore::Page::accessibilityRootObject const):
+        (WebCore::Page::setAccessibilityRootObject):
+
 2021-12-08  Myles C. Maxfield  <[email protected]>
 
         Fix build after r286759

Modified: trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -35,12 +35,19 @@
 
 void AXObjectCache::attachWrapper(AXCoreObject* axObject)
 {
-    auto wrapper = AccessibilityObjectAtspi::create(axObject);
+    auto* rootWrapper = document().page()->accessibilityRootObject();
+    if (!rootWrapper)
+        return;
+
+    auto wrapper = AccessibilityObjectAtspi::create(axObject, *rootWrapper);
     axObject->setWrapper(wrapper.ptr());
 
     auto* axParent = axObject->parentObjectUnignored();
-    if (!axParent)
+    if (!axParent) {
+        if (axObject->isScrollView() && axObject->scrollView() == document().view())
+            wrapper->setParent(nullptr); // nullptr parent means root.
         return;
+    }
 
     auto* axParentWrapper = axParent->wrapper();
     if (!axParentWrapper)

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -177,7 +177,6 @@
         if (!m_connection)
             return;
 
-        child->setRoot(atspiObject->root());
         g_dbus_connection_emit_signal(m_connection.get(), nullptr, atspiObject->path().utf8().data(), "org.a11y.atspi.Event.Object", "ChildrenChanged",
             g_variant_new("(siiv(so))", change == ChildrenChanged::Added ? "add" : "remove", child->indexInParentForChildrenChanged(change),
             0, g_variant_new("(so)", uniqueName(), child->path().utf8().data()), uniqueName(), atspiObject->path().utf8().data()), nullptr);

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -37,9 +37,9 @@
 
 namespace WebCore {
 
-Ref<AccessibilityObjectAtspi> AccessibilityObjectAtspi::create(AXCoreObject* coreObject)
+Ref<AccessibilityObjectAtspi> AccessibilityObjectAtspi::create(AXCoreObject* coreObject, AccessibilityRootAtspi& root)
 {
-    return adoptRef(*new AccessibilityObjectAtspi(coreObject));
+    return adoptRef(*new AccessibilityObjectAtspi(coreObject, root));
 }
 
 static inline bool roleIsTextType(AccessibilityRole role)
@@ -112,9 +112,10 @@
     return interfaces;
 }
 
-AccessibilityObjectAtspi::AccessibilityObjectAtspi(AXCoreObject* coreObject)
+AccessibilityObjectAtspi::AccessibilityObjectAtspi(AXCoreObject* coreObject, AccessibilityRootAtspi& root)
     : m_coreObject(coreObject)
     , m_interfaces(interfacesForObject(*m_coreObject))
+    , m_root(root)
 {
     RELEASE_ASSERT(isMainThread());
 }
@@ -137,7 +138,7 @@
     if (!m_isRegistered.load())
         return;
 
-    root()->atspi().unregisterObject(*this);
+    m_root.atspi().unregisterObject(*this);
 }
 
 void AccessibilityObjectAtspi::elementDestroyed()
@@ -150,7 +151,7 @@
     if (m_parent && *m_parent)
         m_parent.value()->childRemoved(*this);
 
-    root()->atspi().unregisterObject(*this);
+    m_root.atspi().unregisterObject(*this);
 }
 
 static unsigned atspiRole(AccessibilityRole role)
@@ -429,12 +430,12 @@
 
             g_dbus_method_invocation_return_value(invocation, g_variant_builder_end(&builder));
         } else if (!g_strcmp0(methodName, "GetApplication"))
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", atspiObject->root()->applicationReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", atspiObject->m_root.applicationReference()));
         else if (!g_strcmp0(methodName, "GetChildAtIndex")) {
             int index;
             g_variant_get(parameters, "(i)", &index);
             auto* wrapper = index >= 0 ? atspiObject->childAt(index) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetChildren")) {
             GVariantBuilder builder = G_VARIANT_BUILDER_INIT(G_VARIANT_TYPE("a(so)"));
             for (const auto& wrapper : atspiObject->children())
@@ -484,8 +485,6 @@
 {
     RELEASE_ASSERT(!isMainThread());
     if (m_path.isNull()) {
-        auto* atspiRoot = root();
-        RELEASE_ASSERT(atspiRoot);
         m_isRegistered.store(true);
 
         Vector<std::pair<GDBusInterfaceInfo*, GDBusInterfaceVTable*>> interfaces;
@@ -513,7 +512,7 @@
             interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_table_interface), &s_tableFunctions });
         if (m_interfaces.contains(Interface::TableCell))
             interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_table_cell_interface), &s_tableCellFunctions });
-        m_path = atspiRoot->atspi().registerObject(*this, WTFMove(interfaces));
+        m_path = m_root.atspi().registerObject(*this, WTFMove(interfaces));
     }
 
     return m_path;
@@ -522,7 +521,7 @@
 GVariant* AccessibilityObjectAtspi::reference()
 {
     RELEASE_ASSERT(!isMainThread());
-    return g_variant_new("(so)", root()->atspi().uniqueName(), path().utf8().data());
+    return g_variant_new("(so)", m_root.atspi().uniqueName(), path().utf8().data());
 }
 
 GVariant* AccessibilityObjectAtspi::hyperlinkReference()
@@ -530,24 +529,12 @@
     RELEASE_ASSERT(!isMainThread());
     if (m_hyperlinkPath.isNull()) {
         path();
-        m_hyperlinkPath = root()->atspi().registerHyperlink(*this, { { const_cast<GDBusInterfaceInfo*>(&webkit_hyperlink_interface), &s_hyperlinkFunctions } });
+        m_hyperlinkPath = m_root.atspi().registerHyperlink(*this, { { const_cast<GDBusInterfaceInfo*>(&webkit_hyperlink_interface), &s_hyperlinkFunctions } });
     }
 
-    return g_variant_new("(so)", root()->atspi().uniqueName(), m_hyperlinkPath.utf8().data());
+    return g_variant_new("(so)", m_root.atspi().uniqueName(), m_hyperlinkPath.utf8().data());
 }
 
-void AccessibilityObjectAtspi::setRoot(AccessibilityRootAtspi* root)
-{
-    Locker locker { m_rootLock };
-    m_root = root;
-}
-
-AccessibilityRootAtspi* AccessibilityObjectAtspi::root() const
-{
-    Locker locker { m_rootLock };
-    return m_root;
-}
-
 void AccessibilityObjectAtspi::setParent(std::optional<AccessibilityObjectAtspi*> atspiParent)
 {
     RELEASE_ASSERT(isMainThread());
@@ -569,10 +556,8 @@
     if (!axParent)
         return nullptr;
 
-    if (auto* atspiParent = axParent->wrapper()) {
-        atspiParent->setRoot(root());
+    if (auto* atspiParent = axParent->wrapper())
         return atspiParent;
-    }
 
     return std::nullopt;
 }
@@ -581,10 +566,10 @@
 {
     auto parentAtspi = parent();
     if (!parentAtspi)
-        return root()->atspi().nullReference();
+        return m_root.atspi().nullReference();
 
     if (!parentAtspi.value())
-        return root()->reference();
+        return m_root.reference();
 
     return parentAtspi.value()->reference();
 }
@@ -608,9 +593,7 @@
     if (index >= children.size())
         return nullptr;
 
-    auto* wrapper = children[index]->wrapper();
-    wrapper->setRoot(root());
-    return wrapper;
+    return children[index]->wrapper();
 }
 
 Vector<RefPtr<AccessibilityObjectAtspi>> AccessibilityObjectAtspi::wrapperVector(const Vector<RefPtr<AXCoreObject>>& elements) const
@@ -617,12 +600,9 @@
 {
     Vector<RefPtr<AccessibilityObjectAtspi>> wrappers;
     wrappers.reserveInitialCapacity(elements.size());
-    auto* root = this->root();
     for (const auto& element : elements) {
-        if (auto* wrapper = element->wrapper()) {
-            wrapper->setRoot(root);
+        if (auto* wrapper = element->wrapper())
             wrappers.uncheckedAppend(wrapper);
-        }
     }
     return wrappers;
 }
@@ -1140,10 +1120,8 @@
 
     for (const auto& it : relationMap) {
         GVariantBuilder arrayBuilder = G_VARIANT_BUILDER_INIT(G_VARIANT_TYPE("a(so)"));
-        for (const auto& atspiObject : it.value) {
-            atspiObject->setRoot(root());
+        for (const auto& atspiObject : it.value)
             g_variant_builder_add(&arrayBuilder, "@(so)", atspiObject->reference());
-        }
         g_variant_builder_add(builder, "(ua(so))", it.key, &arrayBuilder);
     }
 }
@@ -1180,9 +1158,8 @@
 void AccessibilityObjectAtspi::serialize(GVariantBuilder* builder) const
 {
     RELEASE_ASSERT(!isMainThread());
-    auto* atspiRoot = root();
-    g_variant_builder_add(builder, "(so)", atspiRoot->atspi().uniqueName(), m_path.utf8().data());
-    g_variant_builder_add(builder, "(so)", atspiRoot->parentUniqueName().utf8().data(), "/org/a11y/atspi/accessible/root");
+    g_variant_builder_add(builder, "(so)", m_root.atspi().uniqueName(), m_path.utf8().data());
+    g_variant_builder_add(builder, "(so)", m_root.parentUniqueName().utf8().data(), "/org/a11y/atspi/accessible/root");
     g_variant_builder_add(builder, "@(so)", parentReference());
 
     g_variant_builder_add(builder, "i", indexInParent());
@@ -1214,7 +1191,7 @@
     RunLoop::main().dispatch([this, protectedThis = Ref { *this }, child = Ref { child }] {
         if (!m_coreObject)
             return;
-        root()->atspi().childrenChanged(*this, child, AccessibilityAtspi::ChildrenChanged::Added);
+        m_root.atspi().childrenChanged(*this, child, AccessibilityAtspi::ChildrenChanged::Added);
     });
 }
 
@@ -1224,7 +1201,7 @@
     if (!m_isRegistered.load())
         return;
 
-    root()->atspi().childrenChanged(*this, child, AccessibilityAtspi::ChildrenChanged::Removed);
+    m_root.atspi().childrenChanged(*this, child, AccessibilityAtspi::ChildrenChanged::Removed);
 }
 
 void AccessibilityObjectAtspi::stateChanged(const char* name, bool value)
@@ -1233,7 +1210,7 @@
     if (!m_isRegistered.load())
         return;
 
-    root()->atspi().stateChanged(*this, name, value);
+    m_root.atspi().stateChanged(*this, name, value);
 }
 
 unsigned AccessibilityObjectAtspi::role() const

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.h (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.h	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.h	2021-12-09 08:26:34 UTC (rev 286767)
@@ -24,7 +24,6 @@
 #include "AccessibilityObjectInterface.h"
 #include "IntRect.h"
 #include <wtf/Atomics.h>
-#include <wtf/Lock.h>
 #include <wtf/OptionSet.h>
 #include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/text/CString.h>
@@ -39,7 +38,7 @@
 
 class AccessibilityObjectAtspi final : public ThreadSafeRefCounted<AccessibilityObjectAtspi> {
 public:
-    static Ref<AccessibilityObjectAtspi> create(AXCoreObject*);
+    static Ref<AccessibilityObjectAtspi> create(AXCoreObject*, AccessibilityRootAtspi&);
     ~AccessibilityObjectAtspi() = default;
 
     enum class Interface : uint16_t {
@@ -58,8 +57,7 @@
     };
     const OptionSet<Interface>& interfaces() const { return m_interfaces; }
 
-    void setRoot(AccessibilityRootAtspi*);
-    WEBCORE_EXPORT AccessibilityRootAtspi* root() const;
+    const AccessibilityRootAtspi& root() const { return m_root; }
     void setParent(std::optional<AccessibilityObjectAtspi*>);
     WEBCORE_EXPORT std::optional<AccessibilityObjectAtspi*> parent() const;
     WEBCORE_EXPORT void updateBackingStore();
@@ -155,7 +153,7 @@
     WEBCORE_EXPORT std::pair<std::optional<unsigned>, std::optional<unsigned>> cellPosition() const;
 
 private:
-    explicit AccessibilityObjectAtspi(AXCoreObject*);
+    explicit AccessibilityObjectAtspi(AXCoreObject*, AccessibilityRootAtspi&);
 
     Vector<RefPtr<AccessibilityObjectAtspi>> wrapperVector(const Vector<RefPtr<AXCoreObject>>&) const;
     int indexInParent() const;
@@ -236,7 +234,7 @@
     AXCoreObject* m_axObject { nullptr };
     AXCoreObject* m_coreObject { nullptr };
     OptionSet<Interface> m_interfaces;
-    AccessibilityRootAtspi* m_root WTF_GUARDED_BY_LOCK(m_rootLock) { nullptr };
+    AccessibilityRootAtspi& m_root;
     std::optional<AccessibilityObjectAtspi*> m_parent;
     Atomic<bool> m_isRegistered { false };
     String m_path;

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectComponentAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectComponentAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectComponentAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -47,7 +47,7 @@
             uint32_t coordinateType;
             g_variant_get(parameters, "(iiu)", &x, &y, &coordinateType);
             auto* wrapper = atspiObject->hitTest({ x, y }, coordinateType);
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetExtents")) {
             uint32_t coordinateType;
             g_variant_get(parameters, "(u)", &coordinateType);

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -39,7 +39,7 @@
         if (!g_strcmp0(methodName, "GetObject")) {
             int index;
             g_variant_get(parameters, "(i)", &index);
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", !index ? atspiObject->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", !index ? atspiObject->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetURI")) {
             int index;
             g_variant_get(parameters, "(i)", &index);

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectHypertextAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -41,7 +41,7 @@
             int index;
             g_variant_get(parameters, "(i)", &index);
             auto* wrapper = index >= 0 ? atspiObject->hyperlink(index) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->hyperlinkReference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", wrapper ? wrapper->hyperlinkReference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetLinkIndex")) {
             int offset;
             g_variant_get(parameters, "(i)", &offset);
@@ -102,10 +102,8 @@
             if (!wrapper || !wrapper->interfaces().contains(Interface::Hyperlink))
                 continue;
 
-            if (static_cast<unsigned>(++linkIndex) == index) {
-                wrapper->setRoot(root());
+            if (static_cast<unsigned>(++linkIndex) == index)
                 return wrapper;
-            }
         }
 
         return nullptr;

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectSelectionAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -37,7 +37,7 @@
             int index;
             g_variant_get(parameters, "(i)", &index);
             auto* child = index >= 0 ? atspiObject->selectedChild(index) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", child ? child->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", child ? child->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "SelectChild")) {
             int index;
             g_variant_get(parameters, "(i)", &index);
@@ -110,9 +110,6 @@
         return selectedItems[index]->wrapper();
     });
 
-    if (wrapper)
-        wrapper->setRoot(root());
-
     return wrapper;
 }
 
@@ -230,7 +227,7 @@
     if (!m_isRegistered.load())
         return;
 
-    root()->atspi().selectionChanged(*this);
+    m_root.atspi().selectionChanged(*this);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -42,7 +42,7 @@
             int row, column;
             g_variant_get(parameters, "(ii)", &row, &column);
             auto* cell = row >= 0 && column >= 0 ? atspiObject->cell(row, column) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", cell ? cell->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", cell ? cell->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetIndexAt")) {
             int row, column;
             g_variant_get(parameters, "(ii)", &row, &column);
@@ -75,12 +75,12 @@
             int row;
             g_variant_get(parameters, "(i)", &row);
             auto* header = row >= 0 ? atspiObject->rowHeader(row) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", header ? header->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", header ? header->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetColumnHeader")) {
             int column;
             g_variant_get(parameters, "(i)", &column);
             auto* header = column >= 0 ? atspiObject->columnHeader(column) : nullptr;
-            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", header ? header->reference() : atspiObject->root()->atspi().nullReference()));
+            g_dbus_method_invocation_return_value(invocation, g_variant_new("(@(so))", header ? header->reference() : atspiObject->m_root.atspi().nullReference()));
         } else if (!g_strcmp0(methodName, "GetRowColumnExtentsAtIndex")) {
             int index;
             g_variant_get(parameters, "(i)", &index);
@@ -118,10 +118,10 @@
             return g_variant_new_int32(atspiObject->columnCount());
         if (!g_strcmp0(propertyName, "Caption")) {
             auto* caption = atspiObject->tableCaption();
-            return caption ? caption->reference() : atspiObject->root()->atspi().nullReference();
+            return caption ? caption->reference() : atspiObject->m_root.atspi().nullReference();
         }
         if (!g_strcmp0(propertyName, "Summary"))
-            return atspiObject->root()->atspi().nullReference();
+            return atspiObject->m_root.atspi().nullReference();
         if (!g_strcmp0(propertyName, "NSelectedRows"))
             return g_variant_new_int32(0);
         if (!g_strcmp0(propertyName, "NSelectedColumns"))
@@ -160,12 +160,8 @@
     if (!m_axObject)
         return nullptr;
 
-    if (auto* tableCell = m_axObject->cellForColumnAndRow(column, row)) {
-        if (auto* wrapper = tableCell->wrapper()) {
-            wrapper->setRoot(root());
-            return wrapper;
-        }
-    }
+    if (auto* tableCell = m_axObject->cellForColumnAndRow(column, row))
+        return tableCell->wrapper();
 
     return nullptr;
 }
@@ -185,12 +181,8 @@
 
             if (auto caption = downcast<HTMLTableElement>(*node).caption()) {
                 if (auto* renderer = caption->renderer()) {
-                    if (auto* element = AccessibilityObject::firstAccessibleObjectFromNode(renderer->element())) {
-                        if (auto* wrapper = element->wrapper()) {
-                            wrapper->setRoot(root());
-                            return wrapper;
-                        }
-                    }
+                    if (auto* element = AccessibilityObject::firstAccessibleObjectFromNode(renderer->element()))
+                        return element->wrapper();
                 }
             }
         }
@@ -253,10 +245,8 @@
     for (const auto& header : headers) {
         auto range = header->rowIndexRange();
         if (range.first <= row && row < range.first + range.second) {
-            if (auto* wrapper = header->wrapper()) {
-                wrapper->setRoot(root());
+            if (auto* wrapper = header->wrapper())
                 return wrapper;
-            }
         }
     }
 
@@ -273,10 +263,8 @@
     for (const auto& header : headers) {
         auto range = header->columnIndexRange();
         if (range.first <= column && column < range.first + range.second) {
-            if (auto* wrapper = header->wrapper()) {
-                wrapper->setRoot(root());
+            if (auto* wrapper = header->wrapper())
                 return wrapper;
-            }
         }
     }
 

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTableCellAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -67,7 +67,7 @@
         if (!g_strcmp0(propertyName, "Table")) {
             auto* axObject = atspiObject->m_axObject;
             if (!axObject || !axObject->isTableCell())
-                return atspiObject->root()->atspi().nullReference();
+                return atspiObject->m_root.atspi().nullReference();
 
             AccessibilityObjectAtspi* wrapper = atspiObject.ptr();
             while (auto parent = wrapper->parent()) {
@@ -80,7 +80,7 @@
                 if (axObject && axObject->isTable())
                     break;
             }
-            return wrapper ? wrapper->reference() : atspiObject->root()->atspi().nullReference();
+            return wrapper ? wrapper->reference() : atspiObject->m_root.atspi().nullReference();
         }
 
         g_set_error(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Unknown property '%s'", propertyName);
@@ -102,17 +102,7 @@
     if (role() != Atspi::Role::TableCell)
         return { };
 
-    auto headers = m_axObject->rowHeaders();
-    Vector<RefPtr<AccessibilityObjectAtspi>> wrappers;
-    wrappers.reserveInitialCapacity(headers.size());
-    auto* root = this->root();
-    for (const auto& header : headers) {
-        if (auto* wrapper = header->wrapper()) {
-            wrapper->setRoot(root);
-            wrappers.uncheckedAppend(wrapper);
-        }
-    }
-    return wrappers;
+    return wrapperVector(m_axObject->rowHeaders());
 }
 
 Vector<RefPtr<AccessibilityObjectAtspi>> AccessibilityObjectAtspi::cellColumnHeaders() const
@@ -125,17 +115,7 @@
     if (role() != Atspi::Role::TableCell)
         return { };
 
-    auto headers = m_axObject->columnHeaders();
-    Vector<RefPtr<AccessibilityObjectAtspi>> wrappers;
-    wrappers.reserveInitialCapacity(headers.size());
-    auto* root = this->root();
-    for (const auto& header : headers) {
-        if (auto* wrapper = header->wrapper()) {
-            wrapper->setRoot(root);
-            wrappers.uncheckedAppend(wrapper);
-        }
-    }
-    return wrappers;
+    return wrapperVector(m_axObject->columnHeaders());
 }
 
 unsigned AccessibilityObjectAtspi::rowSpan() const

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectTextAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -361,7 +361,7 @@
     auto offset = UTF16OffsetToUTF8(mapping, utf16Offset);
     auto utf8InsertedText = insertedText.utf8();
     auto insertedTextLength = g_utf8_strlen(utf8InsertedText.data(), -1);
-    root()->atspi().textChanged(*this, "insert", WTFMove(utf8InsertedText), offset - insertedTextLength, insertedTextLength);
+    m_root.atspi().textChanged(*this, "insert", WTFMove(utf8InsertedText), offset - insertedTextLength, insertedTextLength);
 }
 
 void AccessibilityObjectAtspi::textDeleted(const String& deletedText, const VisiblePosition& position)
@@ -380,7 +380,7 @@
     auto offset = UTF16OffsetToUTF8(mapping, utf16Offset);
     auto utf8DeletedText = deletedText.utf8();
     auto deletedTextLength = g_utf8_strlen(utf8DeletedText.data(), -1);
-    root()->atspi().textChanged(*this, "delete", WTFMove(utf8DeletedText), offset, deletedTextLength);
+    m_root.atspi().textChanged(*this, "delete", WTFMove(utf8DeletedText), offset, deletedTextLength);
 }
 
 IntPoint AccessibilityObjectAtspi::boundaryOffset(unsigned utf16Offset, TextGranularity granularity) const
@@ -773,10 +773,10 @@
     auto mapping = offsetMapping(utf16Text);
     auto caretOffset = UTF16OffsetToUTF8(mapping, bounds.y());
     if (caretOffset <= length)
-        root()->atspi().textCaretMoved(*this, caretOffset);
+        m_root.atspi().textCaretMoved(*this, caretOffset);
 
     if (selection.isRange())
-        root()->atspi().textSelectionChanged(*this);
+        m_root.atspi().textSelectionChanged(*this);
 }
 
 AccessibilityObjectAtspi::TextAttributes AccessibilityObjectAtspi::textAttributes(std::optional<unsigned> utf16Offset, bool includeDefault) const
@@ -949,7 +949,7 @@
     if (!m_interfaces.contains(Interface::Text))
         return;
 
-    root()->atspi().textAttributesChanged(*this);
+    m_root.atspi().textAttributesChanged(*this);
 }
 
 bool AccessibilityObjectAtspi::scrollToMakeVisible(int startOffset, int endOffset, uint32_t scrollType) const

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectValueAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectValueAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectValueAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -137,7 +137,7 @@
     if (!m_isRegistered.load())
         return;
 
-    root()->atspi().valueChanged(*this, value);
+    m_root.atspi().valueChanged(*this, value);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.cpp (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -157,6 +157,9 @@
 void AccessibilityRootAtspi::registerObject(CompletionHandler<void(const String&)>&& completionHandler)
 {
     RELEASE_ASSERT(isMainThread());
+    if (m_page)
+        m_page->setAccessibilityRootObject(this);
+
     Vector<std::pair<GDBusInterfaceInfo*, GDBusInterfaceVTable*>> interfaces;
     interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_accessible_interface), &s_accessibleFunctions });
     interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_component_interface), &s_componentFunctions });
@@ -167,6 +170,9 @@
 {
     RELEASE_ASSERT(isMainThread());
     m_atspi.unregisterRoot(*this);
+
+    if (m_page)
+        m_page->setAccessibilityRootObject(nullptr);
 }
 
 void AccessibilityRootAtspi::setPath(String&& path)
@@ -198,9 +204,6 @@
 AccessibilityObjectAtspi* AccessibilityRootAtspi::child() const
 {
     RELEASE_ASSERT(isMainThread());
-    if (!AXObjectCache::accessibilityEnabled())
-        AXObjectCache::enableAccessibility();
-
     if (!m_page)
         return nullptr;
 
@@ -208,54 +211,15 @@
     if (!frame.document())
         return nullptr;
 
+    AXObjectCache::enableAccessibility();
     AXObjectCache* cache = frame.document()->axObjectCache();
     if (!cache)
         return nullptr;
 
     AXCoreObject* rootObject = cache->rootObject();
-    if (!rootObject)
-        return nullptr;
-
-    auto* wrapper = rootObject->wrapper();
-    if (!wrapper)
-        return nullptr;
-
-    wrapper->setRoot(const_cast<AccessibilityRootAtspi*>(this));
-    wrapper->setParent(nullptr); // nullptr parent means root.
-
-    return wrapper;
+    return rootObject ? rootObject->wrapper() : nullptr;
 }
 
-AccessibilityObjectAtspi* AccessibilityRootAtspi::focusedObject() const
-{
-    RELEASE_ASSERT(isMainThread());
-    if (!AXObjectCache::accessibilityEnabled())
-        AXObjectCache::enableAccessibility();
-
-    if (!m_page)
-        return nullptr;
-
-    auto* focusedDocument = m_page->focusController().focusedOrMainFrame().document();
-    if (!focusedDocument)
-        return nullptr;
-
-    auto* cache = focusedDocument->axObjectCache();
-    if (!cache)
-        return nullptr;
-
-    auto* focusedObject = cache->focusedObjectForPage(m_page.get());
-    if (!focusedObject)
-        return nullptr;
-
-    auto* wrapper = focusedObject->wrapper();
-    if (!wrapper)
-        return nullptr;
-
-    wrapper->setRoot(const_cast<AccessibilityRootAtspi*>(this));
-
-    return wrapper;
-}
-
 void AccessibilityRootAtspi::serialize(GVariantBuilder* builder) const
 {
     RELEASE_ASSERT(!isMainThread());

Modified: trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.h (286766 => 286767)


--- trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.h	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/accessibility/atspi/AccessibilityRootAtspi.h	2021-12-09 08:26:34 UTC (rev 286767)
@@ -49,7 +49,6 @@
     GVariant* applicationReference() const;
     AccessibilityAtspi& atspi() const { return m_atspi; }
     AccessibilityObjectAtspi* child() const;
-    AccessibilityObjectAtspi* focusedObject() const;
 
     void serialize(GVariantBuilder*) const;
 

Modified: trunk/Source/WebCore/page/Page.h (286766 => 286767)


--- trunk/Source/WebCore/page/Page.h	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebCore/page/Page.h	2021-12-09 08:26:34 UTC (rev 286767)
@@ -91,6 +91,7 @@
 class IDBConnectionToServer;
 }
 
+class AccessibilityRootAtspi;
 class ApplePayAMSUIPaymentHandler;
 class ActivityStateChangeObserver;
 class AlternativeTextClient;
@@ -916,6 +917,11 @@
 
     ModelPlayerProvider& modelPlayerProvider();
 
+#if ENABLE(ACCESSIBILITY) && USE(ATSPI)
+    AccessibilityRootAtspi* accessibilityRootObject() const { return m_accessibilityRootObject; }
+    void setAccessibilityRootObject(AccessibilityRootAtspi* rootObject) { m_accessibilityRootObject = rootObject; }
+#endif
+
 private:
     struct Navigation {
         RegistrableDomain domain;
@@ -1263,6 +1269,10 @@
     using CachedTextRecognitionResult = std::pair<TextRecognitionResult, IntRect>;
     WeakHashMap<HTMLElement, CachedTextRecognitionResult> m_textRecognitionResults;
 #endif
+
+#if ENABLE(ACCESSIBILITY) && USE(ATSPI)
+    AccessibilityRootAtspi* m_accessibilityRootObject { nullptr };
+#endif
 };
 
 inline PageGroup& Page::group()

Modified: trunk/Source/WebKit/ChangeLog (286766 => 286767)


--- trunk/Source/WebKit/ChangeLog	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebKit/ChangeLog	2021-12-09 08:26:34 UTC (rev 286767)
@@ -1,3 +1,16 @@
+2021-12-09  Carlos Garcia Campos  <[email protected]>
+
+        [GTK][a11y] Ensure atspi wrappers have root set at construction time
+        https://bugs.webkit.org/show_bug.cgi?id=233804
+
+        Reviewed by Joanmarie Diggs.
+
+        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
+        (WKAccessibilityRootObject): Remove ATSPI specific code.
+        (WKAccessibilityFocusedObject): Ditto.
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::accessibilityRootObject const): Deleted.
+
 2021-12-08  Brady Eidson  <[email protected]>
 
         Add ability to inject messages into webpushd

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp (286766 => 286767)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -247,10 +247,6 @@
     if (!pageRef)
         return 0;
 
-#if USE(ATSPI)
-    return WebKit::toImpl(pageRef)->accessibilityRootObject().child();
-#endif
-
     WebCore::Page* page = WebKit::toImpl(pageRef)->corePage();
     if (!page)
         return 0;
@@ -278,10 +274,6 @@
     if (!pageRef)
         return 0;
 
-#if USE(ATSPI)
-    return WebKit::toImpl(pageRef)->accessibilityRootObject().focusedObject();
-#endif
-
     WebCore::Page* page = WebKit::toImpl(pageRef)->corePage();
     if (!page)
         return 0;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (286766 => 286767)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-12-09 08:26:34 UTC (rev 286767)
@@ -1497,10 +1497,6 @@
 
     void prepareToRunModalJavaScriptDialog();
 
-#if USE(ATSPI)
-    const WebCore::AccessibilityRootAtspi& accessibilityRootObject() const { return *m_accessibilityRootObject; }
-#endif
-
 #if ENABLE(ARKIT_INLINE_PREVIEW)
     bool useARKitForModel() const { return m_useARKitForModel; };
 #endif

Modified: trunk/Tools/ChangeLog (286766 => 286767)


--- trunk/Tools/ChangeLog	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Tools/ChangeLog	2021-12-09 08:26:34 UTC (rev 286767)
@@ -1,3 +1,13 @@
+2021-12-09  Carlos Garcia Campos  <[email protected]>
+
+        [GTK][a11y] Ensure atspi wrappers have root set at construction time
+        https://bugs.webkit.org/show_bug.cgi?id=233804
+
+        Reviewed by Joanmarie Diggs.
+
+        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp:
+        (WTR::AccessibilityController::axRunLoop):
+
 2021-12-08  Brady Eidson  <[email protected]>
 
         Add ability to inject messages into webpushd

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp (286766 => 286767)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp	2021-12-09 07:09:19 UTC (rev 286766)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityControllerAtspi.cpp	2021-12-09 08:26:34 UTC (rev 286767)
@@ -123,7 +123,7 @@
         WKBundlePageRef page = InjectedBundle::singleton().page()->page();
         auto* element = static_cast<WebCore::AccessibilityObjectAtspi*>(WKAccessibilityRootObject(page));
         RELEASE_ASSERT(element);
-        m_axRunLoop = &element->root()->atspi().runLoop();
+        m_axRunLoop = &element->root().atspi().runLoop();
     }
 
     return *m_axRunLoop;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to