Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/fetch-event-redirect.https.html |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/fetch-event-redirect.https.html b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/fetch-event-redirect.https.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..17f4cb15e80ed915024ecf4a4528e54c1633f333 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/fetch-event-redirect.https.html |
@@ -0,0 +1,1102 @@ |
+<!DOCTYPE html> |
+<title>Service Worker: Fetch Event Redirect Handling</title> |
+<meta name=timeout content=long> |
+<script src="/resources/testharness.js"></script> |
+<script src="resources/testharness-helpers.js"></script> |
+<script src="/resources/testharnessreport.js"></script> |
+<script src="resources/get-host-info.sub.js"></script> |
+<script src="resources/test-helpers.sub.js"></script> |
+<body> |
+<script> |
+ |
+// ------------------------ |
+// Utilities for testing non-navigation requests that are intercepted with |
+// a redirect. |
+ |
+var host_info = get_host_info(); |
+var worker = 'resources/fetch-rewrite-worker.js'; |
+var frameURL = host_info['HTTPS_ORIGIN'] + base_path() + |
+ 'resources/fetch-event-redirect-iframe.html'; |
+var baseScope = 'resources/'; |
+var redirect = 'redirect.py'; |
+var success = base_path() + 'resources/success.py'; |
+ |
+function redirect_fetch_test(t, test) { |
+ var scope = baseScope + test.name; |
+ service_worker_unregister_and_register(t, worker, scope).then(function(reg) { |
+ return wait_for_state(t, reg.installing, 'activated'); |
+ }).then(function() { |
+ return with_iframe(scope + '?url=' + encodeURIComponent(frameURL)); |
+ }).then(function(frame) { |
+ var hostKeySuffix = test['url_credentials'] ? '_WITH_CREDS' : ''; |
+ |
+ var acaorigin = ''; |
+ var host = host_info['HTTPS_ORIGIN' + hostKeySuffix]; |
+ if (test['redirect_dest'] === 'no-cors') { |
+ host = host_info['HTTPS_REMOTE_ORIGIN' + hostKeySuffix] |
+ } else if (test['redirect_dest'] === 'cors') { |
+ acaorigin = '?ACAOrigin=' + encodeURIComponent(host_info['HTTPS_ORIGIN']); |
+ host = host_info['HTTPS_REMOTE_ORIGIN' + hostKeySuffix] |
+ } |
+ |
+ var dest = '?Redirect=' + encodeURIComponent(host + success + acaorigin); |
+ |
+ var expectedTypeParam = test['expected_type'] |
+ ? '&expected_type=' + test['expected_type'] |
+ : ''; |
+ |
+ var expectedRedirectedParam = test['expected_redirected'] |
+ ? '&expected_redirected=' + test['expected_redirected'] |
+ : ''; |
+ |
+ var url = scope + |
+ '?url=' + encodeURIComponent(redirect + dest) + |
+ expectedTypeParam + expectedRedirectedParam |
+ |
+ var p = new Promise(function(resolve, reject) { |
+ var channel = new MessageChannel(); |
+ channel.port1.onmessage = function(e) { |
+ frame.remove(); |
+ if (e.data.result === 'reject') { |
+ reject(e.data.detail); |
+ } else if (e.data.result === 'success') { |
+ resolve(e.data.result); |
+ } else { |
+ resolve(e.data.detail); |
+ } |
+ }; |
+ frame.contentWindow.postMessage({ |
+ url: url, |
+ request_init: test.request_init, |
+ redirect_dest: test.redirect_dest, |
+ expected_type: test.expected_type, |
+ expected_redirected: test.expected_redirected, |
+ }, '*', [channel.port2]); |
+ }); |
+ |
+ if (test.should_reject) { |
+ return assert_promise_rejects(p); |
+ } |
+ |
+ return p.then(function(result) { |
+ if (result !== 'success') { |
+ throw(new Error(result)); |
+ } |
+ }); |
+ }).then(function() { |
+ return service_worker_unregister_and_done(t, scope); |
+ }).catch(unreached_rejection(t)); |
+} |
+ |
+// ------------------------ |
+// Test every combination of: |
+// - RequestMode (same-origin, cors, no-cors) |
+// - RequestRedirect (manual, follow, error) |
+// - redirect destination origin (same-origin, cors, no-cors) |
+// - redirect destination credentials (no user/pass, user/pass) |
+// |
+// TODO: add navigation requests |
+// TODO: add redirects to data URI and verify same-origin data-URL flag behavior |
+// TODO: add test where original redirect URI is cross-origin |
+// TODO: verify final method is correct for 301, 302, and 303 |
+// TODO: verify CORS redirect results in all further redirects being |
+// considered cross origin |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'same-origin without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'no-cors without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'cors without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'same-origin without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'no-cors without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'cors without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'same-origin without credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'no-cors without credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'cors without credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'same-origin with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'no-cors with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-cors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, cors mode Request redirected to ' + |
+ 'cors with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'same-origin with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'no-cors with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-sameorigin-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, same-origin mode Request redirected to ' + |
+ 'cors with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because only navigations can be intercepted with |
+ // opaqueredirect responses |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'same-origin with credentials should fail opaqueredirect interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'no-cors with credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-manual-nocors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'opaqueredirect', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'manual', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, manual redirect, no-cors mode Request redirected to ' + |
+ 'cors with credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'same-origin without credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ // should reject because CORS requests require CORS headers on cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'no-cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'cors', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'cors without credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'same-origin without credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because same-origin requests cannot load cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'no-cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because same-origin requests cannot load cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'same-origin without credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'opaque', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'no-cors without credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'opaque', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'cors without credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'same-origin with credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ // should reject because CORS requests require CORS headers on cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'no-cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-cors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'cors', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'cors' |
+ }, |
+ // should reject because CORS requests do not allow user/pass entries in |
+ // cross-origin URLs |
+ // NOTE: https://github.com/whatwg/fetch/issues/112 |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, cors mode Request redirected to ' + |
+ 'cors with credentials should fail interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'same-origin with credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because same-origin requests cannot load cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'no-cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-sameorigin-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'should-not-get-a-response', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because same-origin requests cannot load cross-origin |
+ // resources |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, follow redirect, same-origin mode Request redirected to ' + |
+ 'cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'basic', |
+ expected_redirected: true, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'same-origin with credentials should succeed interception ' + |
+ 'and response should be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'opaque', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'no-cors with credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-follow-nocors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'opaque', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'follow', |
+ mode: 'no-cors' |
+ }, |
+ should_reject: false |
+ }); |
+}, 'Non-navigation, follow redirect, no-cors mode Request redirected to ' + |
+ 'cors with credentials should succeed interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'same-origin without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'no-cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'same-origin without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'no-cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-sameorigin-nocreds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'same-origin without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-nocors-nocreds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'no-cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-cors-nocreds', |
+ redirect_dest: 'cors', |
+ url_credentials: false, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'cors without credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'same-origin with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'no-cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-cors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, cors mode Request redirected to ' + |
+ 'cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'same-origin with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'no-cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-sameorigin-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'same-origin' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, same-origin mode Request redirected to ' + |
+ 'cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-sameorigin-creds', |
+ redirect_dest: 'same-origin', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'same-origin with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-nocors-creds', |
+ redirect_dest: 'no-cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'no-cors with credentials should fail interception ' + |
+ 'and response should not be redirected'); |
+ |
+async_test(function(t) { |
+ redirect_fetch_test(t, { |
+ name: 'nonav-error-nocors-redirects-to-cors-creds', |
+ redirect_dest: 'cors', |
+ url_credentials: true, |
+ expected_type: 'error', |
+ expected_redirected: false, |
+ request_init: { |
+ redirect: 'error', |
+ mode: 'no-cors' |
+ }, |
+ // should reject because requests with 'error' RequestRedirect cannot be |
+ // redirected. |
+ should_reject: true |
+ }); |
+}, 'Non-navigation, error redirect, no-cors mode Request redirected to ' + |
+ 'cors with credentials should fail interception and response should not ' + |
+ 'be redirected'); |
+</script> |
+</body> |