Closed Bug 1174425 Opened 10 years ago Closed 7 years ago

Panel page blanks when opened from multiple windows

Categories

(Add-on SDK Graveyard :: General, defect)

defect
Not set
normal

Tracking

(Not tracked)

RESOLVED INCOMPLETE

People

(Reporter: noitidart, Unassigned)

Details

Attachments

(1 file)

User Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0 Build ID: 20150611135623 Steps to reproduce: From stackoverflow: http://stackoverflow.com/questions/30733056/blank-firefox-addon-panel-page-with-multiple-windows I've followed MDN's document to create a toggle button addon. Everything works fine except one problem: Open a second browser window (cmd+n or ctrl+n) and click on the toggle button there Click on the toggle button on the original browser window without closing the toggle button on the second window the toggle button's panel becomes blank with the following error message: JavaScript error: resource:///modules/WindowsPreviewPerTab.jsm, line 406: NS_ERR OR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIT askbarTabPreview.invalidate] Actual results: Here is a gif screencast showing what would happen: http://i.stack.imgur.com/0oY5H.gif
The test case can be probably reduced and simplified to: let { ActionButton } = require("sdk/ui/button/action"); let { Panel } = require("sdk/panel"); let button = ActionButton({ id: "button", label: "my button", icon: "./icon-16.png", onClick: () => panel.show() }); let panel = Panel({ contentURL: "./menu.html" }); The issue seems caused by a combo of `swapFrameLoader`, window's focus, and panel's event. In short, every time we open and close a panel, we swaps the frame inside, in order to keep the panel's state. We do that every showing/hidden. The issue here, is that the `hidden` event is never emitted when it disappeared automatically on the other window. Something goes wrong there, and then the order of the back frame and front frame are inverted. I believe that this is caused due the racing condition between the showing event, and the window's focus event. It seems in fact that delayed a bit the panel from showing, resolve the issue. It's not a proper fix of course, but it can be a temporary workaround. Something like: onClick: () => setTimeout(() => panel.show(), 100);
Status: UNCONFIRMED → NEW
Ever confirmed: true
Just for info: The setTimeout workaround doesn't seem to work here, running Firefox 41.0.2 on Windows 7. With or without the delay, first a 'show' event is sent, followed almost immediately by a 'hide' event (the panel even shows up for a split second but then gets closed). Clicking a second time on the button only opens the blank panel.
Status: NEW → RESOLVED
Closed: 7 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: