OLD | NEW |
(Empty) | |
| 1 var initialize_InterceptionTest = function() { |
| 2 |
| 3 var interceptionRequestParams = {}; |
| 4 var requestIdToFilename = {}; |
| 5 var loggedMessages = {}; |
| 6 var requestIdToCanonicalInterceptionId = {}; |
| 7 var idToCanoncalId = {}; |
| 8 var nextId = 1; |
| 9 |
| 10 function canonicalId(id) { |
| 11 if (!idToCanoncalId.hasOwnProperty(id)) |
| 12 idToCanoncalId[id] = "ID " + nextId++; |
| 13 return idToCanoncalId[id]; |
| 14 } |
| 15 |
| 16 function log(id, message) { |
| 17 if (!loggedMessages.hasOwnProperty(id)) |
| 18 loggedMessages[id] = []; |
| 19 loggedMessages[id].push(message); |
| 20 } |
| 21 |
| 22 function completeTest(message) |
| 23 { |
| 24 // The order in which network events occur is not fully deterministic so we |
| 25 // sort based on the interception ID to try and make the test non-flaky. |
| 26 for (var property in loggedMessages) { |
| 27 if (loggedMessages.hasOwnProperty(property)) { |
| 28 var messages = loggedMessages[property]; |
| 29 for (var i = 0; i < messages.length; i++) { |
| 30 InspectorTest.log(messages[i]); |
| 31 } |
| 32 } |
| 33 } |
| 34 InspectorTest.log(message); |
| 35 InspectorTest.completeTest(); |
| 36 } |
| 37 |
| 38 InspectorTest.startInterceptionTest = function(interceptedRequestDict, |
| 39 interceptedRedirectDict) { |
| 40 InspectorTest.eventHandler["Network.interceptedRequest"] = onInterceptedRequ
est; |
| 41 InspectorTest.eventHandler["Network.interceptedRedirect"] = onInterceptedRed
irect; |
| 42 InspectorTest.eventHandler["Network.loadingFailed"] = onLoadingFailed; |
| 43 InspectorTest.eventHandler["Network.requestWillBeSent"] = onRequestWillBeSen
t; |
| 44 InspectorTest.eventHandler["Network.responseReceived"] = onResponseReceived; |
| 45 InspectorTest.eventHandler["Page.frameStoppedLoading"] = onStop; |
| 46 |
| 47 function enableNetwork() |
| 48 { |
| 49 InspectorTest.log("Test started"); |
| 50 InspectorTest.sendCommand("Network.enable", {}, didEnableNetwork); |
| 51 } |
| 52 |
| 53 function didEnableNetwork(messageObject) |
| 54 { |
| 55 if (messageObject.error) { |
| 56 completeTest("FAIL: Couldn't enable network agent" + |
| 57 messageObject.error.message); |
| 58 return; |
| 59 } |
| 60 InspectorTest.log("Network agent enabled"); |
| 61 InspectorTest.sendCommand( |
| 62 "Network.enableFetchInterception", {"enabled": true}, |
| 63 didEnableFetchInterception); |
| 64 } |
| 65 |
| 66 function didEnableFetchInterception(messageObject) |
| 67 { |
| 68 if (messageObject.error) { |
| 69 completeTest("FAIL: Couldn't enable fetch interception" + |
| 70 messageObject.error.message); |
| 71 return; |
| 72 } |
| 73 InspectorTest.log("Fetch interception enabled"); |
| 74 InspectorTest.sendCommand("Page.enable", {}, didEnablePage); |
| 75 } |
| 76 |
| 77 function didEnablePage(messageObject) |
| 78 { |
| 79 if (messageObject.error) { |
| 80 completeTest("FAIL: Couldn't enable page agent" + |
| 81 messageObject.error.message); |
| 82 return; |
| 83 } |
| 84 InspectorTest.log("Page agent enabled"); |
| 85 InspectorTest.sendCommand( |
| 86 "Runtime.evaluate", { "expression": "appendIframe()"}); |
| 87 } |
| 88 |
| 89 function onInterceptedRequest(event) |
| 90 { |
| 91 var filename = event.params.request.url.split('/').pop(); |
| 92 var id = canonicalId(event.params.id); |
| 93 if (event.params.request.headers.hasOwnProperty( |
| 94 "X-DevTools-Request-Id")) { |
| 95 requestIdToCanonicalInterceptionId[ |
| 96 event.params.request.headers["X-DevTools-Request-Id"]] = id; |
| 97 } |
| 98 interceptionRequestParams[id] = event.params.request; |
| 99 if (interceptedRequestDict.hasOwnProperty(filename)) { |
| 100 log(id, "Network.interceptedRequest " + id + " " + |
| 101 event.params.request.method + " " + filename); |
| 102 interceptedRequestDict[filename](event); |
| 103 } else { |
| 104 if (event.params.request.url.startsWith("blob:")) { |
| 105 // Silently allow blob: requests. |
| 106 InspectorTest.sendCommand( |
| 107 "Network.allowRequest", { "id": event.params.id }); |
| 108 return; |
| 109 } |
| 110 completeTest("FAILED: unexpected request interception " + |
| 111 JSON.stringify(event.params)); |
| 112 } |
| 113 } |
| 114 |
| 115 function onInterceptedRedirect(event) |
| 116 { |
| 117 var redirectFilename = event.params.redirectUrl.split('/').pop(); |
| 118 var id = canonicalId(event.params.id); |
| 119 if (interceptedRedirectDict.hasOwnProperty(redirectFilename)) { |
| 120 log(id, "Network.interceptedRedirect " + id + " " + |
| 121 event.params.responseStatusCode + " " + |
| 122 interceptionRequestParams[id].url.split('/').pop() + |
| 123 " -> " + redirectFilename); |
| 124 interceptedRedirectDict[redirectFilename](event); |
| 125 } else { |
| 126 completeTest("FAILED: unexpected redirect interception " + |
| 127 JSON.stringify(event.params)); |
| 128 } |
| 129 interceptionRequestParams[id].url = event.params.redirectUrl; |
| 130 } |
| 131 |
| 132 function onLoadingFailed(event) |
| 133 { |
| 134 var id = requestIdToCanonicalInterceptionId[event.params.requestId]; |
| 135 log(id, "Network.loadingFailed " + id + " " + |
| 136 requestIdToFilename[event.params.requestId] + " " + |
| 137 event.params.errorText); |
| 138 } |
| 139 |
| 140 function onRequestWillBeSent(event) |
| 141 { |
| 142 var filename = event.params.request.url.split('/').pop(); |
| 143 requestIdToFilename[event.params.requestId] = filename; |
| 144 } |
| 145 |
| 146 function onResponseReceived(event) |
| 147 { |
| 148 var response = event.params.response; |
| 149 var filename = response.url.split('/').pop(); |
| 150 var id = canonicalId(event.params.interceptId); |
| 151 log(id, "Network.responseReceived " + filename + " " + response.status + |
| 152 " " + response.mimeType + " interceptId = " + id); |
| 153 } |
| 154 |
| 155 function onStop() |
| 156 { |
| 157 completeTest("Page.frameStoppedLoading"); |
| 158 } |
| 159 |
| 160 enableNetwork(); |
| 161 } |
| 162 |
| 163 InspectorTest.allowRequest = function(event) { |
| 164 var id = canonicalId(event.params.id); |
| 165 log(id, "Network.allowRequest " + id); |
| 166 InspectorTest.sendCommand( |
| 167 "Network.allowRequest", { "id": event.params.id }); |
| 168 } |
| 169 |
| 170 InspectorTest.modifyRequest = function(event, params) { |
| 171 var id = canonicalId(event.params.id); |
| 172 var mods = []; |
| 173 for (property in params) { |
| 174 if (!params.hasOwnProperty(property)) |
| 175 continue; |
| 176 if (property === "url") { |
| 177 var newUrl = params["url"]; |
| 178 var filename = interceptionRequestParams[id].url; |
| 179 mods.push("url " + filename.split('/').pop() + " -> " + newUrl); |
| 180 var directoryPath = |
| 181 filename.substring(0, filename.lastIndexOf('/') + 1); |
| 182 params["url"] = directoryPath + newUrl; |
| 183 } else { |
| 184 mods.push(property + " " + |
| 185 JSON.stringify(interceptionRequestParams[id][property]) + |
| 186 " -> " + JSON.stringify(params[property])); |
| 187 } |
| 188 } |
| 189 |
| 190 log(id, "Network.modifyRequest " + id + ": " + mods.join("; ")); |
| 191 params["id"] = event.params.id; |
| 192 InspectorTest.sendCommand("Network.modifyRequest", params); |
| 193 } |
| 194 |
| 195 InspectorTest.blockRequest = function(event, errorReason) { |
| 196 var id = canonicalId(event.params.id); |
| 197 log(id, "Network.blockRequest " + id + " " + errorReason); |
| 198 InspectorTest.sendCommand("Network.blockRequest", { |
| 199 "id": event.params.id, "errorReason": errorReason}); |
| 200 } |
| 201 |
| 202 InspectorTest.mockResponse = function(event, rawResponse) { |
| 203 var id = canonicalId(event.params.id); |
| 204 log(id, "Network.mockResponse " + id); |
| 205 InspectorTest.sendCommand("Network.mockResponse", { |
| 206 "id": event.params.id, |
| 207 "rawResponse": rawResponse}); |
| 208 } |
| 209 |
| 210 } |
OLD | NEW |