Index: LayoutTests/http/tests/fetch/script-tests/fetch-access-control-cookie-nocors.js |
diff --git a/LayoutTests/http/tests/fetch/script-tests/fetch-access-control-cookie-nocors.js b/LayoutTests/http/tests/fetch/script-tests/fetch-access-control-cookie-nocors.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c8e6c860ca63d5d96d6dd30354c527fcd6c1b3f3 |
--- /dev/null |
+++ b/LayoutTests/http/tests/fetch/script-tests/fetch-access-control-cookie-nocors.js |
@@ -0,0 +1,84 @@ |
+if (self.importScripts) { |
+ importScripts('../resources/fetch-test-helpers.js'); |
+ importScripts('/serviceworker/resources/fetch-access-control-util.js'); |
+} |
+ |
+// This test assumes TEST_TARGETS are executed in order and sequentially. |
+var TEST_TARGETS = []; |
+ |
+// cookieCheckX checks the cookies sent in the request. |
+// SetCookie=cookieX indicates to set cookies in the response. |
+// So a SetCookie=cookieX indication may affect the next cookieCheckX, |
+// but not the cookieCheckX in the same request. |
+ |
+// Test same-origin requests. |
+// The same set of requests are also in fetch-access-control-cookie.js, |
+// with different modes (same-origin and cors). |
+// forEach structure is left unchanged here to keep |
+// fetch-access-control-cookie.js and fetch-access-control-cookie-no-cors.js |
+// parallel with small diffs. |
+['no-cors'].forEach(function(mode) { |
+ // At first, cookie is cookie=cookie1. |
+ TEST_TARGETS.push( |
+ // Set cookie=cookieA by credentials=same-origin. |
+ [BASE_URL + 'mode=' + mode + '&credentials=same-origin&SetCookie=cookieA', |
+ [fetchResolved, hasBody], [cookieCheck1]], |
+ |
+ // Set cookie=cookieB by credentials=include. |
+ [BASE_URL + 'mode=' + mode + '&credentials=include&SetCookie=cookieB', |
+ [fetchResolved, hasBody], [cookieCheckA]], |
+ // Check cookie. |
+ [BASE_URL + 'mode=' + mode + '&credentials=same-origin', |
+ [fetchResolved, hasBody], [cookieCheckB]], |
+ |
+ // Try to set cookie=cookieC by credentials=omit, but |
+ // cookie is not sent/updated if credentials flag is unset. |
+ [BASE_URL + 'mode=' + mode + '&credentials=omit&SetCookie=cookieC', |
+ [fetchResolved, hasBody], [cookieCheckNone]], |
+ |
+ // Set-Cookie2 header is ignored. |
+ [BASE_URL + 'mode=' + mode + |
+ '&credentials=same-origin&SetCookie2=cookieC', |
+ [fetchResolved, hasBody], [cookieCheckB]], |
+ |
+ // Reset cookie to cookie1. |
+ [BASE_URL + 'mode=' + mode + '&credentials=same-origin&SetCookie=cookie1', |
+ [fetchResolved, hasBody], [cookieCheckB]]); |
+ }); |
+ |
+// Test cross-origin requests. |
+ |
+// URL to check current cookie. |
+var OTHER_CHECK_URL = |
+ OTHER_BASE_URL + |
+ 'mode=cors&credentials=include&method=POST&ACAOrigin=' + BASE_ORIGIN + |
+ '&ACACredentials=true&label='; |
+ |
+TEST_TARGETS.push( |
+ // At first, cookie is cookie=cookie2. |
+ // Tests for mode=no-cors. |
+ |
+ // Try to set cookieC, but |
+ // cookie is not sent/updated because credentials flag is not set. |
+ [OTHER_BASE_URL + 'mode=no-cors&credentials=omit&SetCookie=cookieC', |
+ [fetchResolved, noBody, typeOpaque], |
+ onlyOnServiceWorkerProxiedTest([cookieCheckNone])], |
+ [OTHER_CHECK_URL + 'otherCheck1', [fetchResolved], [cookieCheck2]], |
+ |
+ // Set cookieC with opaque response. Response is opaque, but cookie is set. |
+ [OTHER_BASE_URL + 'mode=no-cors&credentials=include&SetCookie=cookieC', |
+ [fetchResolved, noBody, typeOpaque], |
+ onlyOnServiceWorkerProxiedTest([cookieCheck2])], |
+ [OTHER_CHECK_URL + 'otherCheck2', [fetchResolved], [cookieCheckC]], |
+ |
+ // Set cookieA with opaque response. Response is opaque, but cookie is set. |
+ [OTHER_BASE_URL + 'mode=no-cors&credentials=same-origin&SetCookie=cookieA', |
+ [fetchResolved, noBody, typeOpaque], |
+ onlyOnServiceWorkerProxiedTest([cookieCheckC])], |
+ [OTHER_CHECK_URL + 'otherCheck3', [fetchResolved], [cookieCheckA]] |
+); |
+ |
+if (self.importScripts) { |
+ executeTests(TEST_TARGETS); |
+ done(); |
+} |