WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
76677
AXPress event coordinates are always sent as (0, 0)
https://bugs.webkit.org/show_bug.cgi?id=76677
Summary
AXPress event coordinates are always sent as (0, 0)
Samuel White
Reported
2012-01-19 17:32:08 PST
WebKit sends clientX and clientY coordinates as (0,0) when handling AXPress events.
Attachments
First pass patch
(6.55 KB, patch)
2012-01-19 18:01 PST
,
Samuel White
no flags
Details
Formatted Diff
Diff
Patch.
(9.17 KB, patch)
2012-02-20 01:48 PST
,
Samuel White
no flags
Details
Formatted Diff
Diff
Patch.
(8.97 KB, patch)
2012-02-20 10:29 PST
,
Samuel White
no flags
Details
Formatted Diff
Diff
Fixed style patch.
(9.48 KB, patch)
2012-02-24 11:12 PST
,
Samuel White
simon.fraser
: review-
Details
Formatted Diff
Diff
Patch with review changes.
(9.85 KB, patch)
2012-03-06 00:57 PST
,
Samuel White
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Build fix patch.
(9.92 KB, patch)
2012-03-06 10:20 PST
,
Samuel White
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Updated patch.
(9.40 KB, patch)
2013-08-14 13:57 PDT
,
Samuel White
buildbot
: commit-queue-
Details
Formatted Diff
Diff
Archive of layout-test-results from webkit-ews-02 for mac-mountainlion
(816.03 KB, application/zip)
2013-08-16 06:16 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from webkit-ews-09 for mac-mountainlion-wk2
(463.81 KB, application/zip)
2013-08-16 18:02 PDT
,
Build Bot
no flags
Details
Added screen coordinates to simulated click.
(10.78 KB, patch)
2013-08-19 13:41 PDT
,
Samuel White
cfleizach
: review-
buildbot
: commit-queue-
Details
Formatted Diff
Diff
Archive of layout-test-results from webkit-ews-05 for mac-mountainlion
(710.18 KB, application/zip)
2013-08-19 16:08 PDT
,
Build Bot
no flags
Details
Updated patch.
(11.70 KB, patch)
2013-08-20 13:12 PDT
,
Samuel White
simon.fraser
: review-
Details
Formatted Diff
Diff
Updated patch.
(11.55 KB, patch)
2013-10-16 11:42 PDT
,
Samuel White
simon.fraser
: review+
Details
Formatted Diff
Diff
Final patch.
(11.48 KB, patch)
2013-12-03 11:32 PST
,
Samuel White
no flags
Details
Formatted Diff
Diff
Show Obsolete
(9)
View All
Add attachment
proposed patch, testcase, etc.
Samuel White
Comment 1
2012-01-19 18:01:08 PST
Created
attachment 123231
[details]
First pass patch I've spun my wheels a bit attacking this problem from a few different directions. I've come to believe the most elegant solution is to handle the AXPress case directly in the event dispatcher. I've attached a rough patch in hopes that someone might have some good feedback. Thanks.
chris fleizach
Comment 2
2012-01-20 09:03:12 PST
Comment on
attachment 123231
[details]
First pass patch I think we want to modify all simulated clicks to send the mid point of the object in question. Just doing it when AX is enabled is not a great check, because then we have different behavior whether VO is on or off which leads to all kinds of confusion. I think that SimulatedMouseClick that's already dispatched should take some coordinates. You can probably copy enough of the logic in the click point routine to get the point you want for an object
chris fleizach
Comment 3
2012-01-20 09:03:56 PST
I also like using the shouldBe paradigm from the js-test methods because it provides a standardized way for asserting things should be true or false
Samuel White
Comment 4
2012-02-20 01:48:53 PST
Created
attachment 127783
[details]
Patch. Thanks for the feedback. I think I've addressed your concerns in the following patch I'm proposing.
chris fleizach
Comment 5
2012-02-20 08:05:46 PST
This looks good to me. Beth, can you take a look at this to make sure it's OK as well
Samuel White
Comment 6
2012-02-20 10:29:42 PST
Created
attachment 127831
[details]
Patch. Removed screen coordinates from the test as these values will differ depending on where the test window is positioned and seem likely to cause this test to fail. For example, the test would have failed if you ran it manually since you could position your window anywhere. Since screen coordinates are based on client coordinates I think this change is ok and doesn't make the test any less valid.
WebKit Commit Bot
Comment 7
2012-02-23 19:05:14 PST
Attachment 127831
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1 Source/WebCore/dom/MouseEvent.cpp:27: Alphabetical sorting problem. [build/include_order] [4] Source/WebCore/dom/MouseEvent.h:106: The parameter name "node" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/dom/MouseEvent.h:110: The parameter name "node" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 3 in 7 files Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1 Source/WebCore/dom/MouseEvent.cpp:27: Alphabetical sorting problem. [build/include_order] [4] Source/WebCore/dom/MouseEvent.h:106: The parameter name "node" adds no information, so it should be removed. [readability/parameter_name] [5] Source/WebCore/dom/MouseEvent.h:110: The parameter name "node" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 3 in 7 files If any of these errors are false positives, please file a bug against check-webkit-style.
Samuel White
Comment 8
2012-02-24 11:12:02 PST
Created
attachment 128771
[details]
Fixed style patch. Fixed style errors found by bots.
Eric Seidel (no email)
Comment 9
2012-02-24 11:30:05 PST
How do simulated mouse events arrise? What is the "underlyingEvent"? I'm assuming there is no actual mouse coordinates on the event, which is why we use the middle of the target element?
chris fleizach
Comment 10
2012-02-24 11:32:16 PST
(In reply to
comment #9
)
> How do simulated mouse events arrise? What is the "underlyingEvent"? I'm assuming there is no actual mouse coordinates on the event, which is why we use the middle of the target element?
They arise from things like accessibility clients asking to "press" on an element. It will then simulate a mouse click in order to accomplish that. There are no mouse coordinates otherwise available
Simon Fraser (smfr)
Comment 11
2012-02-24 11:43:53 PST
Comment on
attachment 128771
[details]
Fixed style patch. View in context:
https://bugs.webkit.org/attachment.cgi?id=128771&action=review
> Source/WebCore/dom/MouseEvent.cpp:184 > + int clientX = rect.location().x() + rect.size().width() / 2; > + int clientY = rect.location().y() + rect.size().height() / 2;
absoluteBoundingBoxRect is document-relative. clientX and clientY should be viewport-relative, given their names. This will break in subframes, CSS-transformed subframes, and scrolled documents. All these cases should be tested.
> Source/WebCore/dom/MouseEvent.cpp:186 > + m_screenLocation = IntPoint(clientX + domWindow->screenX(), clientY + domWindow->screenY());
I don't think that's a good way to convert to screen coordinates. It would be best to use the methods on Widget.h to convert to the containing window. Not sure how best to go from there to the screen.
> LayoutTests/ChangeLog:6 > + Make sure AXPress events target an elements center point.
element's
> LayoutTests/platform/mac/accessibility/press-event-has-target-coordinates.html:8 > +<button id="button" style="height:30px; width:60px;">Submit</button>
It would be nice to test with a CSS-transformed element too.
Samuel White
Comment 12
2012-02-24 12:37:30 PST
(In reply to
comment #9
)
> How do simulated mouse events arrise? What is the "underlyingEvent"? I'm assuming there is no actual mouse coordinates on the event, which is why we use the middle of the target element?
The underlying event may be a mouse event, in which case we use the coords associated with that event. But as Chris mentioned screen reader press events have no associated underlying mouse event so in this case it is most appropriate to use the elements center.
Samuel White
Comment 13
2012-03-06 00:57:10 PST
Created
attachment 130326
[details]
Patch with review changes. I've addressed Simon's concerns in the following patch which is now CSS transform aware and includes a test for this. I also reevaluated how screenX & screenY are computed as Simon suggested but in the end decided to leave that part alone for two reasons. First, I couldn't find any case that wasn't supported by the current implementation and secondly, I tried to stay away from platform dependence where possible. Let me know what you think and thanks again for any feedback.
WebKit Review Bot
Comment 14
2012-03-06 02:01:23 PST
Comment on
attachment 130326
[details]
Patch with review changes.
Attachment 130326
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11836243
Samuel White
Comment 15
2012-03-06 10:20:54 PST
Created
attachment 130400
[details]
Build fix patch. Should fix the issue EWS found above.
WebKit Review Bot
Comment 16
2012-03-06 11:23:23 PST
Comment on
attachment 130400
[details]
Build fix patch.
Attachment 130400
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/11805008
New failing tests: fast/forms/mailto/formenctype-attribute-input-html.html fast/events/stopPropagation-submit.html fast/forms/mailto/formenctype-attribute-button-html.html
Samuel White
Comment 17
2012-03-06 11:48:55 PST
Looks like nothing is passing Chromium Linux EWS at the moment. I'll wait until things clear up and submit again in the future.
Adam Barth
Comment 18
2012-03-06 13:33:11 PST
> Looks like nothing is passing Chromium Linux EWS at the moment. I'll wait until things clear up and submit again in the future.
There are always some failing tests. The ones posted in the comment should just be the ones that are new after your patch.
Samuel White
Comment 19
2013-08-14 13:57:52 PDT
Created
attachment 208759
[details]
Updated patch.
Samuel White
Comment 20
2013-08-14 14:00:03 PDT
I've attached an updated patch (since this issue has been dormant for so long). I'm still having some trouble computing screen coordinates for the simulated mouse event. See the FIXME line in the patch. Any help here would be great! Thanks.
chris fleizach
Comment 21
2013-08-14 14:49:21 PDT
Comment on
attachment 208759
[details]
Updated patch. View in context:
https://bugs.webkit.org/attachment.cgi?id=208759&action=review
> LayoutTests/platform/mac/accessibility/press-targets-center-point.html:10 > +<button id="button" style="-webkit-transform:translate(240px, 240px); height:30px; width:48px;">Press</button>
you should also have a non transformed case
> LayoutTests/platform/mac/accessibility/press-targets-center-point.html:21 > + actual.innerHTML = "Waiting for press";
this seems unncessary
> LayoutTests/platform/mac/accessibility/press-targets-center-point.html:36 > + button.focus();
you don't need to focus first, you can just call accessibilityController.accessibleElementById("id")
> Source/WebCore/dom/MouseEvent.cpp:263 > +SimulatedMouseEvent::SimulatedMouseEvent(const AtomicString& eventType, PassRefPtr<AbstractView> view, PassRefPtr<Event> underlyingEvent, PassRefPtr<Element> targetElement)
I don't think Element needs to be a pass ref ptr, because you don't need to maintain a reference to that object beyond its creation.
> Source/WebCore/dom/MouseEvent.cpp:286 > + m_screenLocation = IntPoint(0, 0); // FIXME: m_screenLocation should be set here.
there's a screenRect() method on Element that might help
Build Bot
Comment 22
2013-08-16 06:16:25 PDT
Comment on
attachment 208759
[details]
Updated patch.
Attachment 208759
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.appspot.com/results/1473438
New failing tests: fast/forms/mailto/formenctype-attribute-input-html.html fast/events/stopPropagation-submit.html fast/forms/mailto/formenctype-attribute-button-html.html
Build Bot
Comment 23
2013-08-16 06:16:28 PDT
Created
attachment 208921
[details]
Archive of layout-test-results from webkit-ews-02 for mac-mountainlion The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: webkit-ews-02 Port: mac-mountainlion Platform: Mac OS X 10.8.4
Build Bot
Comment 24
2013-08-16 18:02:49 PDT
Comment on
attachment 208759
[details]
Updated patch.
Attachment 208759
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.appspot.com/results/1465853
New failing tests: fast/forms/mailto/formenctype-attribute-input-html.html fast/events/stopPropagation-submit.html fast/forms/mailto/formenctype-attribute-button-html.html
Build Bot
Comment 25
2013-08-16 18:02:54 PDT
Created
attachment 208969
[details]
Archive of layout-test-results from webkit-ews-09 for mac-mountainlion-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: webkit-ews-09 Port: mac-mountainlion-wk2 Platform: Mac OS X 10.8.4
Samuel White
Comment 26
2013-08-19 13:41:29 PDT
Created
attachment 209117
[details]
Added screen coordinates to simulated click. Also addressed feedback from Chris. I believe two of the failing tests are false positives. Both "formenctype-attribute-input-html" and "formenctype-attribute-button-html" were previously listing the originator of 'form submitted' as "HTML > #document". This patch changes that to "INPUT > FORM > BODY > HTML > #document" which I would think is more accurate.
Ryosuke Niwa
Comment 27
2013-08-19 14:08:32 PDT
Comment on
attachment 209117
[details]
Added screen coordinates to simulated click. View in context:
https://bugs.webkit.org/attachment.cgi?id=209117&action=review
> Source/WebCore/dom/MouseEvent.cpp:286 > + IntRect targetScreenRect = targetElement->screenRect(); > + int targetScreenX = static_cast<int>(targetScreenRect.x() + targetScreenRect.width() / 2); > + int targetScreenY = static_cast<int>(targetScreenRect.y() + targetScreenRect.height() / 2);
Can we add a test to make sure this code works in RTL and vertical writing mode?
chris fleizach
Comment 28
2013-08-19 15:25:17 PDT
Comment on
attachment 209117
[details]
Added screen coordinates to simulated click. View in context:
https://bugs.webkit.org/attachment.cgi?id=209117&action=review
> LayoutTests/platform/mac/accessibility/press-targets-center-point.html:9 > +<button id="button1" style="height:30px; width:48px;">Press</button>
The name of the button 'press' can reflect what it's testing -- 'transformed element', 'right to left' etc, etc, for easier results reading when something fails in the future
James Craig
Comment 29
2013-08-19 16:00:22 PDT
<
rdar://problem/10467360
>
Build Bot
Comment 30
2013-08-19 16:08:49 PDT
Comment on
attachment 209117
[details]
Added screen coordinates to simulated click.
Attachment 209117
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.appspot.com/results/1503669
New failing tests: fast/forms/mailto/formenctype-attribute-input-html.html fast/events/stopPropagation-submit.html fast/forms/mailto/formenctype-attribute-button-html.html
Build Bot
Comment 31
2013-08-19 16:08:53 PDT
Created
attachment 209133
[details]
Archive of layout-test-results from webkit-ews-05 for mac-mountainlion The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: webkit-ews-05 Port: mac-mountainlion Platform: Mac OS X 10.8.4
Samuel White
Comment 32
2013-08-20 13:12:59 PDT
Created
attachment 209222
[details]
Updated patch. Added vertical writing mode and right-to-left direction tests. Are there any other cases we should be testing? Thanks.
chris fleizach
Comment 33
2013-08-21 11:28:56 PDT
Comment on
attachment 209222
[details]
Updated patch. View in context:
https://bugs.webkit.org/attachment.cgi?id=209222&action=review
> Source/WebCore/dom/MouseEvent.cpp:286 > + int targetScreenY = static_cast<int>(targetScreenRect.y() + targetScreenRect.height() / 2);
There's a center() method on IntRect that you should be able to use directly
Simon Fraser (smfr)
Comment 34
2013-08-21 11:41:50 PDT
Comment on
attachment 209222
[details]
Updated patch. View in context:
https://bugs.webkit.org/attachment.cgi?id=209222&action=review
> Source/WebCore/dom/MouseEvent.cpp:289 > + // Handle flipped screen coordinates on Mac. > + targetScreenY = static_cast<int>(targetElement->document()->domWindow()->screen()->height() - targetScreenY);
For events, this mapping uses NSPoint flipScreenPoint(const NSPoint& screenPoint, NSScreen *screen) I don't think your code handles screens whose Y offset is not zero. I'd prefer this screen flipping code to be shared with the code that initializes events.
James Craig
Comment 35
2013-09-30 11:18:29 PDT
***
Bug 13659
has been marked as a duplicate of this bug. ***
Samuel White
Comment 36
2013-10-16 11:42:09 PDT
Created
attachment 214379
[details]
Updated patch. Uploading revised patch to get an exhaustive list of failing tests that need to be updated.
Samuel White
Comment 37
2013-10-16 19:27:50 PDT
(In reply to
comment #34
)
> (From update of
attachment 209222
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=209222&action=review
> > > Source/WebCore/dom/MouseEvent.cpp:289 > > + // Handle flipped screen coordinates on Mac. > > + targetScreenY = static_cast<int>(targetElement->document()->domWindow()->screen()->height() - targetScreenY); > > For events, this mapping uses NSPoint flipScreenPoint(const NSPoint& screenPoint, NSScreen *screen) > > I don't think your code handles screens whose Y offset is not zero. > > I'd prefer this screen flipping code to be shared with the code that initializes events.
Newest patch uses a more robust coordinate flipping solution in the simulated event init as suggested. Thanks for the feedback.
Simon Fraser (smfr)
Comment 38
2013-11-20 12:41:47 PST
Comment on
attachment 214379
[details]
Updated patch. View in context:
https://bugs.webkit.org/attachment.cgi?id=214379&action=review
> Source/WebCore/dom/Element.cpp:1004 > + return document().view()->contentsToRootView(renderer->absoluteBoundingBoxRect());
Does this do the right thing if the root view is scrolled?
> Source/WebCore/dom/Element.cpp:1011 > + if (RenderObject* renderer = this->renderer()) > + return document().view()->contentsToScreen(renderer->absoluteBoundingBoxRect());
Is this actually fixing a bug? Should you add a test for it?
> Source/WebCore/dom/Element.h:226 > +
Whitespace
Samuel White
Comment 39
2013-12-03 11:24:47 PST
(In reply to
comment #38
)
> (From update of
attachment 214379
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=214379&action=review
> > > Source/WebCore/dom/Element.cpp:1004 > > + return document().view()->contentsToRootView(renderer->absoluteBoundingBoxRect()); > > Does this do the right thing if the root view is scrolled?
Good thought, it does.
> > > Source/WebCore/dom/Element.cpp:1011 > > + if (RenderObject* renderer = this->renderer()) > > + return document().view()->contentsToScreen(renderer->absoluteBoundingBoxRect()); > > Is this actually fixing a bug? Should you add a test for it?
Not a bug fix per say, just FIXME cleanup (moving over to the more robust method). Surprisingly, we only have three existing call sites for this method and none of the associated layout tests suffer.
> > > Source/WebCore/dom/Element.h:226 > > + > > Whitespace
Fixed.
Samuel White
Comment 40
2013-12-03 11:32:52 PST
Created
attachment 218317
[details]
Final patch. Checking EWS again to be safe. Some time has passed since this patch was originally uploaded. Will commit manually if all goes well. Thanks.
Samuel White
Comment 41
2013-12-03 12:58:56 PST
Committed in
http://trac.webkit.org/changeset/160032
Closing.
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