Bug 1340739 sidebar window is not the browser window, r?kmag
MozReview-Commit-ID: 9HBwIaAefO1
--- a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
+++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
@@ -121,12 +121,55 @@ add_task(function* sidebar_empty_panel()
// Test sidebar is opened on install
yield extension.awaitMessage("sidebar");
ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible in first window");
extension.sendMessage("set-panel");
yield extension.awaitFinish();
yield extension.unload();
});
+add_task(function* sidebar_tab_query_bug_1340739() {
+ let data = {
+ manifest: {
+ "permissions": [
+ "tabs",
+ ],
+ "sidebar_action": {
+ "default_panel": "sidebar.html",
+ },
+ },
+ useAddonManager: "temporary",
+ files: {
+ "sidebar.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"/>
+ <script src="sidebar.js"></script>
+ </head>
+ <body>
+ A Test Sidebar
+ </body></html>
+ `,
+ "sidebar.js": function() {
+ Promise.all([
+ browser.tabs.query({}).then((tabs) => {
+ browser.test.assertEq(1, tabs.length, "got tab without currentWindow");
+ }),
+ browser.tabs.query({currentWindow: true}).then((tabs) => {
+ browser.test.assertEq(1, tabs.length, "got tab with currentWindow");
+ }),
+ ]).then(() => {
+ browser.test.sendMessage("sidebar");
+ });
+ },
+ },
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(data);
+ yield extension.startup();
+ yield extension.awaitMessage("sidebar");
+ yield extension.unload();
+});
+
add_task(function* cleanup() {
// This is set on initial sidebar install.
Services.prefs.clearUserPref("extensions.sidebar-button.shown");
});
--- a/toolkit/components/extensions/ExtensionParent.jsm
+++ b/toolkit/components/extensions/ExtensionParent.jsm
@@ -361,17 +361,20 @@ class ExtensionPageContextParent extends
this.viewType = params.viewType;
extension.emit("extension-proxy-context-load", this);
}
// The window that contains this context. This may change due to moving tabs.
get xulWindow() {
- return this.xulBrowser.ownerGlobal;
+ let win = this.xulBrowser.ownerGlobal;
+ return win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDocShell)
+ .QueryInterface(Ci.nsIDocShellTreeItem).rootTreeItem
+ .QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
}
get currentWindow() {
if (this.viewType !== "background") {
return this.xulWindow;
}
}