| Index: ui/accessibility/platform/text_marker_helper_mac.mm
|
| diff --git a/ui/accessibility/platform/text_marker_helper_mac.mm b/ui/accessibility/platform/text_marker_helper_mac.mm
|
| index a4d3025b1cb39370aa1c335b37649aa8ca99df28..94b497ce7940cde3c4ae339846cc9e5f5d21247c 100644
|
| --- a/ui/accessibility/platform/text_marker_helper_mac.mm
|
| +++ b/ui/accessibility/platform/text_marker_helper_mac.mm
|
| @@ -8,6 +8,7 @@
|
|
|
| #import "base/mac/foundation_util.h"
|
| #include "base/mac/scoped_cftyperef.h"
|
| +#include "base/mac/scoped_nsobject.h"
|
| #include "ui/accessibility/ax_position.h"
|
| #include "ui/accessibility/ax_range.h"
|
|
|
| @@ -103,30 +104,109 @@ AXPositionPointer FirstOf(AXPositionPointer a, AXPositionPointer b) {
|
| return self;
|
| }
|
|
|
| -- (id)startTextMarker {
|
| - AXPositionPointer root = factory_->GetRoot();
|
| - return root ? CreateTextMarker(root->PositionAtStartOfAnchor()) : nil;
|
| ++ (NSArray*)getSupportedAttributes {
|
| + return @[
|
| + @"AXEndTextMarker",
|
| + @"AXSelectedTextMarkerRange",
|
| + @"AXStartTextMarker",
|
| + ];
|
| +}
|
| +
|
| ++ (NSArray*)getSupportedParameterizedAttributesExtended:(BOOL)extended {
|
| + static NSArray* const generalAttributes = [@[
|
| + @"AXAttributedStringForTextMarkerRange",
|
| + @"AXBoundsForTextMarkerRange",
|
| + @"AXEndTextMarkerForBounds",
|
| + @"AXLeftLineTextMarkerRangeForTextMarker", // Done.
|
| + @"AXLeftWordTextMarkerRangeForTextMarker", // Done.
|
| + @"AXLengthForTextMarkerRange",
|
| + @"AXLineForTextMarker",
|
| + @"AXLineTextMarkerRangeForTextMarker", // Done.
|
| + @"AXNextLineEndTextMarkerForTextMarker", // Done.
|
| + @"AXNextParagraphEndTextMarkerForTextMarker",
|
| + @"AXNextSentenceEndTextMarkerForTextMarker",
|
| + @"AXNextTextMarkerForTextMarker", // Done.
|
| + @"AXNextWordEndTextMarkerForTextMarker", // Done.
|
| + @"AXParagraphTextMarkerRangeForTextMarker",
|
| + @"AXPreviousLineStartTextMarkerForTextMarker", // Done.
|
| + @"AXPreviousParagraphStartTextMarkerForTextMarker",
|
| + @"AXPreviousSentenceStartTextMarkerForTextMarker",
|
| + @"AXPreviousTextMarkerForTextMarker", // Done.
|
| + @"AXPreviousWordStartTextMarkerForTextMarker", // Done.
|
| + @"AXRightLineTextMarkerRangeForTextMarker", // Done.
|
| + @"AXRightWordTextMarkerRangeForTextMarker", // Done.
|
| + @"AXSentenceTextMarkerRangeForTextMarker",
|
| + @"AXStartTextMarkerForBounds",
|
| + @"AXStringForTextMarkerRange",
|
| + @"AXStyleTextMarkerRangeForTextMarker",
|
| + @"AXTextMarkerForPosition",
|
| + @"AXTextMarkerRangeForLine", // Done.
|
| + @"AXTextMarkerRangeForUIElement", // Done.
|
| + @"AXTextMarkerRangeForUnorderedTextMarkers", // Done.
|
| + @"AXUIElementForTextMarker", // Done.
|
| + ] retain];
|
| + static NSArray* const extendedAttributes = [@[
|
| + @"AXTextMarkerIsValid",
|
| + @"AXIndexForTextMarker",
|
| + @"AXTextMarkerForIndex",
|
| + ] retain];
|
| + base::scoped_nsobject<NSMutableArray> ret([[NSMutableArray alloc] init]);
|
| + [ret addObjectsFromArray:generalAttributes];
|
| + if (extended)
|
| + [ret addObjectsFromArray:extendedAttributes];
|
| + return ret.autorelease();
|
| +}
|
| +
|
| ++ (BOOL)getRangeDataFromMarkerRange:(id)parameter
|
| + start:(ui::AXPositionData*)start
|
| + end:(ui::AXPositionData*)end {
|
| + AXTextMarkerRangeRef markerRange =
|
| + base::mac::CFCastStrict<AXTextMarkerRangeRef>(parameter);
|
| + DCHECK(markerRange);
|
| +
|
| + base::ScopedCFTypeRef<AXTextMarkerRef> startMarker(
|
| + AXTextMarkerRangeCopyStartMarker(markerRange));
|
| + base::ScopedCFTypeRef<AXTextMarkerRef> endMarker(
|
| + AXTextMarkerRangeCopyEndMarker(markerRange));
|
| + if (!startMarker || !endMarker)
|
| + return NO;
|
| +
|
| + return ExtractData(startMarker, start) && ExtractData(endMarker, end);
|
| +}
|
| +
|
| +- (AXPositionPointer)extractFrom:(id)parameter {
|
| + AXPositionData data;
|
| + if (ExtractData(base::mac::CFCastStrict<AXTextMarkerRef>(parameter), &data))
|
| + return factory_->GetFromData(data);
|
| + return factory_->GetFromData(ui::AXAbstractPosition::kNullData);
|
| }
|
|
|
| -- (id)endTextMarker {
|
| +// Non-parameterized attributes. Keep sorted.
|
| +
|
| +// Returns a text marker that points to the last character in the document that
|
| +// can be selected with VoiceOver.
|
| +- (id)AXEndTextMarker {
|
| AXPositionPointer root = factory_->GetRoot();
|
| return root ? CreateTextMarker(root->PositionAtEndOfAnchor()) : nil;
|
| }
|
|
|
| -- (id)selectedTextMarkerRange {
|
| +// Returns a text marker range corresponding to the current selection.
|
| +- (id)AXSelectedTextMarkerRange {
|
| AXRangePointer selection = factory_->GetSelection();
|
| if (!selection.first || !selection.second)
|
| return nil;
|
| return CreateTextMarkerRange(std::move(selection));
|
| }
|
|
|
| -- (AXPositionPointer)extractFrom:(id)parameter {
|
| - AXPositionData data;
|
| - if (ExtractData(base::mac::CFCastStrict<AXTextMarkerRef>(parameter), &data))
|
| - return factory_->GetFromData(data);
|
| - return factory_->GetFromData(ui::AXAbstractPosition::kNullData);
|
| +// Returns a text marker that points to the first character in the document that
|
| +// can be selected with VoiceOver.
|
| +- (id)AXStartTextMarker {
|
| + AXPositionPointer root = factory_->GetRoot();
|
| + return root ? CreateTextMarker(root->PositionAtStartOfAnchor()) : nil;
|
| }
|
|
|
| +// Parameterized attributes. TOOD(tapted): Sort these.
|
| +
|
| - (id)AXTextMarkerRangeForUIElement:(id)parameter {
|
| AXPositionPointer startPosition = factory_->GetRoot();
|
| AXPositionPointer endPosition = startPosition->PositionAtEndOfAnchor();
|
| @@ -273,21 +353,4 @@ AXPositionPointer FirstOf(AXPositionPointer a, AXPositionPointer b) {
|
| AXRangePointer(std::move(startPosition), std::move(endPosition)));
|
| }
|
|
|
| -+ (BOOL)getRangeDataFromMarkerRange:(id)parameter
|
| - start:(ui::AXPositionData*)start
|
| - end:(ui::AXPositionData*)end {
|
| - AXTextMarkerRangeRef markerRange =
|
| - base::mac::CFCastStrict<AXTextMarkerRangeRef>(parameter);
|
| - DCHECK(markerRange);
|
| -
|
| - base::ScopedCFTypeRef<AXTextMarkerRef> startMarker(
|
| - AXTextMarkerRangeCopyStartMarker(markerRange));
|
| - base::ScopedCFTypeRef<AXTextMarkerRef> endMarker(
|
| - AXTextMarkerRangeCopyEndMarker(markerRange));
|
| - if (!startMarker || !endMarker)
|
| - return NO;
|
| -
|
| - return ExtractData(startMarker, start) && ExtractData(endMarker, end);
|
| -}
|
| -
|
| @end
|
|
|