97 lines
2.1 KiB
JavaScript
97 lines
2.1 KiB
JavaScript
let jsURL =
|
|
"javascript:" +
|
|
escape(
|
|
'window.parent.postMessage("JS uri ran", "*");\
|
|
return \'\
|
|
<script>\
|
|
window.parent.postMessage("Able to access private: " +\
|
|
window.parent.private, "*");\
|
|
</script>\''
|
|
);
|
|
let dataURL =
|
|
"data:text/html," +
|
|
escape(
|
|
'<!DOCTYPE HTML>\
|
|
<script>\
|
|
try {\
|
|
window.parent.postMessage("Able to access private: " +\
|
|
window.parent.private, "*");\
|
|
}\
|
|
catch (e) {\
|
|
window.parent.postMessage("pass", "*");\
|
|
}\
|
|
</script>'
|
|
);
|
|
|
|
let tests = [
|
|
// Plain document should work as normal
|
|
'<!DOCTYPE HTML>\
|
|
<script>\
|
|
try {\
|
|
window.parent.private;\
|
|
window.parent.postMessage("pass", "*");\
|
|
}\
|
|
catch (e) {\
|
|
window.parent.postMessage("Unble to access private", "*");\
|
|
}\
|
|
</script>',
|
|
|
|
// refresh to plain doc
|
|
{ refresh: "file_bug475636.sjs?1", doc: "<!DOCTYPE HTML>" },
|
|
|
|
// meta-refresh to plain doc
|
|
'<!DOCTYPE HTML>\
|
|
<head>\
|
|
<meta http-equiv="refresh" content="0; url=file_bug475636.sjs?1">\
|
|
</head>',
|
|
|
|
// refresh to data url
|
|
{ refresh: dataURL, doc: "<!DOCTYPE HTML>" },
|
|
|
|
// meta-refresh to data url
|
|
'<!DOCTYPE HTML>\
|
|
<head>\
|
|
<meta http-equiv="refresh" content="0; url=' +
|
|
dataURL +
|
|
'">\
|
|
</head>',
|
|
|
|
// refresh to js url should not be followed
|
|
{
|
|
refresh: jsURL,
|
|
doc: '<!DOCTYPE HTML>\
|
|
<script>\
|
|
setTimeout(function() {\
|
|
window.parent.postMessage("pass", "*");\
|
|
}, 2000);\
|
|
</script>',
|
|
},
|
|
|
|
// meta refresh to js url should not be followed
|
|
'<!DOCTYPE HTML>\
|
|
<head>\
|
|
<meta http-equiv="refresh" content="0; url=' +
|
|
jsURL +
|
|
'">\
|
|
</head>\
|
|
<script>\
|
|
setTimeout(function() {\
|
|
window.parent.postMessage("pass", "*");\
|
|
}, 2000);\
|
|
</script>',
|
|
];
|
|
|
|
function handleRequest(request, response) {
|
|
dump("@@@@@@@@@hi there: " + request.queryString + "\n");
|
|
let test = tests[parseInt(request.queryString, 10) - 1];
|
|
response.setHeader("Content-Type", "text/html");
|
|
|
|
if (!test) {
|
|
response.write('<script>parent.postMessage("done", "*");</script>');
|
|
} else if (typeof test == "string") {
|
|
response.write(test);
|
|
} else if (test.refresh) {
|
|
response.setHeader("Refresh", "0; url=" + test.refresh);
|
|
response.write(test.doc);
|
|
}
|
|
}
|