OLD | NEW |
(Empty) | |
| 1 <body> |
| 2 <script src="../../../resources/testharness.js"></script> |
| 3 <script> |
| 4 testRunner.dumpAsText(); |
| 5 function runScript(name, callback) { |
| 6 var script = document.createElement("script"); |
| 7 script.src = name; |
| 8 script.onload = callback; |
| 9 document.head.appendChild(script); |
| 10 } |
| 11 var increment = 0; |
| 12 var SameOriginTextScript = 991, |
| 13 SameOriginOtherScript = 992, |
| 14 CrossOriginTextScript = 993, |
| 15 CrossOriginOtherScript = 994; |
| 16 var counters = [SameOriginTextScript, |
| 17 SameOriginOtherScript, |
| 18 CrossOriginTextScript, |
| 19 CrossOriginOtherScript]; |
| 20 function getUseCounters() { |
| 21 return counters.map(counter => window.internals.isUseCounted(document, counter
)); |
| 22 } |
| 23 function testCase(test, callback) { |
| 24 var previousCounters = getUseCounters(); |
| 25 var previousIncrement = increment; |
| 26 var url = (test.crossOrigin ? "http://localhost:8000" : "") + |
| 27 "/security/resources/javascript-mimetype.php?mimetype=" + test.mimet
ype; |
| 28 runScript(url, function() { |
| 29 assert_false(test.expectFailure === true); |
| 30 assert_equals(previousIncrement + 1, increment, "should have run the script"
); |
| 31 var newCounters = getUseCounters(); |
| 32 for (var counter in counters) { |
| 33 if (counters[counter] === test.useCounter) { |
| 34 assert_equals(previousCounters[counter], !!test.secondTime); |
| 35 assert_equals(newCounters[counter], true); |
| 36 } else { |
| 37 assert_equals(previousCounters[counter], newCounters[counter]); |
| 38 } |
| 39 } |
| 40 alert("Correct"); |
| 41 callback(); |
| 42 }); |
| 43 if (test.expectFailure) callback(); |
| 44 } |
| 45 function nextCase(cases, i) { |
| 46 if (i >= cases.length) |
| 47 return function() {}; |
| 48 else return function() { |
| 49 testCase(cases[i], nextCase(cases, i + 1)); |
| 50 } |
| 51 } |
| 52 function runTestCases(cases) { |
| 53 nextCase(cases, 0)(); |
| 54 } |
| 55 |
| 56 var initialCounters = getUseCounters(); |
| 57 for (var initialCounter of initialCounters) { |
| 58 assert_false(initialCounter); |
| 59 } |
| 60 runTestCases([ |
| 61 // JS mimetypes don't increment any usecounters |
| 62 { mimetype: 'text/livescript', crossOrigin: false, useCounter: -1 }, |
| 63 { mimetype: 'text/jscript', crossOrigin: true, useCounter: -1 }, |
| 64 { mimetype: 'application/ecmascript', crossOrigin: false, useCounter: -1 }, |
| 65 { mimetype: 'text/ecmascript', crossOrigin: true, useCounter: -1 }, |
| 66 |
| 67 // Counters are not incremented on invalid use of images |
| 68 { mimetype: 'image/foo', crossOrigin: false, useCounter: -1, expectFailure: tr
ue }, |
| 69 { mimetype: 'image/bar', crossOrigin: true, useCounter: -1, expectFailure: tru
e }, |
| 70 |
| 71 // Text mimetypes are registered separately |
| 72 { mimetype: 'text/html', crossOrigin: false, useCounter: SameOriginTextScript
}, |
| 73 { mimetype: 'text/csv', crossOrigin: false, useCounter: SameOriginTextScript,
secondTime: true }, |
| 74 |
| 75 { mimetype: 'text/html', crossOrigin: true, useCounter: CrossOriginTextScript
}, |
| 76 { mimetype: 'text/csv', crossOrigin: true, useCounter: CrossOriginTextScript ,
secondTime: true }, |
| 77 |
| 78 { mimetype: 'foo/html', crossOrigin: false, useCounter: SameOriginOtherScript
}, |
| 79 { mimetype: 'foo/csv', crossOrigin: false, useCounter: SameOriginOtherScript,
secondTime: true }, |
| 80 |
| 81 { mimetype: 'foo/html', crossOrigin: true, useCounter: CrossOriginOtherScript
}, |
| 82 { mimetype: 'foo/csv', crossOrigin: true, useCounter: CrossOriginOtherScript,
secondTime: true }, |
| 83 ]); |
| 84 </script> |
| 85 </body> |
OLD | NEW |