Can't open bookmarks toolbar context menu if about:config context menu was opened first
Categories
(Firefox :: Bookmarks & History, defect, P2)
Tracking
()
People
(Reporter: mstange, Assigned: daisuke)
References
(Regression)
Details
(Keywords: regression)
Attachments
(2 files)
Steps to reproduce:
- Open a fresh Firefox window.
- Set the bookmarks bar visibility to "Always show" and make sure you have at least one bookmark visible in the bookmarks bar.
- Go to about:config and click the button to accept the risk, if shown.
- Right-click in the content area of about:config.
- Right-click on a bookmark in the bookmarks bar.
Expected results:
A context menu for the bookmark should open.
Actual results:
No context menu opens. Right-clicking repeatedly does not work either.
I think this was kinda-broken for a long time and then got really broken more recently.
Updated•4 years ago
|
Comment 1•4 years ago
|
||
There are 2 regression.
#1, Wrong context menu. i.e, incorrect context menu items are enabled and disabled.
#2, No context menu pops up. i.e, this bug.
#1 Regression window:
https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=522a2bc06f9e5d0767bb3f2e127cc21eeaeb8a78&tochange=b26753fb35e7c53082ca6eaff1fe60a4a815a740
Suspect #1 bug: Bug 1505909
#2 Regression window:
https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=a95d10a2de4dabc987709e67ca5d05be41441fb9&tochange=019d689bcd88855f2f63eb4e6c24d25e55e766c4
Suspect #2bug : Bug 1681138
Updated•4 years ago
|
Comment 2•4 years ago
|
||
Daisuke-san, would you have any spare time to debug this and try to see if we understand what's up?
Assignee | ||
Comment 3•4 years ago
|
||
Marco-san, yes, I will take a look at this.
Thanks!
Assignee | ||
Comment 4•4 years ago
|
||
Hi Marco-san,
I have investigated this issue and I'd like to know your opinion.
In direct, it seems the reason is that getViewForNode(document.popupNode)
returns null if the document.popupNode
points to a content element, at below place.
https://searchfox.org/mozilla-central/rev/a5bf5d0720f9454687f500513ac82b0c8abce5a4/browser/components/places/PlacesUIUtils.jsm#1347-1353
And, it seems we can resolve it if clear the document.popupNode
.
Regarding the timing, I can think 2 ways.
First one, clear the document.popupNode even if trigger content is none when nsMenuPopupFrame::HidePopup() like below.
https://hg.mozilla.org/try/rev/ccedd46064b0aacec38cb14c4ad88dc77ccf7e84
The other one, if getViewForNode(document.popupNode)
returns null, clear document.popupNode
once, then re-take document.popupNode
again.
https://hg.mozilla.org/try/rev/7a64a9416d249371a9f938d0a81778746a74d208
In the try, it seems that both approaches have no failures that are caused by the patch.
https://treeherder.mozilla.org/jobs?repo=try&revision=abc076b4159eb76b9d348a2786af83feb91b36c8
https://treeherder.mozilla.org/jobs?repo=try&revision=a3ea3708fbc3dcced84261c0d60a0695200af3b6
What do you think above approaches? And, one question, are there cases that we should not display the context menu because of that getViewForNode(document.popupNode)
returns null?
Comment 5•4 years ago
|
||
Thank you Daisuke, great analysis as usual.
So the first question would be why document.popupNode is sticking to the privileged content element, when we right clicked a XUL element in the chrome toolbox? Though, considered document.popupNode is deprecated according to https://developer.mozilla.org/en-US/docs/Web/API/Document/popupNode, we should probably move to the newer alternative rather than trying to fix/break it.
Using menupopup.triggerNode seems to do the job here, I don't know why this code is still using document.popupNode, in the past there used to be be bugs forcing that, but those may have gone.
I'd suggest to do some general quick testing of context menus in the Places views (menu, tree, toolbar, overflow menu, library, sidebar...) and if everything is working good, just switch the code to use triggerNode, as it should.
I'd also suggest filing a bug to remove any remaining usage of document.popupNode in Places, I think we could do someting like caching triggerNode in an expando of the context menu popup during popupshowing, and then reuse it in the various methods invoked through the context menu (though it looks like we're already caching _view, thus I wonder if that'd be enough already...)
Assignee | ||
Comment 6•4 years ago
|
||
Thank you very much for your clear direction, Marco!
I tried to use menupopup.triggerNode
instead of document.popupNode
like below.
menupopup._view = this.getViewForNode(menupopup.triggerNode);
It seems some places work, but as the screenshot, at least the context menu on the bookmark button is not correct after right-clicking on content element.
I will investigate the reason.
Comment 7•4 years ago
|
||
It's possible here there's a widget bug where privileged content confuses the code, and it's breaking both popupNode and triggerNode, if that's the case we should involve Neil Deakin or someone in widgets to help, since the problem may be more widespread than just bookmarks.
Assignee | ||
Updated•4 years ago
|
Assignee | ||
Comment 8•4 years ago
|
||
Thank you very much, Marco.
As far as I have investigated it, the reason why we could not build context menu correctly seems that we are referring to document.popupNode
in other places as well when building it.
For example here.
https://searchfox.org/mozilla-central/rev/a8b75e4ba3f8ddf0e76b42681d0a7b7e78e67730/browser/components/places/content/browserPlacesViews.js#219
So, I try to address with that set menupopup.triggerNode
to document.popupNode
before building since it seems that such places are scattered all over the place. Please see the patch.
https://hg.mozilla.org/try/rev/c67e709d66b7c5a866d132818e02f4dac9e7fbf9
(and try: https://treeherder.mozilla.org/jobs?repo=try&revision=937642129efc503b85b30f07eafd6344af4cedcf)
After that, I want to replace the places referring to document.popupNode
with menupopup.triggerNode
in bug 1706004.
But, is it okay for you?
Comment 10•4 years ago
|
||
I'm sorry there's too much bugmail traffic these days!
(In reply to Daisuke Akatsuka (:daisuke) from comment #8)
So, I try to address with that set
menupopup.triggerNode
todocument.popupNode
before building since it seems that such places are scattered all over the place. Please see the patch.
https://hg.mozilla.org/try/rev/c67e709d66b7c5a866d132818e02f4dac9e7fbf9
Maybe? Unfortunately I don't know the popupNode code well to tell if we can just replace it like that, but it may be a good stop-gap change if we have a long term plan to remove it. You should add a comment above that explaining why we do it and a TODO (Bug 1706004) with the long term plan, and then we may want to ask for review to Neil Deakin to ensure this short term strategy doesn't break other stuff.
Assignee | ||
Comment 11•4 years ago
|
||
Thank you very much for replying in your busy!
Okay, I will append the comment and make a test.
And also, I will ask Neil to review this.
Assignee | ||
Comment 12•4 years ago
|
||
The reason why the context menu is not shown is that
getViewForNode(document.popupNode)
returns null if the document.popupNode
points to a content element, at below place.
https://searchfox.org/mozilla-central/rev/a5bf5d0720f9454687f500513ac82b0c8abce5a4/browser/components/places/PlacesUIUtils.jsm#1347-1353
So, we try to take the view from menupopup.triggerNode
instead of
document.popupNode
.
However, replacing with menupopup.triggerNode
here is not enough to show the
context menu correctly since we are refferring document.popupNode while building
the context menu.
e.g. https://searchfox.org/mozilla-central/rev/a8b75e4ba3f8ddf0e76b42681d0a7b7e78e67730/browser/components/places/content/browserPlacesViews.js#219
Thus, for now, we set menupopup.triggerNode
to document.popupNode
to resolve
for short term.
In future, we may replace places refferring document.popupNode
with
other elements in Places in bug 1706004.
Comment 13•4 years ago
|
||
Comment 14•4 years ago
|
||
bugherder |
Updated•4 years ago
|
Updated•3 years ago
|
Comment 15•3 years ago
|
||
Was able to reproduce the issue on Firefox 89.0a1 (2021-03-30) under macOS 10.15.7 by following the info provided in Comment 0.
The issue is fixed on Firefox 90.0b4 and Firefox 91.0a1 (2021-06-06). Tests were performed on macOS 10.15.7, Ubuntu 20.04 and Windows 10.
Description
•