request-disturbed.any.js (4843B)
1 // META: global=window,worker 2 // META: title=Request disturbed 3 // META: script=../resources/utils.js 4 5 var initValuesDict = {"method" : "POST", 6 "body" : "Request's body" 7 }; 8 9 var noBodyConsumed = new Request(""); 10 var bodyConsumed = new Request("", initValuesDict); 11 12 test(() => { 13 assert_equals(noBodyConsumed.body, null, "body's default value is null"); 14 assert_false(noBodyConsumed.bodyUsed , "bodyUsed is false when request is not disturbed"); 15 assert_not_equals(bodyConsumed.body, null, "non-null body"); 16 assert_true(bodyConsumed.body instanceof ReadableStream, "non-null body type"); 17 assert_false(noBodyConsumed.bodyUsed, "bodyUsed is false when request is not disturbed"); 18 }, "Request's body: initial state"); 19 20 noBodyConsumed.blob(); 21 bodyConsumed.blob(); 22 23 test(function() { 24 assert_false(noBodyConsumed.bodyUsed , "bodyUsed is false when request is not disturbed"); 25 try { 26 noBodyConsumed.clone(); 27 } catch (e) { 28 assert_unreached("Can use request not disturbed for creating or cloning request"); 29 } 30 }, "Request without body cannot be disturbed"); 31 32 test(function() { 33 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); 34 assert_throws_js(TypeError, function() { bodyConsumed.clone(); }); 35 }, "Check cloning a disturbed request"); 36 37 test(function() { 38 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); 39 assert_throws_js(TypeError, function() { new Request(bodyConsumed); }); 40 }, "Check creating a new request from a disturbed request"); 41 42 promise_test(function() { 43 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); 44 const originalBody = bodyConsumed.body; 45 const bodyReplaced = new Request(bodyConsumed, { body: "Replaced body" }); 46 assert_not_equals(bodyReplaced.body, originalBody, "new request's body is new"); 47 assert_false(bodyReplaced.bodyUsed, "bodyUsed is false when request is not disturbed"); 48 return bodyReplaced.text().then(text => { 49 assert_equals(text, "Replaced body"); 50 }); 51 }, "Check creating a new request with a new body from a disturbed request"); 52 53 promise_test(function() { 54 var bodyRequest = new Request("", initValuesDict); 55 const originalBody = bodyRequest.body; 56 assert_false(bodyRequest.bodyUsed , "bodyUsed is false when request is not disturbed"); 57 var requestFromRequest = new Request(bodyRequest); 58 assert_true(bodyRequest.bodyUsed , "bodyUsed is true when request is disturbed"); 59 assert_equals(bodyRequest.body, originalBody, "body should not change"); 60 assert_not_equals(originalBody, undefined, "body should not be undefined"); 61 assert_not_equals(originalBody, null, "body should not be null"); 62 assert_not_equals(requestFromRequest.body, originalBody, "new request's body is new"); 63 return requestFromRequest.text().then(text => { 64 assert_equals(text, "Request's body"); 65 }); 66 }, "Input request used for creating new request became disturbed"); 67 68 promise_test(() => { 69 const bodyRequest = new Request("", initValuesDict); 70 const originalBody = bodyRequest.body; 71 assert_false(bodyRequest.bodyUsed , "bodyUsed is false when request is not disturbed"); 72 const requestFromRequest = new Request(bodyRequest, { body : "init body" }); 73 assert_true(bodyRequest.bodyUsed , "bodyUsed is true when request is disturbed"); 74 assert_equals(bodyRequest.body, originalBody, "body should not change"); 75 assert_not_equals(originalBody, undefined, "body should not be undefined"); 76 assert_not_equals(originalBody, null, "body should not be null"); 77 assert_not_equals(requestFromRequest.body, originalBody, "new request's body is new"); 78 79 return requestFromRequest.text().then(text => { 80 assert_equals(text, "init body"); 81 }); 82 }, "Input request used for creating new request became disturbed even if body is not used"); 83 84 promise_test(function(test) { 85 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); 86 return promise_rejects_js(test, TypeError, bodyConsumed.blob()); 87 }, "Check consuming a disturbed request"); 88 89 test(function() { 90 var req = new Request(URL, {method: 'POST', body: 'hello'}); 91 assert_false(req.bodyUsed, 92 'Request should not be flagged as used if it has not been ' + 93 'consumed.'); 94 assert_throws_js(TypeError, 95 function() { new Request(req, {method: 'GET'}); }, 96 'A get request may not have body.'); 97 98 assert_false(req.bodyUsed, 'After the GET case'); 99 100 assert_throws_js(TypeError, 101 function() { new Request(req, {method: 'CONNECT'}); }, 102 'Request() with a forbidden method must throw.'); 103 104 assert_false(req.bodyUsed, 'After the forbidden method case'); 105 106 var req2 = new Request(req); 107 assert_true(req.bodyUsed, 108 'Request should be flagged as used if it has been consumed.'); 109 }, 'Request construction failure should not set "bodyUsed"');