Reviewed by Maciej.
authorharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2006 20:06:43 +0000 (20:06 +0000)
committerharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2006 20:06:43 +0000 (20:06 +0000)
        <rdar://problem/4527201> REGRESSION: AXTextMarkerRangeForUnorderedTextMarkers returns out of order range

        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * bridge/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::visiblePositionForTextMarker):
        Validate the marker by comparing the node and offset to those of the resulting VisiblePosition.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15927 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bridge/mac/AXObjectCacheMac.mm

index 7a1bdf4b07b84aa6cfcf62f13d79f65180b3faeb..d3697a6c3945a62c5868a9217dc7b32484f4e4d0 100644 (file)
@@ -1,3 +1,17 @@
+2006-08-17  David Harrison  <harrison@apple.com>
+
+        Reviewed by Maciej.
+
+        <rdar://problem/4527201> REGRESSION: AXTextMarkerRangeForUnorderedTextMarkers returns out of order range
+
+        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
+        is not possible.  See following bug...
+            <rdar://problem/4256882> Need automated testing support for accessibility APIs
+
+        * bridge/mac/AXObjectCacheMac.mm:
+        (WebCore::AXObjectCache::visiblePositionForTextMarker):
+        Validate the marker by comparing the node and offset to those of the resulting VisiblePosition.
+
 2006-08-17  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Anders.
index ddcb645adbfb5dc7bdecdeaa93768651845fd5e1..8e53fd0705cd7c51643df58c4fc46e652ba79d46 100644 (file)
@@ -148,8 +148,15 @@ VisiblePosition AXObjectCache::visiblePositionForTextMarker(WebCoreTextMarker* t
     if (!m_idsInUse.contains(textMarkerData.axID))
         return VisiblePosition();
 
-    // return the position from the data we stored earlier
-    return VisiblePosition(textMarkerData.node, textMarkerData.offset, textMarkerData.affinity);
+    // generate a VisiblePosition from the data we stored earlier
+    VisiblePosition visiblePos = VisiblePosition(textMarkerData.node, textMarkerData.offset, textMarkerData.affinity);
+
+    // make sure the node and offset still match (catches stale markers). affinity is not critical for this.
+    Position deepPos = visiblePos.deepEquivalent();
+    if (deepPos.node() != textMarkerData.node || deepPos.offset() != textMarkerData.offset)
+        return VisiblePosition();
+    
+    return visiblePos;
 }
 
 void AXObjectCache::childrenChanged(RenderObject* renderer)