|
|
Created:
4 years, 4 months ago by kenrb Modified:
4 years, 3 months ago CC:
chromium-reviews, jam, darin-cc_chromium.org, site-isolation-reviews_chromium.org Base URL:
https://chromium.googlesource.com/chromium/src.git@master Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
DescriptionGenerate MouseEnter/MouseLeave events between processes.
As the mouse cursor moves across OOPIF boundaries, elements in
other processes that have certain mouse event handlers might require
notification in order to fire those handlers. An example is MouseLeave,
which is not currently fired when the MouseMove is directed to a
parent frame.
This CL tracks the last RenderWidgetHostView to receive a mouse
event and sends appropriate events to other renderers when that changes.
BUG=632035
Committed: https://crrev.com/89ed0412083300318a04a2d4302a77f4d8b76cc9
Cr-Commit-Position: refs/heads/master@{#418629}
Patch Set 1 #Patch Set 2 : Rebase #Patch Set 3 : Rebase again #Patch Set 4 : Working CL, without test #Patch Set 5 : Fixed a merge error #Patch Set 6 : Attempt at fixing red try bots #Patch Set 7 : Test added #Patch Set 8 : Bug fix #Patch Set 9 : Testing something #Patch Set 10 : Tweak #Patch Set 11 : Rebase #Patch Set 12 : Attempting a test fix #Patch Set 13 : Experiment #Patch Set 14 : Next fix attempt #
Total comments: 6
Patch Set 15 : Review comments addressed #Patch Set 16 : Fix test breakages from last PS #
Total comments: 1
Messages
Total messages: 65 (56 generated)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: win_chromium_rel_ng on master.tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_rel_...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: cast_shell_linux on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/cast_shell_linu...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Description was changed from ========== Generate MouseEnter/MouseLeave events between processes. [WIP] BUG=632035 ========== to ========== Generate MouseEnter/MouseLeave events between processes. As the mouse cursor moves across OOPIF boundaries, elements in other processes that have certain mouse event handlers might require notification in order to fire those handlers. An example is MouseLeave, which is not currently fired when the MouseMove is directed to a parent frame. This CL tracks the last RenderWidgetHostView to receive a mouse event and sends appropriate events to other renderers when that changes. BUG=632035 ==========
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_asan_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: cast_shell_linux on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/cast_shell_linu...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_asan_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: ios-device on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-device/builds...) ios-simulator on master.tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios-simulator/bui...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: linux_chromium_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
kenrb@chromium.org changed reviewers: + nzolghadr@chromium.org
nzolghadr: PTAL? This CL implements what we discussed a few weeks ago, dispatching mouse events to multiple processes in response to a MouseMove targeted to one. Would you mind giving this a first review?
https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... File content/browser/renderer_host/render_widget_host_input_event_router.cc (right): https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:75: } When do we call this destructor? Is it when the iframe is destructed? If so if I have my mouse inside an inner iframe and the outer frame destroys the inner iframe we reset the position of the mouse totally as if it is outside everything instead of moving it to its parent. Right? https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:394: transformed_point = root_view->TransformPointToCoordSpaceForView( From the perspective of the common ancestor mouse has moved from one part of it to another. Would sending a mousemove work the same as the case below? https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:408: // incorrectly. See bug https://crbug.com/638364. I did a few tests myself. I believe sending a mousemove seems correct. Because Blink later does another hit-test and realized the mousemove is inside an iframe and sends that event to that iframe. If that reference to that iframe somehow knows it is not an in process iframe and blink cannot talk to that directly it can just ignores that forwarding as the higher layer here already did that forwarding for it.
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Thanks for the review. https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... File content/browser/renderer_host/render_widget_host_input_event_router.cc (right): https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:75: } On 2016/09/09 14:27:41, Navid Zolghadr wrote: > When do we call this destructor? Is it when the iframe is destructed? If so if I > have my mouse inside an inner iframe and the outer frame destroys the inner > iframe we reset the position of the mouse totally as if it is outside everything > instead of moving it to its parent. Right? Yes. This is called when a RenderWidgetHostView is destroyed, which corresponds to the iframe content going away (possibly because of a process crash). I've added a change to try to change last_mouse_move_target_ to its parent when it is destroyed, this isn't guaranteed to work in all cases (e.g. if the current target is nested within another OOPIF, and the parent OOPIF process crashes). https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:394: transformed_point = root_view->TransformPointToCoordSpaceForView( On 2016/09/09 14:27:41, Navid Zolghadr wrote: > From the perspective of the common ancestor mouse has moved from one part of it > to another. Would sending a mousemove work the same as the case below? Changed. https://codereview.chromium.org/2229463004/diff/260001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:408: // incorrectly. See bug https://crbug.com/638364. On 2016/09/09 14:27:41, Navid Zolghadr wrote: > I did a few tests myself. I believe sending a mousemove seems correct. Because > Blink later does another hit-test and realized the mousemove is inside an iframe > and sends that event to that iframe. If that reference to that iframe somehow > knows it is not an in process iframe and blink cannot talk to that directly it > can just ignores that forwarding as the higher layer here already did that > forwarding for it. Okay, this seems reasonable and I have changed the comment accordingly.
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: cast_shell_linux on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/cast_shell_linu...)
The CQ bit was checked by kenrb@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
lgtm https://codereview.chromium.org/2229463004/diff/300001/content/browser/render... File content/browser/renderer_host/render_widget_host_input_event_router.cc (right): https://codereview.chromium.org/2229463004/diff/300001/content/browser/render... content/browser/renderer_host/render_widget_host_input_event_router.cc:78: static_cast<RenderWidgetHostViewChildFrame*>(last_mouse_move_target_) nit: I guess the ideal solution is that target should be the first parent that is not yet destroyed. But I'm not sure if we can get it from the sequence of destroyed/crashed parents here or not. But either way that is an edge case. As long as you keep it in mind that for later that would be enough.
kenrb@chromium.org changed reviewers: + avi@chromium.org
avi: PTAL for content owner review?
lgtm
The CQ bit was checked by kenrb@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Message was sent while issue was closed.
Description was changed from ========== Generate MouseEnter/MouseLeave events between processes. As the mouse cursor moves across OOPIF boundaries, elements in other processes that have certain mouse event handlers might require notification in order to fire those handlers. An example is MouseLeave, which is not currently fired when the MouseMove is directed to a parent frame. This CL tracks the last RenderWidgetHostView to receive a mouse event and sends appropriate events to other renderers when that changes. BUG=632035 ========== to ========== Generate MouseEnter/MouseLeave events between processes. As the mouse cursor moves across OOPIF boundaries, elements in other processes that have certain mouse event handlers might require notification in order to fire those handlers. An example is MouseLeave, which is not currently fired when the MouseMove is directed to a parent frame. This CL tracks the last RenderWidgetHostView to receive a mouse event and sends appropriate events to other renderers when that changes. BUG=632035 ==========
Message was sent while issue was closed.
Committed patchset #16 (id:300001)
Message was sent while issue was closed.
Description was changed from ========== Generate MouseEnter/MouseLeave events between processes. As the mouse cursor moves across OOPIF boundaries, elements in other processes that have certain mouse event handlers might require notification in order to fire those handlers. An example is MouseLeave, which is not currently fired when the MouseMove is directed to a parent frame. This CL tracks the last RenderWidgetHostView to receive a mouse event and sends appropriate events to other renderers when that changes. BUG=632035 ========== to ========== Generate MouseEnter/MouseLeave events between processes. As the mouse cursor moves across OOPIF boundaries, elements in other processes that have certain mouse event handlers might require notification in order to fire those handlers. An example is MouseLeave, which is not currently fired when the MouseMove is directed to a parent frame. This CL tracks the last RenderWidgetHostView to receive a mouse event and sends appropriate events to other renderers when that changes. BUG=632035 Committed: https://crrev.com/89ed0412083300318a04a2d4302a77f4d8b76cc9 Cr-Commit-Position: refs/heads/master@{#418629} ==========
Message was sent while issue was closed.
Patchset 16 (id:??) landed as https://crrev.com/89ed0412083300318a04a2d4302a77f4d8b76cc9 Cr-Commit-Position: refs/heads/master@{#418629} |