| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 var initialize_InterceptionTest = function() { |  | 
| 2 |  | 
| 3 var interceptionRequestParams = {}; |  | 
| 4 var requestIdToFilename = {}; |  | 
| 5 var filenameToInterceptionId = {}; |  | 
| 6 var loggedMessages = {}; |  | 
| 7 var InterceptionIdToCanonicalInterceptionId = {}; |  | 
| 8 var idToCanoncalId = {}; |  | 
| 9 var nextId = 1; |  | 
| 10 |  | 
| 11 function getNextId() |  | 
| 12 { |  | 
| 13     return "ID " + nextId++; |  | 
| 14 } |  | 
| 15 |  | 
| 16 function canonicalId(id) |  | 
| 17 { |  | 
| 18     if (!idToCanoncalId.hasOwnProperty(id)) |  | 
| 19         idToCanoncalId[id] = getNextId(); |  | 
| 20     return idToCanoncalId[id]; |  | 
| 21 } |  | 
| 22 |  | 
| 23 function log(id, message) |  | 
| 24 { |  | 
| 25     testRunner.logToStderr("id " + id + " " + message); |  | 
| 26     if (!loggedMessages.hasOwnProperty(id)) |  | 
| 27         loggedMessages[id] = []; |  | 
| 28     loggedMessages[id].push(message); |  | 
| 29 } |  | 
| 30 |  | 
| 31 function completeTest(message) |  | 
| 32 { |  | 
| 33     // The order in which network events occur is not fully deterministic so we |  | 
| 34     // sort based on the interception ID to try and make the test non-flaky. |  | 
| 35     for (var property in loggedMessages) { |  | 
| 36         if (loggedMessages.hasOwnProperty(property)) { |  | 
| 37             var messages = loggedMessages[property]; |  | 
| 38             for (var i = 0; i < messages.length; i++) { |  | 
| 39                 InspectorTest.log(messages[i]); |  | 
| 40             } |  | 
| 41         } |  | 
| 42     } |  | 
| 43 |  | 
| 44     if (message) |  | 
| 45         InspectorTest.log(message); |  | 
| 46 |  | 
| 47     InspectorTest.completeTest(); |  | 
| 48 } |  | 
| 49 |  | 
| 50 InspectorTest.startInterceptionTest = function(requestInterceptedDict, |  | 
| 51                                                numConsoleLogsToWaitFor) { |  | 
| 52     if (typeof numConsoleLogsToWaitFor === "undefined") |  | 
| 53         numConsoleLogsToWaitFor = 0; |  | 
| 54 |  | 
| 55     InspectorTest.eventHandler["Network.requestIntercepted"] = onRequestIntercep
     ted; |  | 
| 56     InspectorTest.eventHandler["Network.loadingFailed"] = onLoadingFailed; |  | 
| 57     InspectorTest.eventHandler["Network.requestWillBeSent"] = onRequestWillBeSen
     t; |  | 
| 58     InspectorTest.eventHandler["Network.responseReceived"] = onResponseReceived; |  | 
| 59     InspectorTest.eventHandler["Runtime.consoleAPICalled"] = onConsoleAPICalled; |  | 
| 60     InspectorTest.eventHandler["Page.frameStoppedLoading"] = onStop; |  | 
| 61 |  | 
| 62     var frameStoppedLoading = false; |  | 
| 63 |  | 
| 64     function getInterceptionId(filename) { |  | 
| 65         if (!filenameToInterceptionId.hasOwnProperty(filename)) { |  | 
| 66             filenameToInterceptionId[filename] = getNextId() |  | 
| 67         } |  | 
| 68         return filenameToInterceptionId[filename]; |  | 
| 69     } |  | 
| 70 |  | 
| 71     function enableNetwork() |  | 
| 72     { |  | 
| 73         InspectorTest.log("Test started"); |  | 
| 74         InspectorTest.sendCommand("Network.enable", {}, didEnableNetwork); |  | 
| 75     } |  | 
| 76 |  | 
| 77     function didEnableNetwork(messageObject) |  | 
| 78     { |  | 
| 79         if (messageObject.error) { |  | 
| 80             completeTest("FAIL: Couldn't enable network agent" + |  | 
| 81                                   messageObject.error.message); |  | 
| 82             return; |  | 
| 83         } |  | 
| 84         InspectorTest.log("Network agent enabled"); |  | 
| 85         InspectorTest.sendCommand( |  | 
| 86             "Network.enableRequestInterception", {"enabled": true}, |  | 
| 87             didEnableRequestInterception); |  | 
| 88     } |  | 
| 89 |  | 
| 90     function didEnableRequestInterception(messageObject) |  | 
| 91     { |  | 
| 92         if (messageObject.error) { |  | 
| 93             completeTest("FAIL: Couldn't enable fetch interception" + |  | 
| 94                                     messageObject.error.message); |  | 
| 95             return; |  | 
| 96         } |  | 
| 97         InspectorTest.log("Request interception enabled"); |  | 
| 98         InspectorTest.sendCommand("Page.enable", {}, didEnablePage); |  | 
| 99     } |  | 
| 100 |  | 
| 101     function didEnablePage(messageObject) |  | 
| 102     { |  | 
| 103         if (messageObject.error) { |  | 
| 104             completeTest("FAIL: Couldn't enable page agent" + |  | 
| 105                                     messageObject.error.message); |  | 
| 106             return; |  | 
| 107         } |  | 
| 108         InspectorTest.log("Page agent enabled"); |  | 
| 109 |  | 
| 110         InspectorTest.sendCommand("Runtime.enable", {}, didEnableRuntime); |  | 
| 111     } |  | 
| 112 |  | 
| 113     function didEnableRuntime(messageObject) |  | 
| 114     { |  | 
| 115         if (messageObject.error) { |  | 
| 116             completeTest("FAIL: Couldn't enable runtime agent" + |  | 
| 117                                     messageObject.error.message); |  | 
| 118             return; |  | 
| 119         } |  | 
| 120         InspectorTest.log("Runtime agent enabled"); |  | 
| 121 |  | 
| 122         InspectorTest.sendCommand( |  | 
| 123             "Runtime.evaluate", { "expression": "appendIframe()"}); |  | 
| 124     } |  | 
| 125 |  | 
| 126     function onRequestIntercepted(event) |  | 
| 127     { |  | 
| 128         var filename = event.params.request.url.split('/').pop(); |  | 
| 129         var id = canonicalId(event.params.interceptionId); |  | 
| 130         filenameToInterceptionId[filename] = id; |  | 
| 131         if (!requestInterceptedDict.hasOwnProperty(filename)) { |  | 
| 132             completeTest("FAILED: unexpected request interception " + |  | 
| 133                              JSON.stringify(event.params)); |  | 
| 134             return; |  | 
| 135         } |  | 
| 136         if (event.params.hasOwnProperty("authChallenge")) { |  | 
| 137             log(id, "Auth required for " + id); |  | 
| 138             requestInterceptedDict[filename + '+Auth'](event); |  | 
| 139             return; |  | 
| 140         } else if (event.params.hasOwnProperty("redirectUrl")) { |  | 
| 141             log(id, "Network.requestIntercepted " + id + " " + |  | 
| 142                     event.params.redirectStatusCode + " redirect " + |  | 
| 143                     interceptionRequestParams[id].url.split('/').pop() + |  | 
| 144                     " -> " + event.params.redirectUrl.split('/').pop()); |  | 
| 145             interceptionRequestParams[id].url = event.params.redirectUrl; |  | 
| 146         } else { |  | 
| 147             interceptionRequestParams[id] = event.params.request; |  | 
| 148             log(id, "Network.requestIntercepted " + id + " " + |  | 
| 149                     event.params.request.method + " " + filename + " type: " + |  | 
| 150                     event.params.resourceType); |  | 
| 151         } |  | 
| 152         requestInterceptedDict[filename](event); |  | 
| 153     } |  | 
| 154 |  | 
| 155     function onLoadingFailed(event) |  | 
| 156     { |  | 
| 157         var filename = requestIdToFilename[event.params.requestId]; |  | 
| 158         var id = getInterceptionId(filename); |  | 
| 159         log(id, "Network.loadingFailed " + filename + " " + |  | 
| 160                 event.params.errorText); |  | 
| 161     } |  | 
| 162 |  | 
| 163     function onRequestWillBeSent(event) |  | 
| 164     { |  | 
| 165         var filename = event.params.request.url.split('/').pop(); |  | 
| 166         requestIdToFilename[event.params.requestId] = filename; |  | 
| 167     } |  | 
| 168 |  | 
| 169     function onResponseReceived(event) |  | 
| 170     { |  | 
| 171         var response = event.params.response; |  | 
| 172         var filename = response.url.split('/').pop(); |  | 
| 173         var id = getInterceptionId(filename); |  | 
| 174         log(id, "Network.responseReceived " + filename + " " + response.status + |  | 
| 175                 " " + response.mimeType); |  | 
| 176     } |  | 
| 177 |  | 
| 178     function onStop() |  | 
| 179     { |  | 
| 180         frameStoppedLoading = true; |  | 
| 181         log(getNextId(), "Page.frameStoppedLoading"); |  | 
| 182 |  | 
| 183         maybeCompleteTest(); |  | 
| 184     } |  | 
| 185 |  | 
| 186     function onConsoleAPICalled(messageObject) |  | 
| 187     { |  | 
| 188         if (messageObject.params.type !== "log") |  | 
| 189             return; |  | 
| 190 |  | 
| 191         numConsoleLogsToWaitFor--; |  | 
| 192         maybeCompleteTest(); |  | 
| 193     } |  | 
| 194 |  | 
| 195     // Wait until we've seen Page.frameStoppedLoading and the expected number of |  | 
| 196     // console logs. |  | 
| 197     function maybeCompleteTest() { |  | 
| 198         if (numConsoleLogsToWaitFor === 0 && frameStoppedLoading) |  | 
| 199             completeTest(); |  | 
| 200     } |  | 
| 201 |  | 
| 202     enableNetwork(); |  | 
| 203 } |  | 
| 204 |  | 
| 205 InspectorTest.allowRequest = function(event) { |  | 
| 206     var id = canonicalId(event.params.interceptionId); |  | 
| 207     log(id, "allowRequest " + id); |  | 
| 208     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 209         "interceptionId": event.params.interceptionId |  | 
| 210     }); |  | 
| 211 } |  | 
| 212 |  | 
| 213 InspectorTest.modifyRequest = function(event, params) { |  | 
| 214     var id = canonicalId(event.params.interceptionId); |  | 
| 215     var mods = []; |  | 
| 216     for (property in params) { |  | 
| 217         if (!params.hasOwnProperty(property)) |  | 
| 218             continue; |  | 
| 219         if (property === "url") { |  | 
| 220             var newUrl = params["url"]; |  | 
| 221             var filename = interceptionRequestParams[id].url; |  | 
| 222             mods.push("url " + filename.split('/').pop() + " -> " + newUrl); |  | 
| 223             var directoryPath = |  | 
| 224                 filename.substring(0, filename.lastIndexOf('/') + 1); |  | 
| 225             params["url"] = directoryPath + newUrl; |  | 
| 226         } else { |  | 
| 227             mods.push(property + " " + |  | 
| 228                       JSON.stringify(interceptionRequestParams[id][property]) + |  | 
| 229                       " -> " + JSON.stringify(params[property])); |  | 
| 230         } |  | 
| 231     } |  | 
| 232 |  | 
| 233     log(id, "modifyRequest " + id + ": " + mods.join("; ")); |  | 
| 234     params["interceptionId"] = event.params.interceptionId; |  | 
| 235     InspectorTest.sendCommand("Network.continueInterceptedRequest", params); |  | 
| 236 } |  | 
| 237 |  | 
| 238 InspectorTest.blockRequest = function(event, errorReason) { |  | 
| 239     var id = canonicalId(event.params.interceptionId); |  | 
| 240     log(id, "blockRequest " + id + " " + errorReason); |  | 
| 241     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 242         "interceptionId": event.params.interceptionId, |  | 
| 243         "errorReason": errorReason |  | 
| 244     }); |  | 
| 245 } |  | 
| 246 |  | 
| 247 InspectorTest.mockResponse = function(event, rawResponse) { |  | 
| 248     var id = canonicalId(event.params.interceptionId); |  | 
| 249     log(id, "mockResponse " + id); |  | 
| 250     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 251         "interceptionId": event.params.interceptionId, |  | 
| 252         "rawResponse": btoa(rawResponse) |  | 
| 253     }); |  | 
| 254 } |  | 
| 255 |  | 
| 256 InspectorTest.disableRequestInterception = function(event) { |  | 
| 257     var id = canonicalId(event.params.interceptionId); |  | 
| 258     log(id, "----- disableRequestInterception -----"); |  | 
| 259     InspectorTest.sendCommand("Network.enableRequestInterception", { |  | 
| 260         "enabled": false, |  | 
| 261     }); |  | 
| 262 } |  | 
| 263 |  | 
| 264 InspectorTest.cancelAuth = function(event) { |  | 
| 265     var id = canonicalId(event.params.interceptionId); |  | 
| 266     log(id, "----- Cancel Auth -----"); |  | 
| 267     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 268         "interceptionId": event.params.interceptionId, |  | 
| 269         "authChallengeResponse": {"response": "CancelAuth"} |  | 
| 270     }); |  | 
| 271 } |  | 
| 272 |  | 
| 273 InspectorTest.defaultAuth = function(event) { |  | 
| 274     var id = canonicalId(event.params.interceptionId); |  | 
| 275     log(id, "----- Use Default Auth -----"); |  | 
| 276     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 277         "interceptionId": event.params.interceptionId, |  | 
| 278         "authChallengeResponse": {"response": "Default"} |  | 
| 279     }); |  | 
| 280 } |  | 
| 281 |  | 
| 282 InspectorTest.provideAuthCredentials = function(event, username, password) { |  | 
| 283     var id = canonicalId(event.params.interceptionId); |  | 
| 284     log(id, "----- Provide Auth Credentials -----"); |  | 
| 285     InspectorTest.sendCommand("Network.continueInterceptedRequest", { |  | 
| 286         "interceptionId": event.params.interceptionId, |  | 
| 287         "authChallengeResponse": { |  | 
| 288             "response": "ProvideCredentials", |  | 
| 289             "username": username, |  | 
| 290             "password": password |  | 
| 291         } |  | 
| 292     }); |  | 
| 293 } |  | 
| 294 |  | 
| 295 } |  | 
| OLD | NEW | 
|---|