Bug 1394473 - Fix up target=_blank links in RDM. r=ochameau
Sometime during Firefox 56, the `dataTransfer` property was removed, so this
started to fail. It was a bit strange anyway, since we have a principal on the
outer browser.
Adds a test to cover this use case.
MozReview-Commit-ID: 9UOCc77ZRxk
--- a/devtools/client/responsive.html/browser/tunnel.js
+++ b/devtools/client/responsive.html/browser/tunnel.js
@@ -236,28 +236,24 @@ function tunnelToInnerBrowser(outer, inn
// * Specific target names (everything treated as _blank)
// * Window features
// * window.opener
// These things are deferred for now, since content which does depend on them seems
// outside the main focus of RDM.
let { detail } = event;
event.preventDefault();
let uri = Services.io.newURI(detail.url);
- let sourceNode = event.dataTransfer.mozSourceNode;
- let triggeringPrincipal = sourceNode
- ? sourceNode.nodePrincipal
- : Services.scriptSecurityManager.getSystemPrincipal();
// This API is used mainly because it's near the path used for <a target/> with
// regular browser tabs (which calls `openURIInFrame`). The more elaborate APIs
// that support openers, window features, etc. didn't seem callable from JS and / or
// this event doesn't give enough info to use them.
browserWindow.browserDOMWindow
.openURI(uri, null, Ci.nsIBrowserDOMWindow.OPEN_NEWTAB,
Ci.nsIBrowserDOMWindow.OPEN_NEW,
- triggeringPrincipal);
+ outer.contentPrincipal);
},
stop() {
let tab = gBrowser.getTabForBrowser(outer);
let filteredProgressListener = gBrowser._tabFilters.get(tab);
// The browser's state has changed over time while the tunnel was active. Push the
// the current state down to the inner browser, so that it follows the content in
--- a/devtools/client/responsive.html/test/browser/browser.ini
+++ b/devtools/client/responsive.html/test/browser/browser.ini
@@ -35,15 +35,16 @@ support-files =
[browser_network_throttling.js]
[browser_page_state.js]
[browser_permission_doorhanger.js]
tags = geolocation
[browser_resize_cmd.js]
[browser_screenshot_button.js]
[browser_tab_close.js]
[browser_tab_remoteness_change.js]
+[browser_target_blank.js]
[browser_toolbox_computed_view.js]
[browser_toolbox_rule_view.js]
[browser_toolbox_swap_browsers.js]
[browser_touch_device.js]
[browser_touch_simulation.js]
[browser_viewport_basics.js]
[browser_window_close.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/responsive.html/test/browser/browser_target_blank.js
@@ -0,0 +1,26 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Ensure target="_blank" link opens a new tab
+
+const TAB_URL = "http://example.com/";
+const TEST_URL =
+ `data:text/html,<a href="${TAB_URL}" target="_blank">Click me</a>`
+ .replace(/ /g, "%20");
+
+addRDMTask(TEST_URL, function* ({ ui }) {
+ let store = ui.toolWindow.store;
+
+ // Wait until the viewport has been added
+ yield waitUntilState(store, state => state.viewports.length == 1);
+
+ // Click the target="_blank" link and wait for a new tab
+ yield waitForFrameLoad(ui, TEST_URL);
+ let newTab = BrowserTestUtils.waitForNewTab(gBrowser, TAB_URL);
+ spawnViewportTask(ui, {}, function* () {
+ content.document.querySelector("a").click(); // eslint-disable-line
+ });
+ ok(yield newTab, "New tab opened from link");
+});