Closed
Bug 1003934
Opened 11 years ago
Closed 11 years ago
[e10s] Tooltips persist when moving mouse out of content through edge overlapping element
Categories
(Firefox :: General, defect)
Tracking
()
VERIFIED
FIXED
Firefox 32
People
(Reporter: smacleod, Assigned: jimm)
References
(Blocks 1 open bug)
Details
Attachments
(4 files, 5 obsolete files)
To reproduce:
a) Open an e10s window
b) Load a page where a large element with a tooltip can be scrolled so it is cut off at edge of the content (I used the image at http://www.exocomics.com/325)
c) Move the mouse over the element with a tooltip, and then out of the content area (the mouse must leave the content area where the element meets the edge)
d) A tooltip will be displayed and will persist even through operations such as switching tabs.
I was able to reproduce this on OS X and mconley reproduced on Windows 7.
Reporter | ||
Comment 1•11 years ago
|
||
The underlying problem here might also relate to Bug 1003943
Updated•11 years ago
|
tracking-e10s:
--- → ?
![]() |
Assignee | |
Updated•11 years ago
|
Assignee: nobody → jmathies
![]() |
Assignee | |
Updated•11 years ago
|
Status: NEW → ASSIGNED
![]() |
Assignee | |
Comment 2•11 years ago
|
||
(In reply to Steven MacLeod [:smacleod] from comment #0)
> To reproduce:
>
> a) Open an e10s window
> b) Load a page where a large element with a tooltip can be scrolled so it is
> cut off at edge of the content (I used the image at
> http://www.exocomics.com/325)
> c) Move the mouse over the element with a tooltip, and then out of the
> content area (the mouse must leave the content area where the element meets
> the edge)
> d) A tooltip will be displayed and will persist even through operations such
> as switching tabs.
>
> I was able to reproduce this on OS X and mconley reproduced on Windows 7.
I'm not having any luck reproducing this on the test case cited here. Steve, are you still seeing this?
Flags: needinfo?(smacleod)
Reporter | ||
Comment 3•11 years ago
|
||
(In reply to Jim Mathies [:jimm] from comment #2)
> (In reply to Steven MacLeod [:smacleod] from comment #0)
> > To reproduce:
> >
> > a) Open an e10s window
> > b) Load a page where a large element with a tooltip can be scrolled so it is
> > cut off at edge of the content (I used the image at
> > http://www.exocomics.com/325)
> > c) Move the mouse over the element with a tooltip, and then out of the
> > content area (the mouse must leave the content area where the element meets
> > the edge)
> > d) A tooltip will be displayed and will persist even through operations such
> > as switching tabs.
> >
> > I was able to reproduce this on OS X and mconley reproduced on Windows 7.
>
> I'm not having any luck reproducing this on the test case cited here. Steve,
> are you still seeing this?
Mike and I can reproduce on latest nightlies. He's going to post a short video demoing how to reproduce.
Flags: needinfo?(smacleod) → needinfo?(mconley)
![]() |
Assignee | |
Comment 5•11 years ago
|
||
(In reply to Mike Conley (:mconley) from comment #4)
> Here we go:
>
> http://www.screencast.com/t/xShwrym7
Thanks, that helped. I can confirm still present on win as well.
![]() |
Assignee | |
Comment 6•11 years ago
|
||
I'm able to reproduce this by hovering over the bookmarks toolbar, implying mouse input is getting sent to the content process despite chrome being under the mouse. This seems like a larger issue than just hiding a tooltip at the right time.
![]() |
Assignee | |
Comment 7•11 years ago
|
||
(In reply to Jim Mathies [:jimm] from comment #6)
> I'm able to reproduce this by hovering over the bookmarks toolbar, implying
> mouse input is getting sent to the content process despite chrome being
> under the mouse. This seems like a larger issue than just hiding a tooltip
> at the right time.
Actually this isn't as bad as I thought.. if you drag up from the image, you get the delayed tooltip, but if you drag up from outside the image and over you don't.
![]() |
Assignee | |
Comment 8•11 years ago
|
||
![]() |
Assignee | |
Comment 9•11 years ago
|
||
![]() |
Assignee | |
Comment 10•11 years ago
|
||
![]() |
Assignee | |
Comment 11•11 years ago
|
||
Once this forwards over, it triggers a mouseout event for the content frame, which shuts down the pending tooltip display event in ChromeTooltipListener located in nsDocShellTreeOwner.cpp.
Good STR to reproduce:
1) opent etest case able
2) scroll the image up so the top of the image is under the bookmarks toolbar.
3) move the mouse from the image over empty chrome in the toolbar.
4) hold the mouse there for a sec.
resut: the image tooltip will display shortly over chrome.
with this patch: the tooltip doesn't display.
Attachment #8425761 -
Attachment is obsolete: true
Attachment #8426219 -
Flags: review?(bugs)
Comment 12•11 years ago
|
||
patch generated with -P would be easier to review.
Comment 13•11 years ago
|
||
Comment on attachment 8426219 [details] [diff] [review]
forward NS_MOUSE_EXIT_SYNTH to content patch v.1
I don't understand this setup.
Why would we dispatch EXIT_SYNTH but not ENTER_SYNTH?
But I agree we should dispatch an event to the child process.
When the iframe in the parent gets EXIT_SYNTH, child should probably get
NS_MOUSE_EXIT. That way child would end up creating right kinds of events.
Attachment #8426219 -
Flags: review?(bugs) → review-
![]() |
Assignee | |
Comment 14•11 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #13)
> Comment on attachment 8426219 [details] [diff] [review]
> forward NS_MOUSE_EXIT_SYNTH to content patch v.1
>
> I don't understand this setup.
> Why would we dispatch EXIT_SYNTH but not ENTER_SYNTH?
enter events are generated by the child process in mouse move handling their generation is self contained.
http://mxr.mozilla.org/mozilla-central/source/dom/events/EventStateManager.cpp#3750
>
> But I agree we should dispatch an event to the child process.
> When the iframe in the parent gets EXIT_SYNTH, child should probably get
> NS_MOUSE_EXIT. That way child would end up creating right kinds of events.
I'm not sure what you're getting at here.. NS_MOUSE_EXIT_SYNTH generates the proper dom events in the child.
Comment 15•11 years ago
|
||
local (running in the current process) EventStateManager should generate NS_MOUSE_EXIT_SYNTH events.
widget level code deals with non-synth.
![]() |
Assignee | |
Comment 16•11 years ago
|
||
Attachment #8426219 -
Attachment is obsolete: true
![]() |
Assignee | |
Comment 17•11 years ago
|
||
Attachment #8426395 -
Flags: review?(bugs)
Comment 18•11 years ago
|
||
Comment on attachment 8426395 [details] [diff] [review]
forward NS_MOUSE_EXIT to remote content patch v.2
We need to still dispatch mouseout (NS_MOUSE_EXIT_SYNTH) to the xul:browser, and then also dispatch NS_MOUSE_EXIT to the child process.
Attachment #8426395 -
Flags: review?(bugs) → review-
![]() |
Assignee | |
Comment 19•11 years ago
|
||
Attachment #8426395 -
Attachment is obsolete: true
![]() |
Assignee | |
Comment 20•11 years ago
|
||
Attachment #8426485 -
Attachment is obsolete: true
![]() |
Assignee | |
Updated•11 years ago
|
Attachment #8426954 -
Flags: review?(bugs)
Comment 21•11 years ago
|
||
Comment on attachment 8426954 [details] [diff] [review]
patch v.3
>+ mCurrentTargetContent = nullptr;
>+
>+ if (!aTargetContent || !aMouseEvent) {
Why null check for aMouseEvent. The old code doesn't seem to have it.
>+ if (!mPresContext) {
>+ mCurrentTargetContent = nullptr;
>+ mCurrentTarget = previousTarget;
>+ return nullptr;
>+ }
I would just keep the following code inside
if (mPresContext) so that we don't need to have
>+ mCurrentTargetContent = nullptr;
>+ mCurrentTarget = previousTarget;
twice.
>+ // If we are leaving remote content, dispatch a mouse exit event to the
>+ // remote frame.
>+ if (IsRemoteTarget(aTargetContent)) {
>+ // For remote content, send a normal widget mouse exit event.
>+ uint32_t message = aMessage;
>+ if (message == NS_MOUSE_EXIT_SYNTH) {
>+ message = NS_MOUSE_EXIT;
> }
So you end up sending all the mouse events to child, not only mouse_exit.
if (message == NS_MOUSE_EXIT_SYNTH && IsRemoteTarget(aTargetContent)) {
message = NS_MOUSE_EXIT;
...
Attachment #8426954 -
Flags: review?(bugs) → review-
![]() |
Assignee | |
Comment 22•11 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #21)
> >+ // If we are leaving remote content, dispatch a mouse exit event to the
> >+ // remote frame.
> >+ if (IsRemoteTarget(aTargetContent)) {
> >+ // For remote content, send a normal widget mouse exit event.
> >+ uint32_t message = aMessage;
> >+ if (message == NS_MOUSE_EXIT_SYNTH) {
> >+ message = NS_MOUSE_EXIT;
> > }
> So you end up sending all the mouse events to child, not only mouse_exit.
> if (message == NS_MOUSE_EXIT_SYNTH && IsRemoteTarget(aTargetContent)) {
> message = NS_MOUSE_EXIT;
> ...
Well, we would only send what DispatchMouseOrPointerEvent sends and what CrossProcessSafeEvent allows, which is only NS_MOUSE_EXIT currently. But I can go ahead and update per your comment.
![]() |
Assignee | |
Comment 23•11 years ago
|
||
(In reply to Olli Pettay [:smaug] from comment #21)
> Comment on attachment 8426954 [details] [diff] [review]
> patch v.3
>
> >+ mCurrentTargetContent = nullptr;
> >+
> >+ if (!aTargetContent || !aMouseEvent) {
> Why null check for aMouseEvent. The old code doesn't seem to have it.
Seemed like a safe thing to do, we dref aMouseEvent in CreateMouseOrPointerWidgetEvent. Are you sure you want to take this out?
![]() |
Assignee | |
Comment 24•11 years ago
|
||
- null event pointer checks removed
- code wrapped in if (mPresContext) {..}
- special cased NS_MOUSE_EXIT_SYNTH
Attachment #8426954 -
Attachment is obsolete: true
Attachment #8427166 -
Flags: review?(bugs)
Comment 25•11 years ago
|
||
Comment on attachment 8427166 [details] [diff] [review]
patch v.4
> EventStateManager::DispatchMouseOrPointerEvent(WidgetMouseEvent* aMouseEvent,
> uint32_t aMessage,
> nsIContent* aTargetContent,
> nsIContent* aRelatedContent)
> {
> // http://dvcs.w3.org/hg/webevents/raw-file/default/mouse-lock.html#methods
>- // "[When the mouse is locked on an element...e]vents that require the concept
>+ // "[When the mouse is locked on an element...events that require the concept
No need for this, or remove also [
Attachment #8427166 -
Flags: review?(bugs) → review+
![]() |
Assignee | |
Comment 26•11 years ago
|
||
![]() |
Assignee | |
Comment 27•11 years ago
|
||
Comment 28•11 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 32
Comment 29•11 years ago
|
||
Setting for verification in 34 since there is not enough time to investigate this at the moment.
Target Milestone: Firefox 32 → Firefox 34
Comment 30•11 years ago
|
||
Target Milestone is used as the reference field for us to know when a fix first landed, so it's usually only changed if there has been a backout and the fix relanded in a later cycle. Can you use a different strategy for your tracking?
Flags: needinfo?(florin.mezei)
Updated•11 years ago
|
Target Milestone: Firefox 34 → Firefox 32
Comment 31•11 years ago
|
||
(In reply to :Felipe Gomes from comment #30)
> Target Milestone is used as the reference field for us to know when a fix
> first landed, so it's usually only changed if there has been a backout and
> the fix relanded in a later cycle. Can you use a different strategy for your
> tracking?
I thought since e10s is currently tracked in 34 this would be ok (since we also need to verify it in 34). Since it's important for you to not change the Target Milestone in this case, I guess setting the status-firefox34 to fixed would be an option for us... however, since we actually got some help and we have some time at the moment, we'll just verify it in both 32 & 34 and get this out of the way.
Flags: needinfo?(florin.mezei)
Comment 32•11 years ago
|
||
I was able to reproduce the initial issue on Nightly 32.0a1 (2014-04-30).
This is now verified fixed on Firefox 32 Beta 9 (BuildID: 20140822024446) and latest Nightly 34.0a1 (builID: 20140824030210).
Comment 33•11 years ago
|
||
I forgot to mention that the issue was verified on Windows 7 32bit, Ubuntu 13.10 32bit and Mac OSX 10.9.4.
Keywords: verifyme
You need to log in
before you can comment on or make changes to this bug.
Description
•