Title: [284529] trunk/Source/WebCore
Revision
284529
Author
carlo...@webkit.org
Date
2021-10-20 06:34:05 -0700 (Wed, 20 Oct 2021)

Log Message

AX: Build with isolated tree enable is broken since r284075
https://bugs.webkit.org/show_bug.cgi?id=231667
<rdar://problem/84191590>

Reviewed by Andres Gonzalez.

The problem seems to be that AXPropertyValueVariant contains the same type twice (in 64 bit systems) AXID
(size_t -> long unsigned int) and uint64_t -> long unsigned int. That's actually allowed but makes the access
ambiguous. Since uint64_t is only used for SessionID, we can explicitly use SessionID instead.

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::sessionID const):
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityObjectInterface.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeAttributeData):
(WebCore::AXIsolatedObject::sessionID const):
(WebCore::AXIsolatedObject::sessionIDAttributeValue const):
* accessibility/isolatedtree/AXIsolatedObject.h:
* accessibility/isolatedtree/AXIsolatedTree.h:
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (284528 => 284529)


--- trunk/Source/WebCore/ChangeLog	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/ChangeLog	2021-10-20 13:34:05 UTC (rev 284529)
@@ -1,3 +1,28 @@
+2021-10-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        AX: Build with isolated tree enable is broken since r284075
+        https://bugs.webkit.org/show_bug.cgi?id=231667
+        <rdar://problem/84191590>
+
+        Reviewed by Andres Gonzalez.
+
+        The problem seems to be that AXPropertyValueVariant contains the same type twice (in 64 bit systems) AXID
+        (size_t -> long unsigned int) and uint64_t -> long unsigned int. That's actually allowed but makes the access
+        ambiguous. Since uint64_t is only used for SessionID, we can explicitly use SessionID instead.
+
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::sessionID const):
+        * accessibility/AccessibilityObject.h:
+        * accessibility/AccessibilityObjectInterface.h:
+        * accessibility/isolatedtree/AXIsolatedObject.cpp:
+        (WebCore::AXIsolatedObject::initializeAttributeData):
+        (WebCore::AXIsolatedObject::sessionID const):
+        (WebCore::AXIsolatedObject::sessionIDAttributeValue const):
+        * accessibility/isolatedtree/AXIsolatedObject.h:
+        * accessibility/isolatedtree/AXIsolatedTree.h:
+        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
 2021-10-20  Youenn Fablet  <you...@apple.com>
 
         Add support for requestVideoFrameCallback API and MediaStreamTrack-based backend support

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (284528 => 284529)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2021-10-20 13:34:05 UTC (rev 284529)
@@ -84,6 +84,7 @@
 #include "TextIterator.h"
 #include "UserGestureIndicator.h"
 #include "VisibleUnits.h"
+#include <pal/SessionID.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/RobinHoodHashSet.h>
 #include <wtf/StdLibExtras.h>
@@ -3469,13 +3470,13 @@
     return String();
 }
 
-uint64_t AccessibilityObject::sessionID() const
+PAL::SessionID AccessibilityObject::sessionID() const
 {
     if (auto* document = topDocument()) {
         if (auto* page = document->page())
-            return page->sessionID().toUInt64();
+            return page->sessionID();
     }
-    return 0;
+    return PAL::SessionID(PAL::SessionID::SessionConstants::HashTableEmptyValueID);
 }
 
 String AccessibilityObject::tagName() const

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (284528 => 284529)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2021-10-20 13:34:05 UTC (rev 284529)
@@ -761,7 +761,7 @@
     void clearIsIgnoredFromParentData() override { m_isIgnoredFromParentData = { }; }
     void setIsIgnoredFromParentDataForChild(AXCoreObject*) override;
 
-    uint64_t sessionID() const override;
+    PAL::SessionID sessionID() const override;
     String documentURI() const override;
     String documentEncoding() const override;
     AccessibilityChildrenVector documentLinks() override { return AccessibilityChildrenVector(); }

Modified: trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h (284528 => 284529)


--- trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h	2021-10-20 13:34:05 UTC (rev 284529)
@@ -66,6 +66,10 @@
 class AccessibilityObjectWrapper;
 #endif
 
+namespace PAL {
+class SessionID;
+}
+
 namespace WTF {
 class TextStream;
 }
@@ -1503,7 +1507,7 @@
     virtual void clearIsIgnoredFromParentData() = 0;
     virtual void setIsIgnoredFromParentDataForChild(AXCoreObject*) = 0;
     
-    virtual uint64_t sessionID() const = 0;
+    virtual PAL::SessionID sessionID() const = 0;
     virtual String documentURI() const = 0;
     virtual String documentEncoding() const = 0;
     virtual AccessibilityChildrenVector documentLinks() = 0;

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp (284528 => 284529)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp	2021-10-20 13:34:05 UTC (rev 284529)
@@ -30,6 +30,7 @@
 
 #include "AXIsolatedTree.h"
 #include "AXLogger.h"
+#include <pal/SessionID.h>
 
 #if PLATFORM(COCOA)
 #include <pal/spi/cocoa/AccessibilitySupportSoftLink.h>
@@ -412,7 +413,7 @@
 
     if (isRoot) {
         setObjectProperty(AXPropertyName::WebArea, object.webAreaObject());
-        setProperty(AXPropertyName::SessionID, object.sessionID());
+        setProperty(AXPropertyName::SessionID, object.sessionID().isolatedCopy());
         setProperty(AXPropertyName::DocumentURI, object.documentURI().isolatedCopy());
         setProperty(AXPropertyName::DocumentEncoding, object.documentEncoding().isolatedCopy());
         setObjectVectorProperty(AXPropertyName::DocumentLinks, object.documentLinks());
@@ -610,11 +611,11 @@
     list.appendVector(classList.split(" "));
 }
 
-uint64_t AXIsolatedObject::sessionID() const
+PAL::SessionID AXIsolatedObject::sessionID() const
 {
     if (auto root = tree()->rootNode())
-        return root->uint64AttributeValue(AXPropertyName::SessionID);
-    return 0;
+        return root->sessionIDAttributeValue(AXPropertyName::SessionID);
+    return PAL::SessionID(PAL::SessionID::SessionConstants::HashTableEmptyValueID);
 }
 
 String AXIsolatedObject::documentURI() const
@@ -826,6 +827,15 @@
     return tree()->nodeForID(nodeID).get();
 }
 
+PAL::SessionID AXIsolatedObject::sessionIDAttributeValue(AXPropertyName propertyName) const
+{
+    auto value = m_propertyMap.get(propertyName);
+    return WTF::switchOn(value,
+        [] (PAL::SessionID& typedValue) -> PAL::SessionID { return typedValue; },
+        [] (auto&) { return PAL::SessionID(PAL::SessionID::SessionConstants::HashTableEmptyValueID); }
+    );
+}
+
 template<typename T>
 T AXIsolatedObject::rectAttributeValue(AXPropertyName propertyName) const
 {

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h (284528 => 284529)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h	2021-10-20 13:34:05 UTC (rev 284529)
@@ -86,6 +86,7 @@
     double doubleAttributeValue(AXPropertyName) const;
     float floatAttributeValue(AXPropertyName) const;
     AXCoreObject* objectAttributeValue(AXPropertyName) const;
+    PAL::SessionID sessionIDAttributeValue(AXPropertyName) const;
     IntPoint intPointAttributeValue(AXPropertyName) const;
     Color colorAttributeValue(AXPropertyName) const;
     URL urlAttributeValue(AXPropertyName) const;
@@ -376,7 +377,7 @@
     void findMatchingObjects(AccessibilitySearchCriteria*, AccessibilityChildrenVector&) override;
 
     // Attributes retrieved from the root node only so that the data isn't duplicated on each node.
-    uint64_t sessionID() const override;
+    PAL::SessionID sessionID() const override;
     String documentURI() const override;
     String documentEncoding() const override;
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h (284528 => 284529)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h	2021-10-20 13:34:05 UTC (rev 284529)
@@ -29,6 +29,7 @@
 
 #include "AccessibilityObjectInterface.h"
 #include "PageIdentifier.h"
+#include <pal/SessionID.h>
 #include <wtf/HashMap.h>
 #include <wtf/Lock.h>
 #include <wtf/RefPtr.h>
@@ -317,7 +318,7 @@
     WebArea,
 };
 
-using AXPropertyValueVariant = std::variant<std::nullptr_t, String, bool, int, unsigned, double, float, uint64_t, Color, URL, LayoutRect, FloatRect, AXID, IntPoint, OptionSet<SpeakAs>, std::pair<unsigned, unsigned>, Vector<AccessibilityText>, Vector<AXID>, Vector<std::pair<AXID, AXID>>, Vector<String>, Path>;
+using AXPropertyValueVariant = std::variant<std::nullptr_t, String, bool, int, unsigned, double, float, uint64_t, Color, URL, LayoutRect, FloatRect, PAL::SessionID, IntPoint, OptionSet<SpeakAs>, std::pair<unsigned, unsigned>, Vector<AccessibilityText>, Vector<AXID>, Vector<std::pair<AXID, AXID>>, Vector<String>, Path>;
 using AXPropertyMap = HashMap<AXPropertyName, AXPropertyValueVariant, WTF::IntHash<AXPropertyName>, WTF::StrongEnumHashTraits<AXPropertyName>>;
 
 struct AXPropertyChange {

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (284528 => 284529)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2021-10-20 13:26:22 UTC (rev 284528)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm	2021-10-20 13:34:05 UTC (rev 284529)
@@ -78,6 +78,7 @@
 #import "TextIterator.h"
 #import "VisibleUnits.h"
 #import "WebCoreFrameView.h"
+#import <pal/SessionID.h>
 #import <pal/spi/cocoa/NSAccessibilitySPI.h>
 #import <wtf/cocoa/TypeCastsCocoa.h>
 #import <wtf/cocoa/VectorCocoa.h>
@@ -2239,7 +2240,7 @@
         if ([attributeName isEqualToString:NSAccessibilityCaretBrowsingEnabledAttribute])
             return [NSNumber numberWithBool:backingObject->caretBrowsingEnabled()];
         if ([attributeName isEqualToString:NSAccessibilityWebSessionIDAttribute])
-            return @(backingObject->sessionID());
+            return @(backingObject->sessionID().toUInt64());
     }
 
     if (backingObject->isTextControl()) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to