integrity.sub.any.js (4558B)
1 // META: global=window,dedicatedworker,sharedworker 2 // META: script=../resources/utils.js 3 4 function integrity(desc, url, integrity, initRequestMode, shouldPass) { 5 var fetchRequestInit = {'integrity': integrity} 6 if (!!initRequestMode && initRequestMode !== "") { 7 fetchRequestInit.mode = initRequestMode; 8 } 9 10 if (shouldPass) { 11 promise_test(function(test) { 12 return fetch(url, fetchRequestInit).then(function(resp) { 13 if (initRequestMode !== "no-cors") { 14 assert_equals(resp.status, 200, "Response's status is 200"); 15 } else { 16 assert_equals(resp.status, 0, "Opaque response's status is 0"); 17 assert_equals(resp.type, "opaque"); 18 } 19 }); 20 }, desc); 21 } else { 22 promise_test(function(test) { 23 return promise_rejects_js(test, TypeError, fetch(url, fetchRequestInit)); 24 }, desc); 25 } 26 } 27 28 const topSha256 = "sha256-KHIDZcXnR2oBHk9DrAA+5fFiR6JjudYjqoXtMR1zvzk="; 29 const topSha384 = "sha384-MgZYnnAzPM/MjhqfOIMfQK5qcFvGZsGLzx4Phd7/A8fHTqqLqXqKo8cNzY3xEPTL"; 30 const topSha512 = "sha512-D6yns0qxG0E7+TwkevZ4Jt5t7Iy3ugmAajG/dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg=="; 31 const topSha512wrongpadding = "sha512-D6yns0qxG0E7+TwkevZ4Jt5t7Iy3ugmAajG/dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg"; 32 const topSha512base64url = "sha512-D6yns0qxG0E7-TwkevZ4Jt5t7Iy3ugmAajG_dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg=="; 33 const topSha512base64url_nopadding = "sha512-D6yns0qxG0E7-TwkevZ4Jt5t7Iy3ugmAajG_dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg"; 34 const invalidSha256 = "sha256-dKUcPOn/AlUjWIwcHeHNqYXPlvyGiq+2dWOdFcE+24I="; 35 const invalidSha512 = "sha512-oUceBRNxPxnY60g/VtPCj2syT4wo4EZh2CgYdWy9veW8+OsReTXoh7dizMGZafvx9+QhMS39L/gIkxnPIn41Zg=="; 36 37 const path = dirname(location.pathname) + RESOURCES_DIR + "top.txt"; 38 const url = path; 39 const corsUrl = 40 `http://{{host}}:{{ports[http][1]}}${path}?pipe=header(Access-Control-Allow-Origin,*)`; 41 const corsUrl2 = `https://{{host}}:{{ports[https][0]}}${path}` 42 43 integrity("Empty string integrity", url, "", /* initRequestMode */ undefined, 44 /* shouldPass */ true); 45 integrity("SHA-256 integrity", url, topSha256, /* initRequestMode */ undefined, 46 /* shouldPass */ true); 47 integrity("SHA-384 integrity", url, topSha384, /* initRequestMode */ undefined, 48 /* shouldPass */ true); 49 integrity("SHA-512 integrity", url, topSha512, /* initRequestMode */ undefined, 50 /* shouldPass */ true); 51 integrity("SHA-512 integrity with missing padding", url, topSha512wrongpadding, 52 /* initRequestMode */ undefined, /* shouldPass */ true); 53 integrity("SHA-512 integrity base64url encoded", url, topSha512base64url, 54 /* initRequestMode */ undefined, /* shouldPass */ true); 55 integrity("SHA-512 integrity base64url encoded with missing padding", url, 56 topSha512base64url_nopadding, /* initRequestMode */ undefined, 57 /* shouldPass */ true); 58 integrity("Invalid integrity", url, invalidSha256, 59 /* initRequestMode */ undefined, /* shouldPass */ false); 60 integrity("Multiple integrities: valid stronger than invalid", url, 61 invalidSha256 + " " + topSha384, /* initRequestMode */ undefined, 62 /* shouldPass */ true); 63 integrity("Multiple integrities: invalid stronger than valid", 64 url, invalidSha512 + " " + topSha384, /* initRequestMode */ undefined, 65 /* shouldPass */ false); 66 integrity("Multiple integrities: invalid as strong as valid", url, 67 invalidSha512 + " " + topSha512, /* initRequestMode */ undefined, 68 /* shouldPass */ true); 69 integrity("Multiple integrities: both are valid", url, 70 topSha384 + " " + topSha512, /* initRequestMode */ undefined, 71 /* shouldPass */ true); 72 integrity("Multiple integrities: both are invalid", url, 73 invalidSha256 + " " + invalidSha512, /* initRequestMode */ undefined, 74 /* shouldPass */ false); 75 integrity("CORS empty integrity", corsUrl, "", /* initRequestMode */ undefined, 76 /* shouldPass */ true); 77 integrity("CORS SHA-512 integrity", corsUrl, topSha512, 78 /* initRequestMode */ undefined, /* shouldPass */ true); 79 integrity("CORS invalid integrity", corsUrl, invalidSha512, 80 /* initRequestMode */ undefined, /* shouldPass */ false); 81 82 integrity("Empty string integrity for opaque response", corsUrl2, "", 83 /* initRequestMode */ "no-cors", /* shouldPass */ true); 84 integrity("SHA-* integrity for opaque response", corsUrl2, topSha512, 85 /* initRequestMode */ "no-cors", /* shouldPass */ false); 86 87 done();