| 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 a0a8338f3f294ec228f5613173c49785afc1e264..de60caee54cb1e2175bd2d0e9d62a93999100a39 100644
|
| --- a/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
|
| @@ -22,6 +22,8 @@
|
| #include "content/browser/accessibility/one_shot_accessibility_tree_search.h"
|
| #include "content/public/common/content_client.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| +#include "ui/accessibility/ax_position.h"
|
| +#include "ui/accessibility/ax_range.h"
|
| #import "ui/accessibility/platform/ax_platform_node_mac.h"
|
|
|
| using content::AXTreeIDRegistry;
|
| @@ -94,13 +96,6 @@ NSString* const NSAccessibilityScrollToVisibleAction = @"AXScrollToVisible";
|
| // A mapping from an accessibility attribute to its method name.
|
| NSDictionary* attributeToMethodNameMap = nil;
|
|
|
| -struct AXTextMarkerData {
|
| - AXTreeIDRegistry::AXTreeID tree_id;
|
| - int32_t node_id;
|
| - int offset;
|
| - ui::AXTextAffinity affinity;
|
| -};
|
| -
|
| // VoiceOver uses -1 to mean "no limit" for AXResultsLimit.
|
| const int kAXResultsLimitNoLimit = -1;
|
|
|
| @@ -139,11 +134,15 @@ AXTextMarkerRef AXTextMarkerRangeCopyEndMarker(
|
| id CreateTextMarker(const BrowserAccessibility& object,
|
| int offset,
|
| ui::AXTextAffinity affinity) {
|
| - AXTextMarkerData marker_data;
|
| - marker_data.tree_id = object.manager() ? object.manager()->ax_tree_id() : -1;
|
| - marker_data.node_id = object.GetId();
|
| - marker_data.offset = offset;
|
| - marker_data.affinity = affinity;
|
| + if (!object.instance_active())
|
| + return nil;
|
| +
|
| + const auto manager = object.manager();
|
| + DCHECK(manager);
|
| + const AXPlatformPositionFactory factory;
|
| + AXPosition marker_data = factory.CreateTextPosition(manager->ax_tree_id(),
|
| + object.node_id(), offset);
|
| + marker_data.set_affinity(affinity);
|
| return (id)base::mac::CFTypeRefToNSObjectAutorelease(AXTextMarkerCreate(
|
| kCFAllocatorDefault, reinterpret_cast<const UInt8*>(&marker_data),
|
| sizeof(marker_data)));
|
| @@ -168,26 +167,20 @@ bool GetTextMarkerData(AXTextMarkerRef text_marker,
|
| ui::AXTextAffinity* affinity) {
|
| DCHECK(text_marker);
|
| DCHECK(object && offset);
|
| - const auto* marker_data = reinterpret_cast<const AXTextMarkerData*>(
|
| - AXTextMarkerGetBytePtr(text_marker));
|
| + const auto* marker_data =
|
| + reinterpret_cast<const AXPosition*>(AXTextMarkerGetBytePtr(text_marker));
|
| if (!marker_data)
|
| return false;
|
|
|
| - const BrowserAccessibilityManager* manager =
|
| - BrowserAccessibilityManager::FromID(marker_data->tree_id);
|
| - if (!manager)
|
| - return false;
|
| -
|
| - *object = manager->GetFromID(marker_data->node_id);
|
| + *object = marker_data->GetAnchor();
|
| if (!*object)
|
| return false;
|
|
|
| - *offset = marker_data->offset;
|
| + *offset = marker_data->get_text_offset();
|
| if (*offset < 0)
|
| return false;
|
|
|
| - *affinity = marker_data->affinity;
|
| -
|
| + *affinity = marker_data->get_affinity();
|
| return true;
|
| }
|
|
|
|
|