Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Bug 1255240 - Test content policy types within content policies for targeted links in iframes</title>
<!-- Including SimpleTest.js so we can use waitForExplicitFinish !-->
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<iframe style="width:100%;" id="testframe"></iframe>
<script class="testbody" type="text/javascript">
/* Description of the test:
* Let's load a link into a targeted iframe and make sure the content policy
* type used for content policy checks is of TYPE_SUBDOCUMENT.
*/
function createChromeScript() {
/* eslint-env mozilla/chrome-script */
const POLICYNAME = "@mozilla.org/testpolicy;1";
const POLICYID = Components.ID("{6cc95ef3-40e1-4d59-87f0-86f100373227}");
const EXPECTED_URL =
var policy = {
// nsISupports implementation
QueryInterface: ChromeUtils.generateQI([
"nsIFactory",
"nsIContentPolicy",
]),
// nsIFactory implementation
createInstance(iid) {
return this.QueryInterface(iid);
},
// nsIContentPolicy implementation
shouldLoad(contentLocation, loadInfo) {
if (contentLocation.asciiSpec === EXPECTED_URL) {
sendAsyncMessage("loadBlocked", { policyType: loadInfo.externalContentPolicyType});
Services.catMan.deleteCategoryEntry(
"content-policy",
POLICYNAME,
false
);
componentManager.unregisterFactory(POLICYID, policy);
return Ci.nsIContentPolicy.REJECT_REQUEST;
}
return Ci.nsIContentPolicy.ACCEPT;
},
shouldProcess() {
return Ci.nsIContentPolicy.ACCEPT;
}
};
// Register content policy
var componentManager = Components.manager.QueryInterface(
Ci.nsIComponentRegistrar
);
componentManager.registerFactory(
POLICYID,
"Test content policy",
POLICYNAME,
policy
);
Services.catMan.addCategoryEntry(
"content-policy",
POLICYNAME,
POLICYNAME,
false,
true
);
// Adding a new category dispatches an event to update
// caches, so we need to also dispatch an event to make
// sure we don't start the load until after that happens.
Services.tm.dispatchToMainThread(() => {
sendAsyncMessage("setupComplete");
});
}
add_task(async function() {
let chromeScript = SpecialPowers.loadChromeScript(createChromeScript);
await chromeScript.promiseOneMessage("setupComplete");
var testframe = document.getElementById("testframe");
testframe.src =
"file_contentpolicytype_targeted_link_iframe.sjs?testframe";
let result = await chromeScript.promiseOneMessage("loadBlocked");
is(result.policyType, SpecialPowers.Ci.nsIContentPolicy.TYPE_SUBDOCUMENT,
"content policy type should TYPESUBDOCUMENT");
chromeScript.destroy();
});
</script>
</body>
</html>