зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1548385: Test CSP blocks scripts correctly within template. r=jkt
Differential Revision: https://phabricator.services.mozilla.com/D30480 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
ca683a78bb
Коммит
e454783943
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="default-src 'unsafe-inline'">
|
||||||
|
<template id="a">
|
||||||
|
<script src="file_script_template.js"></script>
|
||||||
|
</template>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
var temp = document.getElementsByTagName("template")[0];
|
||||||
|
var clon = temp.content.cloneNode(true);
|
||||||
|
document.body.appendChild(clon);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
// dummy *.js file
|
|
@ -375,3 +375,7 @@ support-files =
|
||||||
file_windowwatcher_subframeC.html
|
file_windowwatcher_subframeC.html
|
||||||
file_windowwatcher_subframeD.html
|
file_windowwatcher_subframeD.html
|
||||||
file_windowwatcher_win_open.html
|
file_windowwatcher_win_open.html
|
||||||
|
[test_script_template.html]
|
||||||
|
support-files =
|
||||||
|
file_script_template.html
|
||||||
|
file_script_template.js
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Bug 1548385 - CSP: Test script template</title>
|
||||||
|
<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:
|
||||||
|
* We load a document using a CSP of "default-src 'unsafe-inline'"
|
||||||
|
* and make sure that an external script within a template gets
|
||||||
|
* blocked correctly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const CSP_BLOCKED_SUBJECT = "csp-on-violate-policy";
|
||||||
|
const CSP_ALLOWED_SUBJECT = "specialpowers-http-notify-request";
|
||||||
|
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
function examiner() {
|
||||||
|
SpecialPowers.addObserver(this, CSP_BLOCKED_SUBJECT);
|
||||||
|
SpecialPowers.addObserver(this, CSP_ALLOWED_SUBJECT);
|
||||||
|
}
|
||||||
|
|
||||||
|
examiner.prototype = {
|
||||||
|
observe: function(subject, topic, data) {
|
||||||
|
if (topic == CSP_BLOCKED_SUBJECT) {
|
||||||
|
let jsFileName = SpecialPowers.getPrivilegedProps(SpecialPowers.do_QueryInterface(subject, "nsIURI"), "asciiSpec");
|
||||||
|
if (jsFileName.endsWith("file_script_template.js")) {
|
||||||
|
ok(true, "js file blocked by CSP");
|
||||||
|
this.removeAndFinish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (topic == CSP_ALLOWED_SUBJECT) {
|
||||||
|
if (data.endsWith("file_script_template.js")) {
|
||||||
|
ok(false, "js file allowed by CSP");
|
||||||
|
this.removeAndFinish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
removeAndFinish: function() {
|
||||||
|
SpecialPowers.removeObserver(this, CSP_BLOCKED_SUBJECT);
|
||||||
|
SpecialPowers.removeObserver(this, CSP_ALLOWED_SUBJECT);
|
||||||
|
SimpleTest.finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.examiner = new examiner();
|
||||||
|
document.getElementById("testframe").src = "file_script_template.html";
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Загрузка…
Ссылка в новой задаче