WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 233336
AX: WebKit: need a method to get visible text and frame of an element on screen
https://bugs.webkit.org/show_bug.cgi?id=233336
Summary
AX: WebKit: need a method to get visible text and frame of an element on screen
chris fleizach
Reported
2021-11-18 14:42:16 PST
We can determine what elements are on screen, but there is no good way to determine if the content in an element is on screen. If an element is only partially visible, we need to know what the visible content is, and what the accessibilityFrame is of that content. This is to support Books <
rdar://problem/83657171
>
Attachments
patch
(26.34 KB, patch)
2021-11-18 14:52 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(26.37 KB, patch)
2021-11-18 16:04 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(26.39 KB, patch)
2021-11-18 16:06 PST
,
chris fleizach
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
patch
(27.12 KB, patch)
2021-11-19 00:15 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(48.47 KB, patch)
2021-11-19 17:07 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(48.47 KB, patch)
2021-11-19 17:09 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(56.51 KB, patch)
2021-11-19 17:16 PST
,
chris fleizach
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
patch
(57.65 KB, patch)
2021-11-19 23:58 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(49.81 KB, patch)
2021-11-19 23:59 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(49.52 KB, patch)
2021-11-20 00:00 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(49.52 KB, patch)
2021-11-20 00:11 PST
,
chris fleizach
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
patch
(50.32 KB, patch)
2021-11-20 22:05 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(50.29 KB, patch)
2021-11-20 22:55 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(50.30 KB, patch)
2021-11-20 23:37 PST
,
chris fleizach
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
patch
(50.36 KB, patch)
2021-11-21 21:34 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(50.19 KB, patch)
2021-11-21 21:37 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
patch
(50.19 KB, patch)
2021-11-21 21:38 PST
,
chris fleizach
andresg_22
: review+
ews-feeder
: commit-queue-
Details
Formatted Diff
Diff
patch
(50.16 KB, patch)
2021-11-22 07:41 PST
,
chris fleizach
no flags
Details
Formatted Diff
Diff
Show Obsolete
(17)
View All
Add attachment
proposed patch, testcase, etc.
chris fleizach
Comment 1
2021-11-18 14:52:05 PST
Created
attachment 444744
[details]
patch
Tyler Wilcock
Comment 2
2021-11-18 15:48:11 PST
Comment on
attachment 444744
[details]
patch View in context:
https://bugs.webkit.org/attachment.cgi?id=444744&action=review
> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:491 > + std::optional<BoundaryPoint> endBoundary = range->end;
Can these be auto?
> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:498 > + std::optional<BoundaryPoint> testStartBoundary = makeBoundaryPoint(nextLinePosition);
Can this be auto?
> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:511 > + std::optional<BoundaryPoint> testEndBoundary = makeBoundaryPoint(previousLinePosition);
Can this be auto?
> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:784 > +- (WebCore::AXCoreObject*)initializeBackingsStore
Is this a typo (extra s)? initializeBackingsStore vs. initializeBackingStore
chris fleizach
Comment 3
2021-11-18 15:49:55 PST
Comment on
attachment 444744
[details]
patch View in context:
https://bugs.webkit.org/attachment.cgi?id=444744&action=review
>> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:491 >> + std::optional<BoundaryPoint> endBoundary = range->end; > > Can these be auto?
no it picks the wrong type
>> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:498 >> + std::optional<BoundaryPoint> testStartBoundary = makeBoundaryPoint(nextLinePosition); > > Can this be auto?
ditto
>> Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm:784 >> +- (WebCore::AXCoreObject*)initializeBackingsStore > > Is this a typo (extra s)? initializeBackingsStore vs. initializeBackingStore
yea true
chris fleizach
Comment 4
2021-11-18 16:04:56 PST
Created
attachment 444750
[details]
patch
chris fleizach
Comment 5
2021-11-18 16:06:51 PST
Created
attachment 444751
[details]
patch
chris fleizach
Comment 6
2021-11-19 00:15:39 PST
Created
attachment 444785
[details]
patch
Andres Gonzalez
Comment 7
2021-11-19 05:41:05 PST
(In reply to chris fleizach from
comment #6
)
> Created
attachment 444785
[details]
> patch
--- a/LayoutTests/accessibility/mac/visible-character-range.html +++ a/LayoutTests/accessibility/mac/visible-character-range.html +<script src="../../resources/js-test-pre.js"></script> Do just +<script src="../../resources/js-test.js"></script> no -pre. +<p id="description"></p> +<div id="console"></div> Remove these two lines, no needed any more. + if (window.accessibilityController) { + + var text = accessibilityController.accessibleElementById("group").childAtIndex(0); looks like indentation is off here, extra spaces. +<script src="../../resources/js-test-post.js"></script> Remove this line, not needed any more.
Andres Gonzalez
Comment 8
2021-11-19 06:51:18 PST
(In reply to chris fleizach from
comment #6
)
> Created
attachment 444785
[details]
> patch
--- a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm +++ a/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm +#import "Position.h" ... +#import "SimpleRange.h" Doesn't seem right that we have to import Position.h here. +- (CGRect)frameForRange:(NSRange)range +{ + auto webRange = [self convertToDOMRange:range]; + if (!webRange) + return CGRectZero; + auto rect = self.axBackingObject->boundsForRange(*webRange); + return [self convertRectToSpace:rect space:AccessibilityConversionSpace::Screen]; +} Don't we need to check for if (![self _prepareAccessibilityCall]) --- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.h +++ a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.h +- (WebCore::FloatRect)accessibilityUnobscuredContentRect; Shouldn't this be in the core code instead of in the wrapper? +- (std::optional<WebCore::SimpleRange>)convertToDOMRange:(NSRange)range; ... +extern NSRange convertToNSRange(const WebCore::SimpleRange&); Can we make the first one also a function so that we have a symmetric pair of convert functions? Also consider "make" instead of "convert" for the names since it seems that that's the trend in other conversion functions in WebKit. --- a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm +++ a/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm +- (FloatRect)accessibilityUnobscuredContentRect +{ + auto document = self.axBackingObject->document(); + if (!document || !document->view()) + return { }; + return FloatRect(snappedIntRect(document->view()->unobscuredContentRect())); +} Should be an AXCoreObject method instead. +- (NSRange)accessibilityVisibleCharacterRange The algorithm implementation of moving by line and intersecting with the given rect should be a core method, and then this wrapper method would do the conversions to NSRange of the result. + NSRange fullRange = convertToNSRange(SimpleRange(*startBoundary, *endBoundary)); Can we use initializer list instead of SimpleRange(...)? +- (WebCore::AXCoreObject*)initializeBackingStore This does more than initializing, it updates. Since we already are using updateObjectBackingStore, perhaps we can call this one just updateBackingStore? or _updateBackingStore?
Andres Gonzalez
Comment 9
2021-11-19 06:54:15 PST
(In reply to chris fleizach from
comment #6
)
> Created
attachment 444785
[details]
> patch
The test should also be enabled on iOS.
chris fleizach
Comment 10
2021-11-19 17:07:52 PST
Created
attachment 444872
[details]
patch
chris fleizach
Comment 11
2021-11-19 17:09:34 PST
Created
attachment 444873
[details]
patch
chris fleizach
Comment 12
2021-11-19 17:16:15 PST
Created
attachment 444874
[details]
patch
chris fleizach
Comment 13
2021-11-19 23:58:09 PST
Created
attachment 444885
[details]
patch
chris fleizach
Comment 14
2021-11-19 23:59:01 PST
Created
attachment 444886
[details]
patch
chris fleizach
Comment 15
2021-11-20 00:00:09 PST
Created
attachment 444887
[details]
patch
chris fleizach
Comment 16
2021-11-20 00:11:55 PST
Created
attachment 444889
[details]
patch
chris fleizach
Comment 17
2021-11-20 22:05:10 PST
Created
attachment 444916
[details]
patch
chris fleizach
Comment 18
2021-11-20 22:55:32 PST
Created
attachment 444917
[details]
patch
chris fleizach
Comment 19
2021-11-20 23:37:11 PST
Created
attachment 444918
[details]
patch
chris fleizach
Comment 20
2021-11-21 21:34:51 PST
Created
attachment 444940
[details]
patch
chris fleizach
Comment 21
2021-11-21 21:37:10 PST
Created
attachment 444941
[details]
patch
chris fleizach
Comment 22
2021-11-21 21:38:26 PST
Created
attachment 444942
[details]
patch
Andres Gonzalez
Comment 23
2021-11-22 06:52:26 PST
(In reply to chris fleizach from
comment #22
)
> Created
attachment 444942
[details]
> patch
--- a/Source/WebCore/accessibility/AccessibilityObject.cpp +++ a/Source/WebCore/accessibility/AccessibilityObject.cpp +std::optional<SimpleRange> AccessibilityObject::visibleCharacterRange() const +{ ... + return SimpleRange(*startBoundary, *endBoundary); +} I think you may be able to do the more stylish: return {{ *startBoundary, *endBoundary }};
chris fleizach
Comment 24
2021-11-22 07:41:00 PST
Created
attachment 444966
[details]
patch
EWS
Comment 25
2021-11-22 12:34:26 PST
Committed
r286116
(
244503@main
): <
https://commits.webkit.org/244503@main
> All reviewed patches have been landed. Closing bug and clearing flags on
attachment 444966
[details]
.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug