Chromium Code Reviews| Index: LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-fetch.html |
| diff --git a/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-fetch.html b/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-fetch.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..38ce5738545557681c5a748e262f16af92631852 |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/security/subresourceIntegrity/subresource-integrity-fetch.html |
| @@ -0,0 +1,66 @@ |
| +<!DOCTYPE html> |
| +<html> |
| +<head> |
| +<title>Tests integrity enforcement on fetch()</title> |
| +<script src="/resources/testharness.js"></script> |
| +<script src="/resources/testharnessreport.js"></script> |
| +</head> |
| +<body> |
| +<script> |
| +var SRITest = function(pass, name, src, integrity, expectedValue) { |
| + this.pass = pass; |
| + this.name = name; |
| + this.src = src; |
| + this.integrity = integrity; |
| + this.expectedValue = expectedValue; |
| +} |
| +SRITest.prototype.execute = function() { |
| + var test = async_test(this.name); |
| + var pass = this.pass; |
| + var integrity = this.integrity; |
| + var expectedValue = this.expectedValue; |
| + var options = {}; |
| + if (integrity !== '') { |
| + options.integrity = integrity; |
| + } |
| + fetch(this.src, options) |
| + .then(test.step_func(function(response) { |
|
yhirano
2015/08/19 10:42:36
You can use promise_test. Then you don't have to i
jww
2015/08/19 16:43:40
Done.
|
| + if (pass) { |
| + if (expectedValue) { |
| + consume(response.body.getReader(), test, expectedValue, ''); |
|
yhirano
2015/08/19 10:42:36
You can use response.text().
jww
2015/08/19 16:43:40
Done.
|
| + } else { |
| + test.done(); |
| + } |
| + } else { |
| + assert_unreached("Response on bad fetch."); |
| + } |
| + })) |
| + .catch(test.step_func(function(error) { |
| + if (pass) { |
| + assert_unreached("Network error on good fetch."); |
| + } else { |
| + test.done(); |
| + } |
| + })); |
| +} |
| + |
| +function consume(reader, test, expectedValue, actualValue) { |
| + return reader.read().then(function(result) { |
| + if (result.done) { |
| + assert_equals(actualValue, expectedValue, "Value consumed must match hashed value."); |
| + test.done(); |
| + return; |
| + } |
| + actualValue = actualValue + String.fromCharCode.apply(null, result.value); |
| + return consume(reader, test, expectedValue, actualValue); |
| + }); |
| +} |
| + |
| +new SRITest(true, 'No integrity', 'call-success.js', '', 'success();\n').execute(); |
| +new SRITest(true, 'Good integrity', 'call-success.js', 'sha256-B0/62fJSJFrdjEFR9ba04m/D+LHQ+zG6PGcaR0Trpxg=', 'success();\n').execute(); |
| +new SRITest(false, 'Bad integrity', 'call-success.js', 'sha256-deadbeef').execute(); |
| +new SRITest(false, 'Bad integrity and an img', '/resources/square100.png', 'sha256-B0/62fJSJFrdjEFR9ba04m/D+LHQ+zG6PGcaR0Trpxg=').execute(); |
| +new SRITest(true, 'Good integrity and an img', '/resources/square100.png', 'sha256-xZjdcorjj+TiKGteFFcrNbdqrDns2iVURBpGpAwp12k=').execute(); |
| +</script> |
| +</body> |
| +</html> |