request-structure.any.js (3718B)
1 // META: global=window,worker 2 // META: title=Request structure 3 4 var request = new Request(""); 5 var methods = ["clone", 6 //Request implements Body 7 "arrayBuffer", 8 "blob", 9 "formData", 10 "json", 11 "text" 12 ]; 13 var attributes = ["method", 14 "url", 15 "headers", 16 "destination", 17 "referrer", 18 "referrerPolicy", 19 "mode", 20 "credentials", 21 "cache", 22 "redirect", 23 "integrity", 24 "isReloadNavigation", 25 "isHistoryNavigation", 26 "duplex", 27 //Request implements Body 28 "bodyUsed" 29 ]; 30 var internalAttributes = ["priority", 31 "internalpriority", 32 "blocking" 33 ]; 34 35 function isReadOnly(request, attributeToCheck) { 36 var defaultValue = undefined; 37 var newValue = undefined; 38 switch (attributeToCheck) { 39 case "method": 40 defaultValue = "GET"; 41 newValue = "POST"; 42 break; 43 44 case "url": 45 //default value is base url 46 //i.e http://example.com/fetch/api/request-structure.html 47 newValue = "http://url.test"; 48 break; 49 50 case "headers": 51 request.headers = new Headers ({"name":"value"}); 52 assert_false(request.headers.has("name"), "Headers attribute is read only"); 53 return; 54 55 case "destination": 56 defaultValue = ""; 57 newValue = "worker"; 58 break; 59 60 case "referrer": 61 defaultValue = "about:client"; 62 newValue = "http://url.test"; 63 break; 64 65 case "referrerPolicy": 66 defaultValue = ""; 67 newValue = "unsafe-url"; 68 break; 69 70 case "mode": 71 defaultValue = "cors"; 72 newValue = "navigate"; 73 break; 74 75 case "credentials": 76 defaultValue = "same-origin"; 77 newValue = "cors"; 78 break; 79 80 case "cache": 81 defaultValue = "default"; 82 newValue = "reload"; 83 break; 84 85 case "redirect": 86 defaultValue = "follow"; 87 newValue = "manual"; 88 break; 89 90 case "integrity": 91 newValue = "CannotWriteIntegrity"; 92 break; 93 94 case "bodyUsed": 95 defaultValue = false; 96 newValue = true; 97 break; 98 99 case "isReloadNavigation": 100 defaultValue = false; 101 newValue = true; 102 break; 103 104 case "isHistoryNavigation": 105 defaultValue = false; 106 newValue = true; 107 break; 108 109 case "duplex": 110 defaultValue = "half"; 111 newValue = "full"; 112 break; 113 114 default: 115 return; 116 } 117 118 request[attributeToCheck] = newValue; 119 if (defaultValue === undefined) 120 assert_not_equals(request[attributeToCheck], newValue, "Attribute " + attributeToCheck + " is read only"); 121 else 122 assert_equals(request[attributeToCheck], defaultValue, 123 "Attribute " + attributeToCheck + " is read only. Default value is " + defaultValue); 124 } 125 126 for (var idx in methods) { 127 test(function() { 128 assert_true(methods[idx] in request, "request has " + methods[idx] + " method"); 129 }, "Request has " + methods[idx] + " method"); 130 } 131 132 for (var idx in attributes) { 133 test(function() { 134 assert_true(attributes[idx] in request, "request has " + attributes[idx] + " attribute"); 135 isReadOnly(request, attributes[idx]); 136 }, "Check " + attributes[idx] + " attribute"); 137 } 138 139 for (var idx in internalAttributes) { 140 test(function() { 141 assert_false(internalAttributes[idx] in request, "request does not expose " + internalAttributes[idx] + " attribute"); 142 }, "Request does not expose " + internalAttributes[idx] + " attribute"); 143 }