Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(925)

Unified Diff: content/browser/accessibility/browser_accessibility_cocoa.mm

Issue 2940923003: a11y: Move CreateTextMarker[Range] to TextMarkerHelperMac.
Patch Set: squish? Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/mac/foundation_util.mm ('k') | ui/accessibility/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/accessibility/browser_accessibility_cocoa.mm
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 2698d30c785d5b46b8259a9346cfe8147a84e49c..5e96f632217c176e2aba374dc7943076f7452ac5 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -15,6 +15,7 @@
#include "base/mac/foundation_util.h"
#include "base/mac/scoped_cftyperef.h"
+#include "base/memory/ptr_util.h"
#include "base/strings/string16.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
@@ -28,12 +29,11 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/accessibility/ax_range.h"
#import "ui/accessibility/platform/ax_platform_node_mac.h"
+#import "ui/accessibility/platform/text_marker_helper_mac.h"
using AXPlatformPositionInstance =
content::AXPlatformPosition::AXPositionInstance;
using AXPlatformRange = ui::AXRange<AXPlatformPositionInstance::element_type>;
-using AXTextMarkerRangeRef = CFTypeRef;
-using AXTextMarkerRef = CFTypeRef;
using StringAttribute = ui::AXStringAttribute;
using content::AXPlatformPosition;
using content::AccessibilityMatchPredicate;
@@ -111,93 +111,38 @@ NSDictionary* attributeToMethodNameMap = nil;
// VoiceOver uses -1 to mean "no limit" for AXResultsLimit.
const int kAXResultsLimitNoLimit = -1;
-extern "C" {
-
-// The following are private accessibility APIs required for cursor navigation
-// and text selection. VoiceOver started relying on them in Mac OS X 10.11.
-#if !defined(MAC_OS_X_VERSION_10_11) || \
- MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11
-
-AXTextMarkerRef AXTextMarkerCreate(CFAllocatorRef allocator,
- const UInt8* bytes,
- CFIndex length);
-
-const UInt8* AXTextMarkerGetBytePtr(AXTextMarkerRef text_marker);
-
-size_t AXTextMarkerGetLength(AXTextMarkerRef text_marker);
-
-AXTextMarkerRangeRef AXTextMarkerRangeCreate(CFAllocatorRef allocator,
- AXTextMarkerRef start_marker,
- AXTextMarkerRef end_marker);
-
-AXTextMarkerRef AXTextMarkerRangeCopyStartMarker(
- AXTextMarkerRangeRef text_marker_range);
-
-AXTextMarkerRef AXTextMarkerRangeCopyEndMarker(
- AXTextMarkerRangeRef text_marker_range);
-
-#endif // MAC_OS_X_VERSION_10_11
+class BrowserPositionFactory : public ui::PositionFactory {
+ public:
+ explicit BrowserPositionFactory(
+ content::BrowserAccessibility* browser_accessibility)
+ : browser_accessibility_(browser_accessibility) {}
-} // extern "C"
+ ui::AXPositionPointer GetRoot() const override;
+ ui::AXRangePointer GetSelection() const override;
+ ui::AXPositionPointer GetFromData(
+ const ui::AXPositionData& data) const override;
+ id GetAccessibilityObject(const ui::AXPositionData& data) const override;
-// AXTextMarkerCreate copies from data buffer given to it.
-id CreateTextMarker(AXPlatformPositionInstance position) {
- AXTextMarkerRef text_marker = AXTextMarkerCreate(
- kCFAllocatorDefault, reinterpret_cast<const UInt8*>(position.get()),
- sizeof(AXPlatformPosition));
- return static_cast<id>(
- base::mac::CFTypeRefToNSObjectAutorelease(text_marker));
-}
+ private:
+ bool IsActive() const {
+ return browser_accessibility_ && browser_accessibility_->instance_active();
+ }
-// |range| is destructed at the end of this method. |anchor| and |focus| are
-// copied into the individual text markers.
-id CreateTextMarkerRange(const AXPlatformRange range) {
- base::ScopedCFTypeRef<AXTextMarkerRef> start_marker(AXTextMarkerCreate(
- kCFAllocatorDefault, reinterpret_cast<const UInt8*>(range.anchor()),
- sizeof(AXPlatformPosition)));
- base::ScopedCFTypeRef<AXTextMarkerRef> end_marker(AXTextMarkerCreate(
- kCFAllocatorDefault, reinterpret_cast<const UInt8*>(range.focus()),
- sizeof(AXPlatformPosition)));
- AXTextMarkerRangeRef marker_range =
- AXTextMarkerRangeCreate(kCFAllocatorDefault, start_marker, end_marker);
- return static_cast<id>(
- base::mac::CFTypeRefToNSObjectAutorelease(marker_range));
-}
+ content::BrowserAccessibility* browser_accessibility_;
-AXPlatformPositionInstance CreatePositionFromTextMarker(
- AXTextMarkerRef text_marker) {
- DCHECK(text_marker);
- if (AXTextMarkerGetLength(text_marker) != sizeof(AXPlatformPosition))
- return AXPlatformPosition::CreateNullPosition();
- const UInt8* source_buffer = AXTextMarkerGetBytePtr(text_marker);
- if (!source_buffer)
- return AXPlatformPosition::CreateNullPosition();
- UInt8* destination_buffer = new UInt8[sizeof(AXPlatformPosition)];
- std::memcpy(destination_buffer, source_buffer, sizeof(AXPlatformPosition));
- AXPlatformPosition::AXPositionInstance position(
- reinterpret_cast<AXPlatformPosition::AXPositionInstance::pointer>(
- destination_buffer));
- if (!position)
- return AXPlatformPosition::CreateNullPosition();
- return position;
-}
+ DISALLOW_COPY_AND_ASSIGN(BrowserPositionFactory);
+};
-AXPlatformRange CreateRangeFromTextMarkerRange(
- AXTextMarkerRangeRef marker_range) {
- DCHECK(marker_range);
- base::ScopedCFTypeRef<AXTextMarkerRef> start_marker(
- AXTextMarkerRangeCopyStartMarker(marker_range));
- base::ScopedCFTypeRef<AXTextMarkerRef> end_marker(
- AXTextMarkerRangeCopyEndMarker(marker_range));
- if (!start_marker.get() || !end_marker.get())
+AXPlatformRange CreateRangeFromTextMarkerRange(id marker_range) {
+ ui::AXPositionData start, end;
+ if (![TextMarkerHelperMac getRangeDataFromMarkerRange:marker_range
+ start:&start
+ end:&end]) {
return AXPlatformRange();
+ }
- AXPlatformPositionInstance anchor =
- CreatePositionFromTextMarker(start_marker.get());
- AXPlatformPositionInstance focus =
- CreatePositionFromTextMarker(end_marker.get());
- // |AXPlatformRange| takes ownership of its anchor and focus.
- return AXPlatformRange(std::move(anchor), std::move(focus));
+ return AXPlatformRange(AXPlatformPosition::CreateFromData(start),
+ AXPlatformPosition::CreateFromData(end));
}
AXPlatformPositionInstance CreateTextPosition(
@@ -213,18 +158,18 @@ AXPlatformPositionInstance CreateTextPosition(
manager->ax_tree_id(), object.GetId(), offset, affinity);
}
-AXPlatformRange CreateTextRange(const BrowserAccessibility& start_object,
- int start_offset,
- ui::AXTextAffinity start_affinity,
- const BrowserAccessibility& end_object,
- int end_offset,
- ui::AXTextAffinity end_affinity) {
+ui::AXRangePointer CreateTextRange(const BrowserAccessibility& start_object,
+ int start_offset,
+ ui::AXTextAffinity start_affinity,
+ const BrowserAccessibility& end_object,
+ int end_offset,
+ ui::AXTextAffinity end_affinity) {
AXPlatformPositionInstance anchor =
CreateTextPosition(start_object, start_offset, start_affinity);
AXPlatformPositionInstance focus =
CreateTextPosition(end_object, end_offset, end_affinity);
- // |AXPlatformRange| takes ownership of its anchor and focus.
- return AXPlatformRange(std::move(anchor), std::move(focus));
+ // |AXRangePointer| takes ownership of its anchor and focus.
+ return ui::AXRangePointer(std::move(anchor), std::move(focus));
}
void AddMisspelledTextAttributes(
@@ -257,15 +202,14 @@ void AddMisspelledTextAttributes(
[attributed_string endEditing];
}
-NSString* GetTextForTextMarkerRange(AXTextMarkerRangeRef marker_range) {
+NSString* GetTextForTextMarkerRange(id marker_range) {
AXPlatformRange range = CreateRangeFromTextMarkerRange(marker_range);
if (range.IsNull())
return nil;
return base::SysUTF16ToNSString(range.GetText());
}
-NSAttributedString* GetAttributedTextForTextMarkerRange(
- AXTextMarkerRangeRef marker_range) {
+NSAttributedString* GetAttributedTextForTextMarkerRange(id marker_range) {
BrowserAccessibility* start_object;
BrowserAccessibility* end_object;
int start_offset, end_offset;
@@ -523,7 +467,16 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
#endif // MAC_OS_X_VERSION_10_12
-@implementation BrowserAccessibilityCocoa
+@interface BrowserAccessibilityCocoa ()
+
+// Lazily creates a TextMarkerHelper and returns it.
+- (TextMarkerHelperMac*)textMarkerHelper;
+
+@end
+
+@implementation BrowserAccessibilityCocoa {
+ base::scoped_nsobject<TextMarkerHelperMac> textMarkerHelper_;
+}
+ (void)initialize {
const struct {
@@ -966,16 +919,12 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
!GetState(browserAccessibility_, ui::AX_STATE_DISABLED)];
}
-// Returns a text marker that points to the last character in the document that
-// can be selected with VoiceOver.
-- (id)endTextMarker {
- const BrowserAccessibility* root =
- browserAccessibility_->manager()->GetRoot();
- if (!root)
- return nil;
+- (id)startTextMarker {
+ return [[self textMarkerHelper] startTextMarker];
+}
- AXPlatformPositionInstance position = root->CreatePositionAt(0);
- return CreateTextMarker(position->CreatePositionAtEndOfAnchor());
+- (id)endTextMarker {
+ return [[self textMarkerHelper] endTextMarker];
}
- (NSNumber*)expanded {
@@ -1669,35 +1618,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
- (id)selectedTextMarkerRange {
- if (![self instanceActive])
- return nil;
-
- BrowserAccessibilityManager* manager = browserAccessibility_->manager();
- if (!manager)
- return nil;
-
- int32_t anchorId = manager->GetTreeData().sel_anchor_object_id;
- const BrowserAccessibility* anchorObject = manager->GetFromID(anchorId);
- if (!anchorObject)
- return nil;
-
- int32_t focusId = manager->GetTreeData().sel_focus_object_id;
- const BrowserAccessibility* focusObject = manager->GetFromID(focusId);
- if (!focusObject)
- return nil;
-
- int anchorOffset = manager->GetTreeData().sel_anchor_offset;
- int focusOffset = manager->GetTreeData().sel_focus_offset;
- if (anchorOffset < 0 || focusOffset < 0)
- return nil;
-
- ui::AXTextAffinity anchorAffinity =
- manager->GetTreeData().sel_anchor_affinity;
- ui::AXTextAffinity focusAffinity = manager->GetTreeData().sel_focus_affinity;
-
- return CreateTextMarkerRange(CreateTextRange(*anchorObject, anchorOffset,
- anchorAffinity, *focusObject,
- focusOffset, focusAffinity));
+ return [[self textMarkerHelper] selectedTextMarkerRange];
}
- (NSValue*)size {
@@ -1731,18 +1652,6 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
return nil;
}
-// Returns a text marker that points to the first character in the document that
-// can be selected with VoiceOver.
-- (id)startTextMarker {
- const BrowserAccessibility* root =
- browserAccessibility_->manager()->GetRoot();
- if (!root)
- return nil;
-
- AXPlatformPositionInstance position = root->CreatePositionAt(0);
- return CreateTextMarker(position->CreatePositionAtStartOfAnchor());
-}
-
// Returns a subrole based upon the role.
- (NSString*) subrole {
if (![self instanceActive])
@@ -2013,6 +1922,15 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
return [attributedValue attributedSubstringFromRange:range];
}
+- (TextMarkerHelperMac*)textMarkerHelper {
+ if (!textMarkerHelper_) {
+ textMarkerHelper_.reset([[TextMarkerHelperMac alloc]
+ initWithFactory:base::MakeUnique<BrowserPositionFactory>(
+ browserAccessibility_)]);
+ }
+ return textMarkerHelper_;
+}
+
// Returns the accessibility value for the given attribute. If the value isn't
// supported this will return nil.
- (id)accessibilityAttributeValue:(NSString*)attribute {
@@ -2129,163 +2047,20 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
return nil;
}
- if ([attribute isEqualToString:@"AXUIElementForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (!position->IsNullPosition())
- return ToBrowserAccessibilityCocoa(position->GetAnchor());
-
- return nil;
- }
-
- if ([attribute isEqualToString:@"AXTextMarkerRangeForUIElement"]) {
- AXPlatformPositionInstance startPosition =
- browserAccessibility_->CreatePositionAt(0);
- AXPlatformPositionInstance endPosition =
- startPosition->CreatePositionAtEndOfAnchor();
- AXPlatformRange range =
- AXPlatformRange(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
+ SEL selector = NSSelectorFromString([attribute stringByAppendingString:@":"]);
+ DCHECK(selector);
+ if ([TextMarkerHelperMac instancesRespondToSelector:selector]) {
+ return
+ [[self textMarkerHelper] performSelector:selector withObject:parameter];
}
+ // TODO(tapted): Move the next three to TextMarkerHelper.
if ([attribute isEqualToString:@"AXStringForTextMarkerRange"])
return GetTextForTextMarkerRange(parameter);
if ([attribute isEqualToString:@"AXAttributedStringForTextMarkerRange"])
return GetAttributedTextForTextMarkerRange(parameter);
- if ([attribute isEqualToString:@"AXNextTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreateNextCharacterPosition());
- }
-
- if ([attribute isEqualToString:@"AXPreviousTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreatePreviousCharacterPosition());
- }
-
- if ([attribute isEqualToString:@"AXLeftWordTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance endPosition =
- CreatePositionFromTextMarker(parameter);
- if (endPosition->IsNullPosition())
- return nil;
-
- AXPlatformPositionInstance startWordPosition =
- endPosition->CreatePreviousWordStartPosition();
- AXPlatformPositionInstance endWordPosition =
- endPosition->CreatePreviousWordEndPosition();
- AXPlatformPositionInstance startPosition =
- *startWordPosition <= *endWordPosition ? std::move(endWordPosition)
- : std::move(startWordPosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
- }
-
- if ([attribute isEqualToString:@"AXRightWordTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance startPosition =
- CreatePositionFromTextMarker(parameter);
- if (startPosition->IsNullPosition())
- return nil;
-
- AXPlatformPositionInstance endWordPosition =
- startPosition->CreateNextWordEndPosition();
- AXPlatformPositionInstance startWordPosition =
- startPosition->CreateNextWordStartPosition();
- AXPlatformPositionInstance endPosition =
- *startWordPosition <= *endWordPosition ? std::move(startWordPosition)
- : std::move(endWordPosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
- }
-
- if ([attribute isEqualToString:@"AXNextWordEndTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreateNextWordEndPosition());
- }
-
- if ([attribute
- isEqualToString:@"AXPreviousWordStartTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreatePreviousWordStartPosition());
- }
-
- if ([attribute isEqualToString:@"AXTextMarkerRangeForLine"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
-
- AXPlatformPositionInstance startPosition =
- position->CreatePreviousLineStartPosition();
- AXPlatformPositionInstance endPosition =
- position->CreateNextLineEndPosition();
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
- }
-
- if ([attribute isEqualToString:@"AXLeftLineTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance endPosition =
- CreatePositionFromTextMarker(parameter);
- if (endPosition->IsNullPosition())
- return nil;
-
- AXPlatformPositionInstance startLinePosition =
- endPosition->CreatePreviousLineStartPosition();
- AXPlatformPositionInstance endLinePosition =
- endPosition->CreatePreviousLineEndPosition();
- AXPlatformPositionInstance startPosition =
- *startLinePosition <= *endLinePosition ? std::move(endLinePosition)
- : std::move(startLinePosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
- }
-
- if ([attribute isEqualToString:@"AXRightLineTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance startPosition =
- CreatePositionFromTextMarker(parameter);
- if (startPosition->IsNullPosition())
- return nil;
-
- AXPlatformPositionInstance startLinePosition =
- startPosition->CreateNextLineStartPosition();
- AXPlatformPositionInstance endLinePosition =
- startPosition->CreateNextLineEndPosition();
- AXPlatformPositionInstance endPosition =
- *startLinePosition <= *endLinePosition ? std::move(startLinePosition)
- : std::move(endLinePosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
- return CreateTextMarkerRange(std::move(range));
- }
-
- if ([attribute isEqualToString:@"AXNextLineEndTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreateNextLineEndPosition());
- }
-
- if ([attribute
- isEqualToString:@"AXPreviousLineStartTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
- return CreateTextMarker(position->CreatePreviousLineStartPosition());
- }
-
if ([attribute isEqualToString:@"AXLengthForTextMarkerRange"]) {
NSString* text = GetTextForTextMarkerRange(parameter);
return [NSNumber numberWithInt:[text length]];
@@ -2327,18 +2102,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
return nil;
}
- if ([attribute isEqualToString:
- NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) {
- AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
- if (position->IsNullPosition())
- return nil;
-
- AXPlatformRange range(position->CreatePreviousLineStartPosition(),
- position->CreateNextLineEndPosition());
- return CreateTextMarkerRange(std::move(range));
- }
-
+ // TODO(tapted): Move this to TextMarkerHelper.
if ([attribute isEqualToString:
NSAccessibilityBoundsForTextMarkerRangeParameterizedAttribute]) {
BrowserAccessibility* startObject;
@@ -2367,28 +2131,6 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
if ([attribute isEqualToString:
- NSAccessibilityTextMarkerRangeForUnorderedTextMarkersParameterizedAttribute]) {
- if (![parameter isKindOfClass:[NSArray class]])
- return nil;
-
- NSArray* text_marker_array = parameter;
- if ([text_marker_array count] != 2)
- return nil;
-
- AXPlatformPositionInstance startPosition =
- CreatePositionFromTextMarker([text_marker_array objectAtIndex:0]);
- AXPlatformPositionInstance endPosition =
- CreatePositionFromTextMarker([text_marker_array objectAtIndex:1]);
- if (*startPosition <= *endPosition) {
- return CreateTextMarkerRange(
- AXPlatformRange(std::move(startPosition), std::move(endPosition)));
- } else {
- return CreateTextMarkerRange(
- AXPlatformRange(std::move(endPosition), std::move(startPosition)));
- }
- }
-
- if ([attribute isEqualToString:
NSAccessibilityIndexForChildUIElementParameterizedAttribute]) {
if (![parameter isKindOfClass:[BrowserAccessibilityCocoa class]])
return nil;
@@ -2885,3 +2627,58 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
@end
+
+ui::AXPositionPointer BrowserPositionFactory::GetRoot() const {
+ const BrowserAccessibility* root =
+ browser_accessibility_->manager()->GetRoot();
+ if (!root)
+ return nullptr;
+
+ return root->CreatePositionAt(0);
+}
+
+ui::AXRangePointer BrowserPositionFactory::GetSelection() const {
+ if (!IsActive())
+ return ui::AXRangePointer(nullptr, nullptr);
+
+ BrowserAccessibilityManager* manager = browser_accessibility_->manager();
+ if (!manager)
+ return ui::AXRangePointer(nullptr, nullptr);
+
+ int32_t anchor_id = manager->GetTreeData().sel_anchor_object_id;
+ const BrowserAccessibility* anchor_object = manager->GetFromID(anchor_id);
+ if (!anchor_object)
+ return ui::AXRangePointer(nullptr, nullptr);
+
+ int32_t focus_id = manager->GetTreeData().sel_focus_object_id;
+ const BrowserAccessibility* focusObject = manager->GetFromID(focus_id);
+ if (!focusObject)
+ return ui::AXRangePointer(nullptr, nullptr);
+
+ int anchor_offset = manager->GetTreeData().sel_anchor_offset;
+ int focus_offset = manager->GetTreeData().sel_focus_offset;
+ if (anchor_offset < 0 || focus_offset < 0)
+ return ui::AXRangePointer(nullptr, nullptr);
+
+ ui::AXTextAffinity anchorAffinity =
+ manager->GetTreeData().sel_anchor_affinity;
+ ui::AXTextAffinity focusAffinity = manager->GetTreeData().sel_focus_affinity;
+
+ return CreateTextRange(*anchor_object, anchor_offset, anchorAffinity,
+ *focusObject, focus_offset, focusAffinity);
+}
+
+ui::AXPositionPointer BrowserPositionFactory::GetFromData(
+ const ui::AXPositionData& data) const {
+ return AXPlatformPosition::CreateFromData(data);
+}
+
+id BrowserPositionFactory::GetAccessibilityObject(
+ const ui::AXPositionData& data) const {
+ AXPlatformPositionInstance position =
+ AXPlatformPosition::CreateFromData(data);
+ if (!position->IsNullPosition())
+ return ToBrowserAccessibilityCocoa(position->GetAnchor());
+
+ return nil;
+}
« no previous file with comments | « base/mac/foundation_util.mm ('k') | ui/accessibility/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698