Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-test.js

Issue 2942573003: [DevTools] New harness for inspector-protocol layout tests (Closed)
Patch Set: Protocol -> dp Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698