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

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

Issue 2934953004: De-templatize ui::AXPosition
Patch Set: rebase 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
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 f0d696d97b18e355b41e42b15f5a19d65f944754..bf5b5e2821bf9caeba7286cfb6972a1b00ea3d41 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -29,8 +29,10 @@
#include "ui/accessibility/ax_range.h"
#import "ui/accessibility/platform/ax_platform_node_mac.h"
-using AXPlatformPositionInstance =
+using AXAbstractPositionInstance =
content::AXPlatformPosition::AXPositionInstance;
+using AXPlatformPositionInstance =
+ content::AXPlatformPosition::ConcreteInstance;
using AXPlatformRange = ui::AXRange<AXPlatformPositionInstance::element_type>;
using AXTextMarkerRangeRef = CFTypeRef;
using AXTextMarkerRef = CFTypeRef;
@@ -140,49 +142,59 @@ AXTextMarkerRef AXTextMarkerRangeCopyEndMarker(
} // extern "C"
+static_assert(sizeof(AXPlatformPosition) == sizeof(ui::AXPositionBase),
+ "AXPosition size mismatch");
+constexpr size_t kAXPositionSize = sizeof(ui::AXPositionBase);
+
// to call |release| on it to transfer ownership of the position to the text
// marker object.
-id CreateTextMarker(AXPlatformPositionInstance position) {
+id CreateTextMarker(AXAbstractPositionInstance position) {
AXTextMarkerRef text_marker = AXTextMarkerCreate(
kCFAllocatorDefault, reinterpret_cast<const UInt8*>(position.release()),
- sizeof(AXPlatformPosition));
+ kAXPositionSize);
return static_cast<id>(
base::mac::CFTypeRefToNSObjectAutorelease(text_marker));
}
// |range| is destructed at the end of this method and ownership of its |anchor|
// and |focus| are transfered to the marker range object.
-id CreateTextMarkerRange(const AXPlatformRange range) {
+id CreateTextMarkerRange(const ui::AXAbstractRange range) {
AXTextMarkerRef start_marker = AXTextMarkerCreate(
kCFAllocatorDefault, reinterpret_cast<const UInt8*>(range.anchor()),
- sizeof(AXPlatformPosition));
+ kAXPositionSize);
AXTextMarkerRef end_marker = AXTextMarkerCreate(
kCFAllocatorDefault, reinterpret_cast<const UInt8*>(range.focus()),
- sizeof(AXPlatformPosition));
+ kAXPositionSize);
AXTextMarkerRangeRef marker_range =
AXTextMarkerRangeCreate(kCFAllocatorDefault, start_marker, end_marker);
return static_cast<id>(
base::mac::CFTypeRefToNSObjectAutorelease(marker_range));
}
-AXPlatformPositionInstance CreatePositionFromTextMarker(
+AXPlatformPositionInstance CreateConcretePositionFromTextMarker(
AXTextMarkerRef text_marker) {
DCHECK(text_marker);
- if (AXTextMarkerGetLength(text_marker) != sizeof(AXPlatformPosition))
- return AXPlatformPosition::CreateNullPosition();
+ if (AXTextMarkerGetLength(text_marker) != kAXPositionSize)
+ return AXPlatformPosition::CreateConcreteNullPosition();
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>(
+ return AXPlatformPosition::CreateConcreteNullPosition();
+ UInt8* destination_buffer = new UInt8[kAXPositionSize];
+ std::memcpy(destination_buffer, source_buffer, kAXPositionSize);
+ AXPlatformPositionInstance position(
+ reinterpret_cast<AXPlatformPositionInstance::pointer>(
destination_buffer));
if (!position)
- return AXPlatformPosition::CreateNullPosition();
+ return AXPlatformPosition::CreateConcreteNullPosition();
return position;
}
+AXAbstractPositionInstance CreatePositionFromTextMarker(
+ AXTextMarkerRef text_marker) {
+ return base::WrapUnique(
+ CreateConcretePositionFromTextMarker(text_marker).release());
+}
+
AXPlatformRange CreateRangeFromTextMarkerRange(
AXTextMarkerRangeRef marker_range) {
DCHECK(marker_range);
@@ -194,9 +206,9 @@ AXPlatformRange CreateRangeFromTextMarkerRange(
return AXPlatformRange();
AXPlatformPositionInstance anchor =
- CreatePositionFromTextMarker(start_marker.get());
+ CreateConcretePositionFromTextMarker(start_marker.get());
AXPlatformPositionInstance focus =
- CreatePositionFromTextMarker(end_marker.get());
+ CreateConcretePositionFromTextMarker(end_marker.get());
// |AXPlatformRange| takes ownership of its anchor and focus.
return AXPlatformRange(std::move(anchor), std::move(focus));
}
@@ -206,11 +218,11 @@ AXPlatformPositionInstance CreateTextPosition(
int offset,
ui::AXTextAffinity affinity) {
if (!object.instance_active())
- return AXPlatformPosition::CreateNullPosition();
+ return AXPlatformPosition::CreateConcreteNullPosition();
const BrowserAccessibilityManager* manager = object.manager();
DCHECK(manager);
- return AXPlatformPosition::CreateTextPosition(
+ return AXPlatformPosition::CreateConcreteTextPosition(
manager->ax_tree_id(), object.GetId(), offset, affinity);
}
@@ -274,8 +286,8 @@ NSAttributedString* GetAttributedTextForTextMarkerRange(
AXPlatformRange ax_range = CreateRangeFromTextMarkerRange(marker_range);
if (ax_range.IsNull())
return nil;
- start_object = ax_range.anchor()->GetAnchor();
- end_object = ax_range.focus()->GetAnchor();
+ start_object = ax_range.GetAnchorNode();
+ end_object = ax_range.GetFocusNode();
start_offset = ax_range.anchor()->text_offset();
end_offset = ax_range.focus()->text_offset();
start_affinity = ax_range.anchor()->affinity();
@@ -975,7 +987,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if (!root)
return nil;
- AXPlatformPositionInstance position = root->CreatePositionAt(0);
+ AXAbstractPositionInstance position = root->CreatePositionAt(0);
return CreateTextMarker(position->CreatePositionAtEndOfAnchor());
}
@@ -1740,7 +1752,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if (!root)
return nil;
- AXPlatformPositionInstance position = root->CreatePositionAt(0);
+ AXAbstractPositionInstance position = root->CreatePositionAt(0);
return CreateTextMarker(position->CreatePositionAtStartOfAnchor());
}
@@ -2132,7 +2144,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if ([attribute isEqualToString:@"AXUIElementForTextMarker"]) {
AXPlatformPositionInstance position =
- CreatePositionFromTextMarker(parameter);
+ CreateConcretePositionFromTextMarker(parameter);
if (!position->IsNullPosition())
return ToBrowserAccessibilityCocoa(position->GetAnchor());
@@ -2140,12 +2152,12 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
if ([attribute isEqualToString:@"AXTextMarkerRangeForUIElement"]) {
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
browserAccessibility_->CreatePositionAt(0);
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
startPosition->CreatePositionAtEndOfAnchor();
- AXPlatformRange range =
- AXPlatformRange(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range =
+ ui::AXAbstractRange(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
@@ -2156,7 +2168,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
return GetAttributedTextForTextMarkerRange(parameter);
if ([attribute isEqualToString:@"AXNextTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2164,7 +2176,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
if ([attribute isEqualToString:@"AXPreviousTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2172,41 +2184,41 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
if ([attribute isEqualToString:@"AXLeftWordTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
CreatePositionFromTextMarker(parameter);
if (endPosition->IsNullPosition())
return nil;
- AXPlatformPositionInstance startWordPosition =
+ AXAbstractPositionInstance startWordPosition =
endPosition->CreatePreviousWordStartPosition();
- AXPlatformPositionInstance endWordPosition =
+ AXAbstractPositionInstance endWordPosition =
endPosition->CreatePreviousWordEndPosition();
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
*startWordPosition <= *endWordPosition ? std::move(endWordPosition)
: std::move(startWordPosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
if ([attribute isEqualToString:@"AXRightWordTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
CreatePositionFromTextMarker(parameter);
if (startPosition->IsNullPosition())
return nil;
- AXPlatformPositionInstance endWordPosition =
+ AXAbstractPositionInstance endWordPosition =
startPosition->CreateNextWordEndPosition();
- AXPlatformPositionInstance startWordPosition =
+ AXAbstractPositionInstance startWordPosition =
startPosition->CreateNextWordStartPosition();
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
*startWordPosition <= *endWordPosition ? std::move(startWordPosition)
: std::move(endWordPosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
if ([attribute isEqualToString:@"AXNextWordEndTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2215,7 +2227,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if ([attribute
isEqualToString:@"AXPreviousWordStartTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2223,55 +2235,55 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
}
if ([attribute isEqualToString:@"AXTextMarkerRangeForLine"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
position->CreatePreviousLineStartPosition();
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
position->CreateNextLineEndPosition();
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
if ([attribute isEqualToString:@"AXLeftLineTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
CreatePositionFromTextMarker(parameter);
if (endPosition->IsNullPosition())
return nil;
- AXPlatformPositionInstance startLinePosition =
+ AXAbstractPositionInstance startLinePosition =
endPosition->CreatePreviousLineStartPosition();
- AXPlatformPositionInstance endLinePosition =
+ AXAbstractPositionInstance endLinePosition =
endPosition->CreatePreviousLineEndPosition();
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
*startLinePosition <= *endLinePosition ? std::move(endLinePosition)
: std::move(startLinePosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
if ([attribute isEqualToString:@"AXRightLineTextMarkerRangeForTextMarker"]) {
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
CreatePositionFromTextMarker(parameter);
if (startPosition->IsNullPosition())
return nil;
- AXPlatformPositionInstance startLinePosition =
+ AXAbstractPositionInstance startLinePosition =
startPosition->CreateNextLineStartPosition();
- AXPlatformPositionInstance endLinePosition =
+ AXAbstractPositionInstance endLinePosition =
startPosition->CreateNextLineEndPosition();
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
*startLinePosition <= *endLinePosition ? std::move(startLinePosition)
: std::move(endLinePosition);
- AXPlatformRange range(std::move(startPosition), std::move(endPosition));
+ ui::AXAbstractRange range(std::move(startPosition), std::move(endPosition));
return CreateTextMarkerRange(std::move(range));
}
if ([attribute isEqualToString:@"AXNextLineEndTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2280,7 +2292,7 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if ([attribute
isEqualToString:@"AXPreviousLineStartTextMarkerForTextMarker"]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
@@ -2330,13 +2342,13 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if ([attribute isEqualToString:
NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) {
- AXPlatformPositionInstance position =
+ AXAbstractPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return nil;
- AXPlatformRange range(position->CreatePreviousLineStartPosition(),
- position->CreateNextLineEndPosition());
+ ui::AXAbstractRange range(position->CreatePreviousLineStartPosition(),
+ position->CreateNextLineEndPosition());
return CreateTextMarkerRange(std::move(range));
}
@@ -2349,8 +2361,8 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if (range.IsNull())
return nil;
- startObject = range.anchor()->GetAnchor();
- endObject = range.focus()->GetAnchor();
+ startObject = range.GetAnchorNode();
+ endObject = range.GetFocusNode();
startOffset = range.anchor()->text_offset();
endOffset = range.focus()->text_offset();
DCHECK(startObject && endObject);
@@ -2376,16 +2388,16 @@ NSString* const NSAccessibilityRequiredAttribute = @"AXRequired";
if ([text_marker_array count] != 2)
return nil;
- AXPlatformPositionInstance startPosition =
+ AXAbstractPositionInstance startPosition =
CreatePositionFromTextMarker([text_marker_array objectAtIndex:0]);
- AXPlatformPositionInstance endPosition =
+ AXAbstractPositionInstance endPosition =
CreatePositionFromTextMarker([text_marker_array objectAtIndex:1]);
if (*startPosition <= *endPosition) {
- return CreateTextMarkerRange(
- AXPlatformRange(std::move(startPosition), std::move(endPosition)));
+ return CreateTextMarkerRange(ui::AXAbstractRange(std::move(startPosition),
+ std::move(endPosition)));
} else {
- return CreateTextMarkerRange(
- AXPlatformRange(std::move(endPosition), std::move(startPosition)));
+ return CreateTextMarkerRange(ui::AXAbstractRange(
+ std::move(endPosition), std::move(startPosition)));
}
}
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | content/browser/accessibility/browser_accessibility_com_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698