OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var onRequest = chrome.declarativeWebRequest.onRequest; | 5 var onRequest = chrome.declarativeWebRequest.onRequest; |
6 var AddResponseHeader = | 6 var AddResponseHeader = |
7 chrome.declarativeWebRequest.AddResponseHeader; | 7 chrome.declarativeWebRequest.AddResponseHeader; |
8 var RequestMatcher = chrome.declarativeWebRequest.RequestMatcher; | 8 var RequestMatcher = chrome.declarativeWebRequest.RequestMatcher; |
9 var CancelRequest = chrome.declarativeWebRequest.CancelRequest; | 9 var CancelRequest = chrome.declarativeWebRequest.CancelRequest; |
10 var RedirectByRegEx = chrome.declarativeWebRequest.RedirectByRegEx; | 10 var RedirectByRegEx = chrome.declarativeWebRequest.RedirectByRegEx; |
11 var RedirectRequest = chrome.declarativeWebRequest.RedirectRequest; | 11 var RedirectRequest = chrome.declarativeWebRequest.RedirectRequest; |
12 var RedirectToTransparentImage = | 12 var RedirectToTransparentImage = |
13 chrome.declarativeWebRequest.RedirectToTransparentImage; | 13 chrome.declarativeWebRequest.RedirectToTransparentImage; |
14 var RedirectToEmptyDocument = | 14 var RedirectToEmptyDocument = |
15 chrome.declarativeWebRequest.RedirectToEmptyDocument; | 15 chrome.declarativeWebRequest.RedirectToEmptyDocument; |
16 var SetRequestHeader = | 16 var SetRequestHeader = |
17 chrome.declarativeWebRequest.SetRequestHeader; | 17 chrome.declarativeWebRequest.SetRequestHeader; |
18 var RemoveRequestHeader = | 18 var RemoveRequestHeader = |
19 chrome.declarativeWebRequest.RemoveRequestHeader; | 19 chrome.declarativeWebRequest.RemoveRequestHeader; |
20 var RemoveResponseHeader = | 20 var RemoveResponseHeader = |
21 chrome.declarativeWebRequest.RemoveResponseHeader; | 21 chrome.declarativeWebRequest.RemoveResponseHeader; |
22 var IgnoreRules = | 22 var IgnoreRules = |
23 chrome.declarativeWebRequest.IgnoreRules; | 23 chrome.declarativeWebRequest.IgnoreRules; |
| 24 var AddRequestCookie = chrome.declarativeWebRequest.AddRequestCookie; |
| 25 var AddResponseCookie = chrome.declarativeWebRequest.AddResponseCookie; |
| 26 var EditRequestCookie = chrome.declarativeWebRequest.EditRequestCookie; |
| 27 var EditResponseCookie = chrome.declarativeWebRequest.EditResponseCookie; |
| 28 var RemoveRequestCookie = chrome.declarativeWebRequest.RemoveRequestCookie; |
| 29 var RemoveResponseCookie = chrome.declarativeWebRequest.RemoveResponseCookie; |
24 | 30 |
25 // Constants as functions, not to be called until after runTests. | 31 // Constants as functions, not to be called until after runTests. |
26 function getURLEchoUserAgent() { | 32 function getURLEchoUserAgent() { |
27 return getServerURL('echoheader?User-Agent'); | 33 return getServerURL('echoheader?User-Agent'); |
28 } | 34 } |
29 | 35 |
30 function getURLHttpSimple() { | 36 function getURLHttpSimple() { |
31 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/a.html"); | 37 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/a.html"); |
32 } | 38 } |
33 | 39 |
34 function getURLHttpSimpleB() { | 40 function getURLHttpSimpleB() { |
35 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/b.html"); | 41 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/b.html"); |
36 } | 42 } |
37 | 43 |
38 function getURLHttpComplex() { | 44 function getURLHttpComplex() { |
39 return getServerURL( | 45 return getServerURL( |
40 "files/extensions/api_test/webrequest/complexLoad/a.html"); | 46 "files/extensions/api_test/webrequest/complexLoad/a.html"); |
41 } | 47 } |
42 | 48 |
43 function getURLHttpRedirectTest() { | 49 function getURLHttpRedirectTest() { |
44 return getServerURL( | 50 return getServerURL( |
45 "files/extensions/api_test/webrequest/declarative/a.html"); | 51 "files/extensions/api_test/webrequest/declarative/a.html"); |
46 } | 52 } |
47 | 53 |
48 function getURLSetCookie() { | 54 function getURLSetCookie() { |
49 return getServerURL('set-cookie?Foo=Bar'); | 55 return getServerURL('set-cookie?Foo=Bar'); |
50 } | 56 } |
51 | 57 |
| 58 function getURLSetCookie2() { |
| 59 return getServerURL('set-cookie?passedCookie=Foo&editedCookie=Foo&' + |
| 60 'deletedCookie=Foo'); |
| 61 } |
| 62 |
| 63 function getURLEchoCookie() { |
| 64 return getServerURL('echoheader?Cookie'); |
| 65 } |
| 66 |
52 function getURLHttpXHRData() { | 67 function getURLHttpXHRData() { |
53 return getServerURL("files/extensions/api_test/webrequest/xhr/data.json", | 68 return getServerURL("files/extensions/api_test/webrequest/xhr/data.json", |
54 "b.com"); | 69 "b.com"); |
55 } | 70 } |
| 71 |
56 function getURLHttpSimpleOnB() { | 72 function getURLHttpSimpleOnB() { |
57 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/a.html", | 73 return getServerURL("files/extensions/api_test/webrequest/simpleLoad/a.html", |
58 "b.com"); | 74 "b.com"); |
59 } | 75 } |
60 | 76 |
61 runTests([ | 77 runTests([ |
62 | 78 |
63 function testCancelRequest() { | 79 function testCancelRequest() { |
64 ignoreUnexpected = true; | 80 ignoreUnexpected = true; |
65 expect( | 81 expect( |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 [ {conditions: [new RequestMatcher({url: {pathContains: "simpleLoad"}})], | 351 [ {conditions: [new RequestMatcher({url: {pathContains: "simpleLoad"}})], |
336 actions: [new CancelRequest()]}, | 352 actions: [new CancelRequest()]}, |
337 {conditions: [new RequestMatcher({url: {pathContains: "a.html"}})], | 353 {conditions: [new RequestMatcher({url: {pathContains: "a.html"}})], |
338 actions: [new IgnoreRules({lowerPriorityThan: 200})], | 354 actions: [new IgnoreRules({lowerPriorityThan: 200})], |
339 priority: 200} | 355 priority: 200} |
340 ], | 356 ], |
341 function() {navigateAndWait(getURLHttpSimple());} | 357 function() {navigateAndWait(getURLHttpSimple());} |
342 ); | 358 ); |
343 }, | 359 }, |
344 | 360 |
| 361 function testEditRequestCookies() { |
| 362 ignoreUnexpected = true; |
| 363 expect(); |
| 364 var cookie1 = {name: "requestCookie1", value: "foo"}; |
| 365 var cookie2 = {name: "requestCookie2", value: "foo"}; |
| 366 onRequest.addRules( |
| 367 [ {conditions: [new RequestMatcher({})], |
| 368 actions: [ |
| 369 // We exploit the fact that cookies are first added, then modified |
| 370 // and finally removed. |
| 371 new AddRequestCookie({cookie: cookie1}), |
| 372 new AddRequestCookie({cookie: cookie2}), |
| 373 new EditRequestCookie({filter: {name: "requestCookie1"}, |
| 374 modification: {value: "bar"}}), |
| 375 new RemoveRequestCookie({filter: {name: "requestCookie2"}}) |
| 376 ]} |
| 377 ], |
| 378 function() { |
| 379 navigateAndWait(getURLEchoCookie(), function() { |
| 380 chrome.test.listenOnce(chrome.extension.onRequest, function(request) { |
| 381 chrome.test.assertTrue(request.pass, "Invalid cookies. " + |
| 382 JSON.stringify(request.cookies)); |
| 383 }); |
| 384 chrome.tabs.executeScript(tabId, {code: |
| 385 "function hasCookie(name, value) {" + |
| 386 " var entry = name + '=' + value;" + |
| 387 " return document.body.innerText.indexOf(entry) >= 0;" + |
| 388 "};" + |
| 389 "var result = {};" + |
| 390 "result.pass = hasCookie('requestCookie1', 'bar') && " + |
| 391 " !hasCookie('requestCookie1', 'foo') && " + |
| 392 " !hasCookie('requestCookie2', 'foo');" + |
| 393 "result.cookies = document.body.innerText;" + |
| 394 "chrome.extension.sendRequest(result);"}); |
| 395 }); |
| 396 } |
| 397 ); |
| 398 }, |
| 399 |
| 400 function testEditResponseCookies() { |
| 401 ignoreUnexpected = true; |
| 402 expect(); |
| 403 onRequest.addRules( |
| 404 [ {conditions: [new RequestMatcher({})], |
| 405 actions: [ |
| 406 new AddResponseCookie({cookie: {name: "addedCookie", value: "Foo"}}), |
| 407 new EditResponseCookie({filter: {name: "editedCookie"}, |
| 408 modification: {value: "bar"}}), |
| 409 new RemoveResponseCookie({filter: {name: "deletedCookie"}}) |
| 410 ]} |
| 411 ], |
| 412 function() { |
| 413 navigateAndWait(getURLSetCookie2(), function() { |
| 414 chrome.test.listenOnce(chrome.extension.onRequest, function(request) { |
| 415 chrome.test.assertTrue(request.pass, "Invalid cookies. " + |
| 416 JSON.stringify(request.cookies)); |
| 417 }); |
| 418 chrome.tabs.executeScript(tabId, {code: |
| 419 "var cookies = document.cookie.split('; ');" + |
| 420 "var cookieMap = {};" + |
| 421 "for (var i = 0; i < cookies.length; ++i) {" + |
| 422 " var cookieParts = cookies[i].split('=');" + |
| 423 " cookieMap[cookieParts[0]] = cookieParts[1];" + |
| 424 "}" + |
| 425 "var result = {};" + |
| 426 "result.cookies = cookieMap;" + |
| 427 "result.pass = (cookieMap.passedCookie === 'Foo') &&" + |
| 428 " (cookieMap.addedCookie === 'Foo') &&" + |
| 429 " (cookieMap.editedCookie === 'bar') &&" + |
| 430 " !cookieMap.hasOwnProperty('deletedCookie');" + |
| 431 "chrome.extension.sendRequest(result);"}); |
| 432 }); |
| 433 } |
| 434 ); |
| 435 }, |
| 436 |
345 function testPermission() { | 437 function testPermission() { |
346 // Test that a redirect is ignored if the extension has no permission. | 438 // Test that a redirect is ignored if the extension has no permission. |
347 // we load a.html from a.com and issue an XHR to b.com, which is not | 439 // we load a.html from a.com and issue an XHR to b.com, which is not |
348 // contained in the extension's host permissions. Therefore, we cannot | 440 // contained in the extension's host permissions. Therefore, we cannot |
349 // redirect it and the request succeeds. | 441 // redirect it and the request succeeds. |
350 ignoreUnexpected = true; | 442 ignoreUnexpected = true; |
351 expect(); | 443 expect(); |
352 onRequest.addRules( | 444 onRequest.addRules( |
353 [ {'conditions': [new RequestMatcher({'url': {'pathContains': ".json"}})], | 445 [ {'conditions': [new RequestMatcher({'url': {'pathContains': ".json"}})], |
354 'actions': [ | 446 'actions': [ |
(...skipping 13 matching lines...) Expand all Loading... |
368 chrome.test.fail("Redirect was not prevented. Status: " + | 460 chrome.test.fail("Redirect was not prevented. Status: " + |
369 this.status + ", responseText: " + this.responseText); | 461 this.status + ", responseText: " + this.responseText); |
370 } | 462 } |
371 } | 463 } |
372 req.open("GET", getURLHttpXHRData(), asynchronous); | 464 req.open("GET", getURLHttpXHRData(), asynchronous); |
373 req.send(null); | 465 req.send(null); |
374 }); | 466 }); |
375 } | 467 } |
376 ); | 468 ); |
377 }, | 469 }, |
378 | |
379 ]); | 470 ]); |
OLD | NEW |