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

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

Issue 2739323003: DevTools protocol interception, blocking & modification of requests (Closed)
Patch Set: Add missing expects plus tweak test output of Network.interceptedRedirect for clarity Created 3 years, 9 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 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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698