forked from mirrors/gecko-dev
60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
var rootDir = getRootDirectory(gTestPath);
|
|
const gTestRoot = rootDir.replace(
|
|
"chrome://mochitests/content/",
|
|
"https://example.com/"
|
|
);
|
|
|
|
/**
|
|
* Verify that giving permission to a plugin works based on the toplevel
|
|
* page's principal, so that permissions meant for framed plugins persist
|
|
* correctly for the duration of the session.
|
|
*/
|
|
add_task(async function test_toplevel_frame_permission() {
|
|
await BrowserTestUtils.withNewTab(
|
|
gTestRoot + "empty_file.html",
|
|
async browser => {
|
|
// Add a cross-origin iframe and return when it's loaded.
|
|
await SpecialPowers.spawn(browser.browsingContext, [], async function() {
|
|
let doc = content.document;
|
|
let iframe = doc.createElement("iframe");
|
|
let loadPromise = ContentTaskUtils.waitForEvent(iframe, "load");
|
|
iframe.src = doc.location.href.replace(".com/", ".org/");
|
|
doc.body.appendChild(iframe);
|
|
// Note that we cannot return (rather than await) loadPromise, because
|
|
// it resolves with the event, which isn't structured-clonable.
|
|
await loadPromise;
|
|
});
|
|
|
|
// Show a plugin notification from the iframe's actor:
|
|
let { currentWindowGlobal } = browser.browsingContext.children[0];
|
|
let actor = currentWindowGlobal.getActor("Plugin");
|
|
const kHost = Cc["@mozilla.org/plugin/host;1"].getService(
|
|
Ci.nsIPluginHost
|
|
);
|
|
const { PLUGIN_CLICK_TO_PLAY } = Ci.nsIObjectLoadingContent;
|
|
let plugin = kHost.getPluginTags()[0];
|
|
actor.showClickToPlayNotification(
|
|
browser,
|
|
{ id: plugin.id, fallbackType: PLUGIN_CLICK_TO_PLAY },
|
|
false /* showNow */
|
|
);
|
|
|
|
// Check that it is associated with the toplevel origin (.com), not
|
|
// the subframe's origin (.org):
|
|
let notification = PopupNotifications.getNotification(
|
|
"click-to-play-plugins",
|
|
browser
|
|
);
|
|
is(
|
|
notification.options.principal.host,
|
|
"example.com",
|
|
"Should use top host for permission prompt!"
|
|
);
|
|
}
|
|
);
|
|
});
|