summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js b/toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js
new file mode 100644
index 0000000000..6793363698
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_file_xpi_no_process_switch.js
@@ -0,0 +1,122 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+
+const ADDON_INSTALL_ID = "addon-webext-permissions";
+
+let fileurl1 = get_addon_file_url("browser_dragdrop1.xpi");
+let fileurl2 = get_addon_file_url("browser_dragdrop2.xpi");
+
+function promiseInstallNotification(aBrowser) {
+ return new Promise(resolve => {
+ function popupshown(event) {
+ let notification = PopupNotifications.getNotification(
+ ADDON_INSTALL_ID,
+ aBrowser
+ );
+ if (!notification) {
+ return;
+ }
+
+ if (gBrowser.selectedBrowser !== aBrowser) {
+ return;
+ }
+
+ PopupNotifications.panel.removeEventListener("popupshown", popupshown);
+ ok(true, `Got ${ADDON_INSTALL_ID} popup for browser`);
+ event.target.firstChild.secondaryButton.click();
+ resolve();
+ }
+
+ PopupNotifications.panel.addEventListener("popupshown", popupshown);
+ });
+}
+
+function CheckBrowserInPid(browser, expectedPid, message) {
+ return SpecialPowers.spawn(browser, [{ expectedPid, message }], arg => {
+ is(Services.appinfo.processID, arg.expectedPid, arg.message);
+ });
+}
+
+async function testOpenedAndDraggedXPI(aBrowser) {
+ // Get the current pid for browser for comparison later.
+ let browserPid = await SpecialPowers.spawn(aBrowser, [], () => {
+ return Services.appinfo.processID;
+ });
+
+ // No process switch for XPI file:// URI in the urlbar.
+ let promiseNotification = promiseInstallNotification(aBrowser);
+ let urlbar = gURLBar;
+ urlbar.value = fileurl1.spec;
+ urlbar.focus();
+ EventUtils.synthesizeKey("KEY_Enter");
+ await promiseNotification;
+ await CheckBrowserInPid(
+ aBrowser,
+ browserPid,
+ "Check that browser has not switched process."
+ );
+
+ // No process switch for XPI file:// URI dragged to tab.
+ let tab = gBrowser.getTabForBrowser(aBrowser);
+ promiseNotification = promiseInstallNotification(aBrowser);
+ let effect = EventUtils.synthesizeDrop(
+ tab,
+ tab,
+ [[{ type: "text/uri-list", data: fileurl1.spec }]],
+ "move"
+ );
+ is(effect, "move", "Drag should be accepted");
+ await promiseNotification;
+ await CheckBrowserInPid(
+ aBrowser,
+ browserPid,
+ "Check that browser has not switched process."
+ );
+
+ // No process switch for two XPI file:// URIs dragged to tab.
+ promiseNotification = promiseInstallNotification(aBrowser);
+ let promiseNewTab = BrowserTestUtils.waitForEvent(
+ gBrowser.tabContainer,
+ "TabOpen"
+ );
+ effect = EventUtils.synthesizeDrop(
+ tab,
+ tab,
+ [
+ [{ type: "text/uri-list", data: fileurl1.spec }],
+ [{ type: "text/uri-list", data: fileurl2.spec }],
+ ],
+ "move"
+ );
+ is(effect, "move", "Drag should be accepted");
+ // When drag'n'dropping two XPIs, one is loaded in the current tab while the
+ // other one is loaded in a new tab.
+ let { target: newTab } = await promiseNewTab;
+ // This is the prompt for the first XPI in the current tab.
+ await promiseNotification;
+
+ let promiseSecondNotification = promiseInstallNotification(
+ newTab.linkedBrowser
+ );
+
+ // We switch to the second tab and wait for the prompt for the second XPI.
+ BrowserTestUtils.switchTab(gBrowser, newTab);
+ await promiseSecondNotification;
+
+ BrowserTestUtils.removeTab(newTab);
+
+ await CheckBrowserInPid(
+ aBrowser,
+ browserPid,
+ "Check that browser has not switched process."
+ );
+}
+
+// Test for bug 1175267.
+add_task(async function () {
+ await BrowserTestUtils.withNewTab(
+ "http://example.com",
+ testOpenedAndDraggedXPI
+ );
+ await BrowserTestUtils.withNewTab("about:robots", testOpenedAndDraggedXPI);
+});