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> |