fune/browser/base/content/test/plugins/browser_plugin_framed_domain.js

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!"
);
}
);
});