haikuwebkit/LayoutTests/accessibility/text-marker/text-marker-previous-next.html

225 lines
11 KiB
HTML
Raw Permalink Normal View History

AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
2016-04-29 20:05:07 +00:00
<meta charset="UTF-16">
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
</head>
<style>
.userselect { user-select: none; -webkit-user-select: none; }
</style>
<body id="body">
<div id="text" tabindex="0">text</div>
<br>
text1
<div id="text2">
c <img src="#" aria-label="blah" style="background-color: #aaaaaa; width: 100px; height: 100px;"> d
</div>
<input type="password" id="psw">
<div class="userselect" id="text3">can't select</div>
AX: Implement paragraph related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=154098 <rdar://problem/24269675> Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement paragraph related text marker calls. Reused logic from VisibleUnits class. And refactored textMarkerForCharacterOffset method to get better performance. Also fixed an issue where we can't navigate through a text node with line breaks in it using next/previousCharacterOffset call. Test: accessibility/mac/text-marker-paragraph-nav.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::startWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfParagraph): (WebCore::AXObjectCache::endCharacterOffsetOfParagraph): (WebCore::AXObjectCache::paragraphForCharacterOffset): (WebCore::AXObjectCache::nextParagraphEndCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::rootAXEditableElement): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::CharacterOffset::isEqual): (WebCore::AXObjectCache::isNodeInUse): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (startOrEndTextmarkerForRange): (nextTextMarkerForCharacterOffset): (previousTextMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper nextTextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper textMarkerForCharacterOffset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): Deleted. (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): Deleted. (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:ignoreStart:]): Deleted. (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): Deleted. * editing/VisibleUnits.cpp: (WebCore::nextSentencePosition): (WebCore::findStartOfParagraph): (WebCore::findEndOfParagraph): (WebCore::startOfParagraph): (WebCore::endOfParagraph): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (nextWordEndTextMarkerForTextMarkerCallback): (paragraphTextMarkerRangeForTextMarkerCallback): (previousParagraphStartTextMarkerForTextMarkerCallback): (nextParagraphEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-paragraph-nav-expected.txt: Added. * accessibility/mac/text-marker-paragraph-nav.html: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172322@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196546 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-13 05:24:24 +00:00
<div id="text4">
abc
de
f
</div>
2016-04-29 20:05:07 +00:00
<p id="text5">😃😏<p>
<p id="text6">a b</p>
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
<p id="description"></p>
<div id="console"></div>
<script>
description("This tests the next/previous text marker functions are implemented correctly.");
if (window.accessibilityController) {
var text = accessibilityController.accessibleElementById("text");
// Get the actual text node.
text = text.childAtIndex(0);
// Check that we can get the start/end marker for this range.
var textMarkerRange = text.textMarkerRangeForElement(text);
shouldBe("text.textMarkerRangeLength(textMarkerRange)", "4");
var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
var endMarker = text.endTextMarkerForTextMarkerRange(textMarkerRange);
shouldBeTrue("text.accessibilityElementForTextMarker(startMarker).isEqual(text)");
shouldBeTrue("text.accessibilityElementForTextMarker(endMarker).isEqual(text)");
// Check next text marker. (Advance 5 characters, it will land at <br>.)
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
var currentMarker, previousMarker, markerRange;;
var result = forward(5, previousMarker, startMarker, text);
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
AX: Implement word related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153939 <rdar://problem/24269605> Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement word related text marker calls. Reused logic from previousBoundary and nextBoundary in VisibleUnits class. Test: accessibility/mac/text-marker-word-nav.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::isReplacedNodeOrBR): (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::setRangeStartOrEndWithCharacterOffset): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::startWordBoundary): (WebCore::endWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::nextWordEndCharacterOffset): (WebCore::AXObjectCache::leftWordRange): (WebCore::AXObjectCache::rightWordRange): (WebCore::characterForCharacterOffset): (WebCore::AXObjectCache::characterAfter): (WebCore::AXObjectCache::characterBefore): (WebCore::parentEditingBoundary): (WebCore::AXObjectCache::nextWordBoundary): (WebCore::AXObjectCache::previousWordBoundary): (WebCore::AXObjectCache::rootAXEditableElement): * accessibility/AXObjectCache.h: (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:ignoreStart:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): * editing/VisibleUnits.cpp: (WebCore::rightWordPosition): (WebCore::prepend): (WebCore::appendRepeatedCharacter): (WebCore::suffixLengthForRange): (WebCore::prefixLengthForRange): (WebCore::backwardSearchForBoundaryWithTextIterator): (WebCore::forwardSearchForBoundaryWithTextIterator): (WebCore::previousBoundary): (WebCore::nextBoundary): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (endTextMarkerCallback): (leftWordTextMarkerRangeForTextMarkerCallback): (rightWordTextMarkerRangeForTextMarkerCallback): (previousWordStartTextMarkerForTextMarkerCallback): (nextWordEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::setBoolAttributeValue): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::endTextMarker): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::endTextMarker): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: Added. * accessibility/mac/text-marker-word-nav.html: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172166@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196352 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-10 02:33:04 +00:00
var newline = '\n';
shouldBe("text.stringForTextMarkerRange(markerRange)", "newline");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
// Advance one more characters, it will lande at "t" in "text1".
result = forward(1, previousMarker, currentMarker, text);
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
shouldBe("text.stringForTextMarkerRange(markerRange)", "'t'");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
// Check previous text marker. (Traverse backwards one character, it will land at <br>.)
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
result = backwards(1, previousMarker, currentMarker, text);
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
AX: Implement word related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153939 <rdar://problem/24269605> Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement word related text marker calls. Reused logic from previousBoundary and nextBoundary in VisibleUnits class. Test: accessibility/mac/text-marker-word-nav.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::isReplacedNodeOrBR): (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::setRangeStartOrEndWithCharacterOffset): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::startWordBoundary): (WebCore::endWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::nextWordEndCharacterOffset): (WebCore::AXObjectCache::leftWordRange): (WebCore::AXObjectCache::rightWordRange): (WebCore::characterForCharacterOffset): (WebCore::AXObjectCache::characterAfter): (WebCore::AXObjectCache::characterBefore): (WebCore::parentEditingBoundary): (WebCore::AXObjectCache::nextWordBoundary): (WebCore::AXObjectCache::previousWordBoundary): (WebCore::AXObjectCache::rootAXEditableElement): * accessibility/AXObjectCache.h: (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:ignoreStart:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): * editing/VisibleUnits.cpp: (WebCore::rightWordPosition): (WebCore::prepend): (WebCore::appendRepeatedCharacter): (WebCore::suffixLengthForRange): (WebCore::prefixLengthForRange): (WebCore::backwardSearchForBoundaryWithTextIterator): (WebCore::forwardSearchForBoundaryWithTextIterator): (WebCore::previousBoundary): (WebCore::nextBoundary): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (endTextMarkerCallback): (leftWordTextMarkerRangeForTextMarkerCallback): (rightWordTextMarkerRangeForTextMarkerCallback): (previousWordStartTextMarkerForTextMarkerCallback): (nextWordEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::setBoolAttributeValue): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::endTextMarker): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::endTextMarker): (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: Added. * accessibility/mac/text-marker-word-nav.html: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172166@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196352 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-10 02:33:04 +00:00
shouldBe("text.stringForTextMarkerRange(markerRange)", "newline");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
2016-04-29 20:05:07 +00:00
// Traverse backwards one more character, it will land at the last character of "text".
result = backwards(1, previousMarker, currentMarker, text);
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
shouldBe("text.stringForTextMarkerRange(markerRange)", "'t'");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
// Check the case with replaced node
var text2 = accessibilityController.accessibleElementById("text2");
var textMarkerRange2 = text2.textMarkerRangeForElement(text2);
shouldBe("text2.textMarkerRangeLength(textMarkerRange2)", "5");
var str = text2.stringForTextMarkerRange(textMarkerRange2).replace(String.fromCharCode(65532), "[ATTACHMENT]");
debug("Object string for range: " + str);
currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
// Advance 5 characters, it will land at "d".
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
result = forward(5, previousMarker, currentMarker, text2);
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text2.textMarkerRangeForMarkers(previousMarker, currentMarker);
shouldBe("text2.stringForTextMarkerRange(markerRange)", "'d'");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
2016-04-29 20:05:07 +00:00
// Traverse backwards 6 characters, it will land at the last character of "text1".
result = backwards(6, previousMarker, currentMarker, text2);
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
previousMarker = result.previous;
currentMarker = result.current;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text2.textMarkerRangeForMarkers(previousMarker, currentMarker);
shouldBe("text2.stringForTextMarkerRange(markerRange)", "'1'");
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
// Check the case with user-select:none, nextTextMarker/previousTextMarker should still work.
var text3 = accessibilityController.accessibleElementById("text3");
text3 = text3.childAtIndex(0);
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
// Advance to land at user-select:none node.
var marker1, marker2;
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
for (var i = 0; i < 18; i++) {
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
currentMarker = text3.nextTextMarker(currentMarker);
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
// i == 14, it should land on "e", and i == 17, it should land on "t"
if (i == 14) {
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
marker1 = currentMarker;
}
}
marker2 = currentMarker;
AX: [IOS] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=153292 <rdar://problem/24268243> Reviewed by Chris Fleizach. Source/WebCore: Added support for the refactored next/previous text marker functions on iOS. And made text marker tests working on iOS. Also, fixed an issue in AXObjectCache where creating a range with a replaced node at the start or end might exclude that node. Tests: accessibility/text-marker/text-marker-previous-next.html accessibility/text-marker/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::characterOffsetsInOrder): (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]): (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): (-[WebAccessibilityTextMarker dataRepresentation]): (-[WebAccessibilityTextMarker visiblePosition]): (-[WebAccessibilityTextMarker characterOffset]): (-[WebAccessibilityTextMarker isIgnored]): (-[WebAccessibilityTextMarker accessibilityObject]): (-[WebAccessibilityTextMarker description]): (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): (blockquoteLevel): (-[WebAccessibilityObjectWrapper textMarkerRange]): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (-[WebAccessibilityObjectWrapper nextMarkerForMarker:]): (-[WebAccessibilityObjectWrapper previousMarkerForMarker:]): (-[WebAccessibilityObjectWrapper textMarkerForPoint:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]): (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): (-[WebAccessibilityObjectWrapper accessibilityIdentifier]): Tools: Made text marker tests available on iOS. * DumpRenderTree/AccessibilityTextMarker.h: * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added. (AccessibilityTextMarker::AccessibilityTextMarker): (AccessibilityTextMarker::~AccessibilityTextMarker): (AccessibilityTextMarker::isEqual): (AccessibilityTextMarker::platformTextMarker): (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange): (AccessibilityTextMarkerRange::isEqual): (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::pathDescription): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::textMarkerRangeForElement): (AccessibilityUIElement::selectedTextMarkerRange): (AccessibilityUIElement::resetSelectedTextMarkerRange): (AccessibilityUIElement::textMarkerRangeLength): (AccessibilityUIElement::textMarkerRangeForMarkers): (AccessibilityUIElement::startTextMarkerForTextMarkerRange): (AccessibilityUIElement::endTextMarkerForTextMarkerRange): (AccessibilityUIElement::accessibilityElementForTextMarker): (AccessibilityUIElement::endTextMarkerForBounds): (AccessibilityUIElement::startTextMarkerForBounds): (AccessibilityUIElement::textMarkerForPoint): (AccessibilityUIElement::previousTextMarker): (AccessibilityUIElement::nextTextMarker): (AccessibilityUIElement::stringForTextMarkerRange): (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): (AccessibilityUIElement::indexForTextMarker): (AccessibilityUIElement::isTextMarkerValid): (AccessibilityUIElement::textMarkerForIndex): (AccessibilityUIElement::startTextMarker): (AccessibilityUIElement::endTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::getLinkedUIElements): * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm: (AccessibilityTextMarkerRange::platformTextMarkerRange): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::removeSelection): (AccessibilityUIElement::lineTextMarkerRangeForTextMarker): (AccessibilityUIElement::setSelectedVisibleTextRange): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::textMarkerRangeForElement): (WTR::AccessibilityUIElement::textMarkerRangeLength): (WTR::AccessibilityUIElement::previousTextMarker): (WTR::AccessibilityUIElement::nextTextMarker): (WTR::AccessibilityUIElement::stringForTextMarkerRange): (WTR::AccessibilityUIElement::textMarkerRangeForMarkers): (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange): (WTR::AccessibilityUIElement::endTextMarkerForBounds): (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Removed. * accessibility/mac/previous-next-text-marker.html: Removed. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Removed. * accessibility/mac/text-marker-with-user-select-none.html: Removed. * accessibility/text-marker: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: Added. * accessibility/text-marker/text-marker-previous-next.html: Added. * accessibility/text-marker/text-marker-with-user-select-none-expected.txt: Added. * accessibility/text-marker/text-marker-with-user-select-none.html: Added. * platform/efl/TestExpectations: * platform/gtk/TestExpectations: * platform/ios-simulator/TestExpectations: * platform/win/TestExpectations: Canonical link: https://commits.webkit.org/171376@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195405 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-21 08:35:10 +00:00
markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
shouldBe("text3.stringForTextMarkerRange(markerRange)", "'ect'");
// Iterate backwards the second marker for 6 characters, the range should be "sel"
for (var i = 0; i < 6; i++) {
currentMarker = text3.previousTextMarker(currentMarker);
}
marker2 = currentMarker;
markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
shouldBe("text3.stringForTextMarkerRange(markerRange)", "'sel'");
// Check the case with password field.
var psw = accessibilityController.accessibleElementById("psw");
var textMarkerRange3 = psw.textMarkerRangeForElement(psw);
var start = psw.startTextMarkerForTextMarkerRange(textMarkerRange3);
shouldBeTrue("!psw.accessibilityElementForTextMarker(start)");
// Check next/previous text marker call will skip password field
// We start from text2 and advance 6 characters, it should skip the password field and land on text3.
currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
for (var i = 0; i < 6; i++) {
currentMarker = text2.nextTextMarker(currentMarker);
}
shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text3)");
// Check previous text marker, it should land on " d" node.
currentMarker = text2.previousTextMarker(currentMarker);
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
currentMarker = text2.previousTextMarker(currentMarker);
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text2.childAtIndex(2))");
AX: Implement paragraph related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=154098 <rdar://problem/24269675> Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement paragraph related text marker calls. Reused logic from VisibleUnits class. And refactored textMarkerForCharacterOffset method to get better performance. Also fixed an issue where we can't navigate through a text node with line breaks in it using next/previousCharacterOffset call. Test: accessibility/mac/text-marker-paragraph-nav.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::startWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousWordBoundary): (WebCore::AXObjectCache::startCharacterOffsetOfParagraph): (WebCore::AXObjectCache::endCharacterOffsetOfParagraph): (WebCore::AXObjectCache::paragraphForCharacterOffset): (WebCore::AXObjectCache::nextParagraphEndCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::rootAXEditableElement): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::CharacterOffset::isEqual): (WebCore::AXObjectCache::isNodeInUse): * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm: (+[WebAccessibilityTextMarker textMarkerWithCharacterOffset:cache:]): (-[WebAccessibilityObjectWrapper nextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (startOrEndTextmarkerForRange): (nextTextMarkerForCharacterOffset): (previousTextMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper nextTextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForCharacterOffset:]): (-[WebAccessibilityObjectWrapper textMarkerForCharacterOffset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): Deleted. (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): Deleted. (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:ignoreStart:]): Deleted. (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): Deleted. * editing/VisibleUnits.cpp: (WebCore::nextSentencePosition): (WebCore::findStartOfParagraph): (WebCore::findEndOfParagraph): (WebCore::startOfParagraph): (WebCore::endOfParagraph): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (nextWordEndTextMarkerForTextMarkerCallback): (paragraphTextMarkerRangeForTextMarkerCallback): (previousParagraphStartTextMarkerForTextMarkerCallback): (nextParagraphEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-paragraph-nav-expected.txt: Added. * accessibility/mac/text-marker-paragraph-nav.html: Added. * accessibility/text-marker/text-marker-previous-next-expected.txt: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172322@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196546 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-13 05:24:24 +00:00
// Make sure that text node with line breaks, we can go through it with next/previous call.
text = accessibilityController.accessibleElementById("text4");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = startMarker;
for (var i = 0; i < 8; i++) {
previousMarker = currentMarker;
currentMarker = text.nextTextMarker(currentMarker);
}
markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker)
shouldBe("text.stringForTextMarkerRange(markerRange)", "'f'");
endMarker = text.endTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = endMarker;
for (var i = 0; i < 7; i++) {
currentMarker = text.previousTextMarker(currentMarker);
}
markerRange = text.textMarkerRangeForMarkers(startMarker, currentMarker)
shouldBe("text.stringForTextMarkerRange(markerRange)", "'a'");
2016-04-29 20:05:07 +00:00
// Test case with emoji.
text = accessibilityController.accessibleElementById("text5");
var emojiTextMarkerRange = text.textMarkerRangeForElement(text);
shouldBe("text.textMarkerRangeLength(emojiTextMarkerRange)", "4");
// Make sure navigating next/previous text marker is by emoji.
startMarker = text.startTextMarkerForTextMarkerRange(emojiTextMarkerRange);
result = forward(2, previousMarker, startMarker, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "'😏'");
result = backwards(1, result.previous, result.current, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "'😃'");
// Test case with collapsed whitespace.
text = accessibilityController.accessibleElementById("text6");
var collapsedWhitespaceMarkerRange = text.textMarkerRangeForElement(text);
shouldBe("text.textMarkerRangeLength(collapsedWhitespaceMarkerRange)", "3");
startMarker = text.startTextMarkerForTextMarkerRange(collapsedWhitespaceMarkerRange);
result = forward(1, previousMarker, startMarker, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "'a'");
result = forward(1, result.previous, result.current, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "' '");
result = forward(1, result.previous, result.current, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "'b'");
result = backwards(1, result.previous, result.current, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "' '");
result = backwards(1, result.previous, result.current, text);
shouldBe("text.stringForTextMarkerRange(text.textMarkerRangeForMarkers(result.previous, result.current))", "'a'");
AX: Inconsistency between CharacterOffset and VisiblePostition https://bugs.webkit.org/show_bug.cgi?id=154431 Reviewed by Chris Fleizach. Source/WebCore: VoiceOver is not getting the correct text marker from VisiblePostition when navigating using arrow keys. We should make the CharacterOffset behavior consistent with VisiblePosition so that the conversion between the two won't create different text markers. Changes are covered in the modified tests. * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::characterOffsetForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): (WebCore::AXObjectCache::nextCharacterOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): LayoutTests: * accessibility/mac/text-marker-word-nav-expected.txt: * accessibility/mac/text-marker-word-nav.html: * accessibility/text-marker/text-marker-previous-next.html: Canonical link: https://commits.webkit.org/172572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196824 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-19 18:58:31 +00:00
function forward(count, previousMarker, currentMarker, obj) {
for (var i = 0; i < count; i++) {
previousMarker = currentMarker;
currentMarker = obj.nextTextMarker(currentMarker);
}
return {
previous: previousMarker,
current: currentMarker
};
}
function backwards(count, previousMarker, currentMarker, obj) {
for (var i = 0; i < count; i++) {
previousMarker = obj.previousTextMarker(previousMarker);
currentMarker = obj.previousTextMarker(currentMarker);
}
return {
previous: previousMarker,
current: currentMarker
};
}
AX: [Mac] Implement next/previous text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=152728 Reviewed by Chris Fleizach. Source/WebCore: The existing AXTextMarker based calls are implemented using visible position, and that introduced some bugs which make VoiceOver working incorrectly on Mac sometimes. Since TextIterator uses rendering position, we tried to use it to refactor those AXTextMarker based calls. In this patch, I implemented functions to navigate to previous/next text marker using Range and TextIterator. Also added a conversion between visible position and character offset to make sure unconverted text marker related functions are still working correctly. Tests: accessibility/mac/previous-next-text-marker.html accessibility/mac/text-marker-with-user-select-none.html * accessibility/AXObjectCache.cpp: (WebCore::AXObjectCache::visiblePositionForTextMarkerData): (WebCore::AXObjectCache::traverseToOffsetInRange): (WebCore::AXObjectCache::lengthForRange): (WebCore::AXObjectCache::rangeForNodeContents): (WebCore::characterOffsetsInOrder): (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): (WebCore::AXObjectCache::setTextMarkerDataWithCharacterOffset): (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): (WebCore::AXObjectCache::textMarkerDataForCharacterOffset): (WebCore::AXObjectCache::nextNode): (WebCore::AXObjectCache::previousNode): (WebCore::AXObjectCache::visiblePositionFromCharacterOffset): (WebCore::AXObjectCache::characterOffsetFromVisiblePosition): (WebCore::AXObjectCache::accessibilityObjectForTextMarkerData): (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): * accessibility/AXObjectCache.h: (WebCore::CharacterOffset::CharacterOffset): (WebCore::CharacterOffset::remaining): (WebCore::CharacterOffset::isNull): (WebCore::AXObjectCache::setNodeInUse): (WebCore::AXObjectCache::removeNodeForUse): (WebCore::AXObjectCache::isNodeInUse): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::selectionRange): (WebCore::AccessibilityObject::elementRange): (WebCore::AccessibilityObject::selectText): (WebCore::AccessibilityObject::lineRangeForPosition): (WebCore::AccessibilityObject::replacedNodeNeedsCharacter): (WebCore::renderListItemContainerForNode): (WebCore::listMarkerTextForNode): (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition): (WebCore::AccessibilityObject::stringForRange): (WebCore::AccessibilityObject::stringForVisiblePositionRange): (WebCore::replacedNodeNeedsCharacter): Deleted. * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::visiblePositionRange): (WebCore::AccessibilityObject::visiblePositionRangeForLine): (WebCore::AccessibilityObject::boundsForVisiblePositionRange): (WebCore::AccessibilityObject::setSelectedVisiblePositionRange): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (isTextMarkerIgnored): (-[WebAccessibilityObjectWrapper accessibilityObjectForTextMarker:]): (accessibilityObjectForTextMarker): (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): (textMarkerRangeFromRange): (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): (startOrEndTextmarkerForRange): (-[WebAccessibilityObjectWrapper nextTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper previousTextMarkerForNode:offset:]): (-[WebAccessibilityObjectWrapper textMarkerForNode:offset:]): (textMarkerForCharacterOffset): (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): (textMarkerForVisiblePosition): (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Tools: * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::accessibilityElementForTextMarker): LayoutTests: * accessibility/mac/previous-next-text-marker-expected.txt: Added. * accessibility/mac/previous-next-text-marker.html: Added. * accessibility/mac/text-marker-with-user-select-none-expected.txt: Added. * accessibility/mac/text-marker-with-user-select-none.html: Added. Canonical link: https://commits.webkit.org/171283@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-01-19 00:56:13 +00:00
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>