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

Side by Side Diff: chrome/test/data/extensions/api_test/webrequest/test_blocking.js

Issue 8775046: Convert another batch of extension tests to manifest_version 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 var pass = chrome.test.callbackPass;
6
7 // Constants as functions, not to be called until after runTests.
8 function getURLEchoUserAgent() {
9 return getServerURL('echoheader?User-Agent');
10 }
11
12 function getURLSetCookie() {
13 return getServerURL('set-cookie?Foo=Bar');
14 }
15
16 function getURLNonUTF8SetCookie() {
17 return getServerURL('set-header?Set-Cookie%3A%20Foo%3D%FE%D1');
18 }
19
20 function getURLHttpSimpleLoad() {
21 return getServerURL('files/extensions/api_test/webrequest/simpleLoad/a.html');
22 }
23 function getURLHttpXHRData() {
24 return getServerURL('files/extensions/api_test/webrequest/xhr/data.json');
25 }
26
27 function toCharCodes(str) {
28 var result = [];
29 for (var i = 0; i < str.length; ++i) {
30 result[i] = str.charCodeAt(i);
31 }
32 return result;
33 }
34
35 runTests([
36 // Navigates to a page with subresources, with a blocking handler that
37 // cancels the page request. The page will not load, and we should not
38 // see the subresources.
39 function complexLoadCancelled() {
40 expect(
41 [ // events
42 { label: "onBeforeRequest",
43 event: "onBeforeRequest",
44 details: {
45 type: "main_frame",
46 url: getURL("complexLoad/b.html"),
47 frameUrl: getURL("complexLoad/b.html")
48 },
49 retval: {cancel: true}
50 },
51 // Cancelling is considered an error.
52 { label: "onErrorOccurred",
53 event: "onErrorOccurred",
54 details: {
55 url: getURL("complexLoad/b.html"),
56 fromCache: false,
57 error: "net::ERR_BLOCKED_BY_CLIENT"
58 // Request to chrome-extension:// url has no IP.
59 }
60 },
61 ],
62 [ // event order
63 ["onBeforeRequest", "onErrorOccurred"]
64 ],
65 {}, // filter
66 ["blocking"]);
67 navigateAndWait(getURL("complexLoad/b.html"));
68 },
69
70 // Navigates to a page with subresources, with a blocking handler that
71 // cancels the page request. The page will not load, and we should not
72 // see the subresources.
73 function simpleLoadCancelledOnReceiveHeaders() {
74 expect(
75 [ // events
76 { label: "onBeforeRequest",
77 event: "onBeforeRequest",
78 details: {
79 method: "GET",
80 type: "main_frame",
81 url: getURLHttpSimpleLoad(),
82 frameUrl: getURLHttpSimpleLoad()
83 },
84 retval: {cancel: false}
85 },
86 { label: "onBeforeSendHeaders",
87 event: "onBeforeSendHeaders",
88 details: {
89 url: getURLHttpSimpleLoad(),
90 // Note: no requestHeaders because we don't ask for them.
91 },
92 },
93 { label: "onSendHeaders",
94 event: "onSendHeaders",
95 details: {
96 url: getURLHttpSimpleLoad()
97 }
98 },
99 { label: "onHeadersReceived",
100 event: "onHeadersReceived",
101 details: {
102 url: getURLHttpSimpleLoad(),
103 statusLine: "HTTP/1.0 200 OK",
104 },
105 retval: {cancel: true}
106 },
107 // Cancelling is considered an error.
108 { label: "onErrorOccurred",
109 event: "onErrorOccurred",
110 details: {
111 url: getURLHttpSimpleLoad(),
112 fromCache: false,
113 error: "net::ERR_BLOCKED_BY_CLIENT"
114 // Request to chrome-extension:// url has no IP.
115 }
116 },
117 ],
118 [ // event order
119 ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
120 "onHeadersReceived", "onErrorOccurred"]
121 ],
122 {}, // filter
123 ["blocking"]);
124 navigateAndWait(getURLHttpSimpleLoad());
125 },
126
127 // Navigates to a page with a blocking handler that redirects to a different
128 // page.
129 // TODO(mpcomplete): We should see an onBeforeRedirect as well, but our
130 // process switching logic cancels the original redirect request and
131 // starts a new one instead. See http://crbug.com/79520.
132 function complexLoadRedirected() {
133 expect(
134 [ // events
135 { label: "onBeforeRequest-1",
136 event: "onBeforeRequest",
137 details: {
138 url: getURL("complexLoad/a.html"),
139 frameUrl: getURL("complexLoad/a.html")
140 },
141 retval: {redirectUrl: getURL("simpleLoad/a.html")}
142 },
143 { label: "onErrorOccurred-1",
144 event: "onErrorOccurred",
145 details: {
146 url: getURL("complexLoad/a.html"),
147 fromCache: false,
148 error: "net::ERR_ABORTED"
149 // Request to chrome-extension:// url has no IP.
150 }
151 },
152 { label: "onBeforeRequest-2",
153 event: "onBeforeRequest",
154 details: {
155 url: getURL("simpleLoad/a.html"),
156 frameUrl: getURL("simpleLoad/a.html"),
157 },
158 },
159 { label: "onResponseStarted",
160 event: "onResponseStarted",
161 details: {
162 url: getURL("simpleLoad/a.html"),
163 fromCache: false,
164 statusCode: 200,
165 statusLine: "HTTP/1.1 200 OK",
166 // Request to chrome-extension:// url has no IP.
167 }
168 },
169 { label: "onCompleted",
170 event: "onCompleted",
171 details: {
172 url: getURL("simpleLoad/a.html"),
173 fromCache: false,
174 statusCode: 200,
175 statusLine: "HTTP/1.1 200 OK",
176 // Request to chrome-extension:// url has no IP.
177 }
178 },
179 ],
180 [ // event order
181 ["onBeforeRequest-1", "onErrorOccurred-1", "onBeforeRequest-2",
182 "onResponseStarted", "onCompleted"],
183 ],
184 {}, // filter
185 ["blocking"]);
186 navigateAndWait(getURL("complexLoad/a.html"));
187 },
188
189 // Loads a testserver page that echoes the User-Agent header that was
190 // sent to fetch it. We modify the outgoing User-Agent in
191 // onBeforeSendHeaders, so we should see that modified version.
192 function modifyRequestHeaders() {
193 expect(
194 [ // events
195 { label: "onBeforeRequest",
196 event: "onBeforeRequest",
197 details: {
198 url: getURLEchoUserAgent(),
199 frameUrl: getURLEchoUserAgent()
200 }
201 },
202 { label: "onBeforeSendHeaders",
203 event: "onBeforeSendHeaders",
204 details: {
205 url: getURLEchoUserAgent(),
206 // Note: no requestHeaders because we don't ask for them.
207 },
208 retval: {requestHeaders: [{name: "User-Agent", value: "FoobarUA"}]}
209 },
210 { label: "onSendHeaders",
211 event: "onSendHeaders",
212 details: {
213 url: getURLEchoUserAgent()
214 }
215 },
216 { label: "onHeadersReceived",
217 event: "onHeadersReceived",
218 details: {
219 url: getURLEchoUserAgent(),
220 statusLine: "HTTP/1.0 200 OK",
221 }
222 },
223 { label: "onResponseStarted",
224 event: "onResponseStarted",
225 details: {
226 url: getURLEchoUserAgent(),
227 fromCache: false,
228 statusCode: 200,
229 ip: "127.0.0.1",
230 statusLine: "HTTP/1.0 200 OK",
231 }
232 },
233 { label: "onCompleted",
234 event: "onCompleted",
235 details: {
236 url: getURLEchoUserAgent(),
237 fromCache: false,
238 statusCode: 200,
239 ip: "127.0.0.1",
240 statusLine: "HTTP/1.0 200 OK",
241 }
242 },
243 ],
244 [ // event order
245 ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
246 "onHeadersReceived", "onResponseStarted", "onCompleted"]
247 ],
248 {}, ["blocking"]);
249 // Check the page content for our modified User-Agent string.
250 navigateAndWait(getURLEchoUserAgent(), function() {
251 chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
252 chrome.test.assertTrue(request.pass, "Request header was not set.");
253 });
254 chrome.tabs.executeScript(tabId,
255 {
256 code: "chrome.extension.sendRequest(" +
257 "{pass: document.body.innerText.indexOf('FoobarUA') >= 0});"
258 });
259 });
260 },
261
262 // Loads a testserver page that echoes the User-Agent header that was
263 // sent to fetch it. We modify the outgoing User-Agent in
264 // onBeforeSendHeaders, so we should see that modified version.
265 // In this version we check whether we can set binary header values.
266 function modifyBinaryRequestHeaders() {
267 expect(
268 [ // events
269 { label: "onBeforeRequest",
270 event: "onBeforeRequest",
271 details: {
272 url: getURLEchoUserAgent(),
273 frameUrl: getURLEchoUserAgent()
274 }
275 },
276 { label: "onBeforeSendHeaders",
277 event: "onBeforeSendHeaders",
278 details: {
279 url: getURLEchoUserAgent(),
280 // Note: no requestHeaders because we don't ask for them.
281 },
282 retval: {requestHeaders: [{name: "User-Agent",
283 binaryValue: toCharCodes("FoobarUA")}]}
284 },
285 { label: "onSendHeaders",
286 event: "onSendHeaders",
287 details: {
288 url: getURLEchoUserAgent()
289 }
290 },
291 { label: "onHeadersReceived",
292 event: "onHeadersReceived",
293 details: {
294 url: getURLEchoUserAgent(),
295 statusLine: "HTTP/1.0 200 OK",
296 }
297 },
298 { label: "onResponseStarted",
299 event: "onResponseStarted",
300 details: {
301 url: getURLEchoUserAgent(),
302 fromCache: false,
303 statusCode: 200,
304 ip: "127.0.0.1",
305 statusLine: "HTTP/1.0 200 OK",
306 }
307 },
308 { label: "onCompleted",
309 event: "onCompleted",
310 details: {
311 url: getURLEchoUserAgent(),
312 fromCache: false,
313 statusCode: 200,
314 ip: "127.0.0.1",
315 statusLine: "HTTP/1.0 200 OK",
316 }
317 },
318 ],
319 [ // event order
320 ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
321 "onHeadersReceived", "onResponseStarted", "onCompleted"]
322 ],
323 {}, ["blocking"]);
324 // Check the page content for our modified User-Agent string.
325 navigateAndWait(getURLEchoUserAgent(), function() {
326 chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
327 chrome.test.assertTrue(request.pass, "Request header was not set.");
328 });
329 chrome.tabs.executeScript(tabId,
330 {
331 code: "chrome.extension.sendRequest(" +
332 "{pass: document.body.innerText.indexOf('FoobarUA') >= 0});"
333 });
334 });
335 },
336
337 // Loads a testserver page that sets a cookie "Foo=Bar" but removes
338 // the cookies from the response headers so that they are not set.
339 function modifyResponseHeaders() {
340 expect(
341 [ // events
342 { label: "onBeforeRequest",
343 event: "onBeforeRequest",
344 details: {
345 method: "GET",
346 type: "main_frame",
347 url: getURLSetCookie(),
348 frameUrl: getURLSetCookie()
349 }
350 },
351 { label: "onBeforeSendHeaders",
352 event: "onBeforeSendHeaders",
353 details: {
354 url: getURLSetCookie(),
355 // Note: no requestHeaders because we don't ask for them.
356 },
357 },
358 { label: "onSendHeaders",
359 event: "onSendHeaders",
360 details: {
361 url: getURLSetCookie(),
362 }
363 },
364 { label: "onHeadersReceived",
365 event: "onHeadersReceived",
366 details: {
367 url: getURLSetCookie(),
368 statusLine: "HTTP/1.0 200 OK",
369 responseHeadersExist: true,
370 },
371 retval_function: function(name, details) {
372 responseHeaders = details.responseHeaders;
373 var found = false;
374 for (var i = 0; i < responseHeaders.length; ++i) {
375 if (responseHeaders[i].name === "Set-Cookie" &&
376 responseHeaders[i].value.indexOf("Foo") != -1) {
377 found = true;
378 responseHeaders.splice(i);
379 break;
380 }
381 }
382 chrome.test.assertTrue(found);
383 return {responseHeaders: responseHeaders};
384 }
385 },
386 { label: "onResponseStarted",
387 event: "onResponseStarted",
388 details: {
389 url: getURLSetCookie(),
390 fromCache: false,
391 statusCode: 200,
392 statusLine: "HTTP/1.0 200 OK",
393 ip: "127.0.0.1",
394 responseHeadersExist: true,
395 }
396 },
397 { label: "onCompleted",
398 event: "onCompleted",
399 details: {
400 url: getURLSetCookie(),
401 fromCache: false,
402 statusCode: 200,
403 statusLine: "HTTP/1.0 200 OK",
404 ip: "127.0.0.1",
405 responseHeadersExist: true,
406 }
407 },
408 ],
409 [ // event order
410 ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
411 "onHeadersReceived", "onResponseStarted", "onCompleted"]
412 ],
413 {}, ["blocking", "responseHeaders"]);
414 // Check that the cookie was really removed.
415 navigateAndWait(getURLSetCookie(), function() {
416 chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
417 chrome.test.assertTrue(request.pass, "Cookie was not removed.");
418 });
419 chrome.tabs.executeScript(tabId,
420 { code: "chrome.extension.sendRequest(" +
421 "{pass: document.cookie.indexOf('Foo') == -1});"
422 });
423 });
424 },
425
426 // Loads a testserver page that sets a cookie "Foo=U+FDD1" which is not a
427 // valid UTF-8 code point. Therefore, it cannot be passed to JavaScript
428 // as a normal string.
429 function handleNonUTF8InModifyResponseHeaders() {
430 expect(
431 [ // events
432 { label: "onBeforeRequest",
433 event: "onBeforeRequest",
434 details: {
435 method: "GET",
436 type: "main_frame",
437 url: getURLNonUTF8SetCookie(),
438 frameUrl: getURLNonUTF8SetCookie()
439 }
440 },
441 { label: "onBeforeSendHeaders",
442 event: "onBeforeSendHeaders",
443 details: {
444 url: getURLNonUTF8SetCookie(),
445 // Note: no requestHeaders because we don't ask for them.
446 },
447 },
448 { label: "onSendHeaders",
449 event: "onSendHeaders",
450 details: {
451 url: getURLNonUTF8SetCookie(),
452 }
453 },
454 { label: "onHeadersReceived",
455 event: "onHeadersReceived",
456 details: {
457 url: getURLNonUTF8SetCookie(),
458 statusLine: "HTTP/1.0 200 OK",
459 responseHeadersExist: true,
460 },
461 retval_function: function(name, details) {
462 console.log(JSON.stringify(details));
463 responseHeaders = details.responseHeaders;
464 var found = false;
465 var expectedValue = [
466 "F".charCodeAt(0),
467 "o".charCodeAt(0),
468 "o".charCodeAt(0),
469 0x3D, 0xFE, 0xD1
470 ];
471
472 for (var i = 0; i < responseHeaders.length; ++i) {
473 if (responseHeaders[i].name === "Set-Cookie" &&
474 deepEq(responseHeaders[i].binaryValue, expectedValue)) {
475 found = true;
476 responseHeaders.splice(i);
477 break;
478 }
479 }
480 chrome.test.assertTrue(found);
481 return {responseHeaders: responseHeaders};
482 }
483 },
484 { label: "onResponseStarted",
485 event: "onResponseStarted",
486 details: {
487 url: getURLNonUTF8SetCookie(),
488 fromCache: false,
489 statusCode: 200,
490 statusLine: "HTTP/1.0 200 OK",
491 ip: "127.0.0.1",
492 responseHeadersExist: true,
493 }
494 },
495 { label: "onCompleted",
496 event: "onCompleted",
497 details: {
498 url: getURLNonUTF8SetCookie(),
499 fromCache: false,
500 statusCode: 200,
501 statusLine: "HTTP/1.0 200 OK",
502 ip: "127.0.0.1",
503 responseHeadersExist: true,
504 }
505 },
506 ],
507 [ // event order
508 ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
509 "onHeadersReceived", "onResponseStarted", "onCompleted"]
510 ],
511 {}, ["blocking", "responseHeaders"]);
512 // Check that the cookie was really removed.
513 navigateAndWait(getURLNonUTF8SetCookie(), function() {
514 chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
515 chrome.test.assertTrue(request.pass, "Cookie was not removed.");
516 });
517 chrome.tabs.executeScript(tabId,
518 { code: "chrome.extension.sendRequest(" +
519 "{pass: document.cookie.indexOf('Foo') == -1});"
520 });
521 });
522 },
523
524 // Checks that XHR requests from ourself are invisible to blocking handlers.
525 function xhrsFromOurselfAreInvisible() {
526 expect(
527 [ // events
528 { label: "a-onBeforeRequest",
529 event: "onBeforeRequest",
530 details: {
531 url: getURL("simpleLoad/a.html"),
532 frameUrl: getURL("simpleLoad/a.html")
533 }
534 },
535 { label: "a-onResponseStarted",
536 event: "onResponseStarted",
537 details: {
538 url: getURL("simpleLoad/a.html"),
539 statusCode: 200,
540 fromCache: false,
541 statusLine: "HTTP/1.1 200 OK",
542 // Request to chrome-extension:// url has no IP.
543 }
544 },
545 { label: "a-onCompleted",
546 event: "onCompleted",
547 details: {
548 url: getURL("simpleLoad/a.html"),
549 statusCode: 200,
550 fromCache: false,
551 statusLine: "HTTP/1.1 200 OK",
552 // Request to chrome-extension:// url has no IP.
553 }
554 },
555 // We do not see onBeforeRequest for the XHR request here because it is
556 // handled by a blocking handler.
557 { label: "x-onSendHeaders",
558 event: "onSendHeaders",
559 details: {
560 url: getURLHttpXHRData(),
561 tabId: 1,
562 type: "xmlhttprequest",
563 }
564 },
565 { label: "x-onResponseStarted",
566 event: "onResponseStarted",
567 details: {
568 url: getURLHttpXHRData(),
569 statusCode: 200,
570 fromCache: false,
571 statusLine: "HTTP/1.0 200 OK",
572 tabId: 1,
573 type: "xmlhttprequest",
574 ip: "127.0.0.1",
575 // Request to chrome-extension:// url has no IP.
576 }
577 },
578 { label: "x-onCompleted",
579 event: "onCompleted",
580 details: {
581 url: getURLHttpXHRData(),
582 statusCode: 200,
583 fromCache: false,
584 statusLine: "HTTP/1.0 200 OK",
585 tabId: 1,
586 type: "xmlhttprequest",
587 ip: "127.0.0.1",
588 // Request to chrome-extension:// url has no IP.
589 }
590 },
591 { label: "b-onBeforeRequest",
592 event: "onBeforeRequest",
593 details: {
594 url: getURL("complexLoad/b.jpg"),
595 frameUrl: getURL("complexLoad/b.jpg")
596 }
597 },
598 { label: "b-onResponseStarted",
599 event: "onResponseStarted",
600 details: {
601 url: getURL("complexLoad/b.jpg"),
602 statusCode: 200,
603 fromCache: false,
604 statusLine: "HTTP/1.1 200 OK",
605 // Request to chrome-extension:// url has no IP.
606 }
607 },
608 { label: "b-onCompleted",
609 event: "onCompleted",
610 details: {
611 url: getURL("complexLoad/b.jpg"),
612 statusCode: 200,
613 fromCache: false,
614 statusLine: "HTTP/1.1 200 OK",
615 // Request to chrome-extension:// url has no IP.
616 }
617 },
618 ],
619 [ // event order
620 ["a-onBeforeRequest", "a-onResponseStarted", "a-onCompleted",
621 "x-onSendHeaders", "x-onResponseStarted", "x-onCompleted",
622 "b-onBeforeRequest", "b-onResponseStarted", "b-onCompleted"]
623 ],
624 {}, ["blocking"]);
625 // Check the page content for our modified User-Agent string.
626 navigateAndWait(getURL("simpleLoad/a.html"), function() {
627 var req = new XMLHttpRequest();
628 var asynchronous = false;
629 req.open("GET", getURLHttpXHRData(), asynchronous);
630 req.send(null);
631 navigateAndWait(getURL("complexLoad/b.jpg"));
632 });
633 },
634 ]);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698