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

Unified Diff: LayoutTests/http/tests/serviceworker/fetch-access-control.html

Issue 399543002: [ServiceWorker] Make fetch() method better conformance with the spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: incorporated falken's comment Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | LayoutTests/http/tests/serviceworker/resources/fetch-access-control.php » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: LayoutTests/http/tests/serviceworker/fetch-access-control.html
diff --git a/LayoutTests/http/tests/serviceworker/fetch-access-control.html b/LayoutTests/http/tests/serviceworker/fetch-access-control.html
new file mode 100644
index 0000000000000000000000000000000000000000..8f1be8431a4aeeaa936764cf01c463e5088b2d68
--- /dev/null
+++ b/LayoutTests/http/tests/serviceworker/fetch-access-control.html
@@ -0,0 +1,594 @@
+<!DOCTYPE html>
+<title>Service Worker: fetch()</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.js"></script>
+<body>
+<script>
+var SCOPE = 'resources/fetch-access-control-iframe.html';
+var BASE_URL = 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-control.php?';
+var OTHER_BASE_URL = 'http://localhost:8000/serviceworker/resources/fetch-access-control.php?';
+var REDIRECT_URL = 'http://127.0.0.1:8000/serviceworker/resources/redirect.php?Redirect=';
+var IFRAME_URL = 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-control-iframe.html';
+var WORKER_URL = 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-control-worker.js';
+var IFRAME_ORIGIN = 'http://127.0.0.1:8000';
+
+// Functions to check the result from the ServiceWorker.
+var checkFetchResult = function (expected, url, data) {
+ assert_equals(data.fetchResult, expected, url + ' should be ' + expected);
+};
+var checkFetchResponseBody = function (hasBody, url, data) {
+ assert_equals(data.fetchResult,
+ 'resolved',
+ 'fetchResult must be resolved. url: ' + url);
+ assert_equals(data.hasBody,
+ hasBody,
+ 'hasBody must match. url: ' + url);
+};
+var checkFetchResponseHeader = function (name, expected, url, data) {
+ assert_equals(data.fetchResult,
+ 'resolved',
+ 'fetchResult must be resolved. url: ' + url);
+ var exist = false;
+ for (var i = 0; i < data.headers.length; ++i) {
+ if (data.headers[i][0] === name) {
+ exist = true;
+ }
+ }
+ assert_equals(exist,
+ expected,
+ 'header check failed url: ' + url + ' name: ' + name);
+};
+var checkFetchResponseType = function (type, url, data) {
+ assert_equals(data.fetchResult,
+ 'resolved',
+ 'fetchResult must be resolved. url = ' + url);
+ assert_equals(data.type,
+ type,
+ 'type must match. url: ' + url);
+};
+var fetchIgnored = checkFetchResult.bind(this, 'ignored');
+var fetchResolved = checkFetchResult.bind(this, 'resolved');
+var fetchRejected = checkFetchResult.bind(this, 'rejected');
+var fetchError = checkFetchResult.bind(this, 'error');
+var hasBody = checkFetchResponseBody.bind(this, true);
+var noBody = checkFetchResponseBody.bind(this, false);
+var hasContentLength =
+ checkFetchResponseHeader.bind(this, 'content-length', true);
+var noContentLength =
+ checkFetchResponseHeader.bind(this, 'content-length', false);
+var hasServerHeader =
+ checkFetchResponseHeader.bind(this, 'x-serviceworker-serverheader', true);
+var noServerHeader =
+ checkFetchResponseHeader.bind(this, 'x-serviceworker-serverheader', false);
+var typeBasic = checkFetchResponseType.bind(this, 'basic');
+var typeCors = checkFetchResponseType.bind(this, 'cors');
+var typeOpaque = checkFetchResponseType.bind(this, 'opaque');
+
+// Functions to check the result of JSONP which is evaluated in
+// fetch-access-control-iframe.html by appending <script> element.
+var checkJsonpResult = function (expected, url, data) {
+ assert_equals(data.jsonpResult,
+ expected,
+ url + ' jsonpResult should match');
+};
+var checkJsonpHeader = function (name, value, url, data) {
+ assert_equals(data.jsonpResult,
+ 'success',
+ url + ' jsonpResult must be success');
+ assert_equals(data.headers[name],
+ value,
+ 'Request header check failed url:' + url + ' name:' + name);
+};
+var checkJsonpMethod = function (method, url, data) {
+ assert_equals(data.jsonpResult,
+ 'success',
+ url + ' jsonpResult must be success');
+ assert_equals(data.method,
+ method,
+ 'Method must match url:' + url);
+};
+var checkJsonpAuth = function (username, password, url, data) {
+ assert_equals(data.jsonpResult,
+ 'success',
+ url + ' jsonpResult must be success');
+ assert_equals(data.username,
+ username,
+ 'Username must match. url: ' + url);
+ assert_equals(data.password,
+ password,
+ 'Password must match. url: ' + url);
+};
+var checkJsonpError = checkJsonpResult.bind(this, 'error');
+var checkJsonpSuccess = checkJsonpResult.bind(this, 'success');
+var hasCustomHeader =
+ checkJsonpHeader.bind(this, 'x-serviceworker-test', 'test');
+var noCustomHeader =
+ checkJsonpHeader.bind(this, 'x-serviceworker-test', undefined);
+var methodIsGET = checkJsonpMethod.bind(this, 'GET');
+var methodIsPOST = checkJsonpMethod.bind(this, 'POST');
+var methodIsPUT = checkJsonpMethod.bind(this, 'PUT');
+var methodIsXXX = checkJsonpMethod.bind(this, 'XXX');
+var authCheck1 = checkJsonpAuth.bind(this, 'username1', 'password1');
+var authCheck2 = checkJsonpAuth.bind(this, 'username2', 'password2');
+
+var TEST_TARGETS = [
+ [BASE_URL + 'method=GET',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'method=GET&headers={}',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'method=GET&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET, noCustomHeader]],
+ [BASE_URL + 'method=POST&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPOST, noCustomHeader]],
+ [BASE_URL + 'method=PUT',
+ [fetchError]],
+ [BASE_URL + 'method=XXX',
+ [fetchError]],
+
+ [BASE_URL + 'mode=same-origin&method=GET',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=same-origin&method=GET&headers={}',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=same-origin&method=GET&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET, hasCustomHeader]],
+ [BASE_URL + 'mode=same-origin&method=POST&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPOST, hasCustomHeader]],
+ [BASE_URL + 'mode=same-origin&method=PUT&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPUT, hasCustomHeader]],
+ [BASE_URL + 'mode=same-origin&method=XXX&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsXXX, hasCustomHeader]],
+
+ [BASE_URL + 'mode=no-cors&method=GET',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=no-cors&method=GET&headers={}',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=no-cors&method=GET&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET, noCustomHeader]],
+ [BASE_URL + 'mode=no-cors&method=POST&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPOST, noCustomHeader]],
+ [BASE_URL + 'mode=no-cors&method=PUT',
+ [fetchError]],
+ [BASE_URL + 'mode=no-cors&method=XXX',
+ [fetchError]],
+
+ [BASE_URL + 'mode=cors&method=GET',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=cors&method=GET&headers={}',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET]],
+ [BASE_URL + 'mode=cors&method=GET&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsGET, hasCustomHeader]],
+ [BASE_URL + 'mode=cors&method=POST&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPOST, hasCustomHeader]],
+ [BASE_URL + 'mode=cors&method=PUT&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsPUT, hasCustomHeader]],
+ [BASE_URL + 'mode=cors&method=XXX&headers=CUSTOM',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeBasic],
+ [methodIsXXX, hasCustomHeader]],
+
+ // CORS test
+ [OTHER_BASE_URL + 'method=GET&headers=CUSTOM',
+ [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque],
+ [methodIsGET, noCustomHeader]],
+ [OTHER_BASE_URL + 'method=POST&headers=CUSTOM',
+ [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque],
+ [methodIsPOST, noCustomHeader]],
+ [OTHER_BASE_URL + 'method=PUT&headers=CUSTOM',
+ [fetchError]],
+ [OTHER_BASE_URL + 'method=XXX&headers=CUSTOM',
+ [fetchError]],
+
+ [OTHER_BASE_URL + 'mode=same-origin&method=GET', [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=same-origin&method=POST', [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=same-origin&method=PUT', [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=same-origin&method=XXX', [fetchRejected]],
+
+ [OTHER_BASE_URL + 'mode=no-cors&method=GET&headers=CUSTOM',
+ [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque],
+ [methodIsGET, noCustomHeader]],
+ [OTHER_BASE_URL + 'mode=no-cors&method=POST&headers=CUSTOM',
+ [fetchResolved, noContentLength, noServerHeader, noBody, typeOpaque],
+ [methodIsPOST, noCustomHeader]],
+ [OTHER_BASE_URL + 'mode=no-cors&method=PUT&headers=CUSTOM',
+ [fetchError]],
+ [OTHER_BASE_URL + 'mode=no-cors&method=XXX&headers=CUSTOM',
+ [fetchError]],
+
+ [OTHER_BASE_URL + 'mode=cors&method=GET',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://127.0.0.1:8000',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://127.0.0.1:8000,http://www.example.com',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://www.example.com',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader',
+ [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://127.0.0.1:8000&ACEHeaders=X-ServiceWorker-ServerHeader',
+ [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&ACAOrigin=http://127.0.0.1:8000&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=*',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsGET, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsGET, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=GET&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsGET, hasCustomHeader]],
+
+ [OTHER_BASE_URL + 'mode=cors&method=POST',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://127.0.0.1:8000',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://127.0.0.1:8000,http://www.example.com',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://www.example.com',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*&ACEHeaders=X-ServiceWorker-ServerHeader',
+ [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://127.0.0.1:8000&ACEHeaders=X-ServiceWorker-ServerHeader',
+ [fetchResolved, noContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=*&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&ACAOrigin=http://127.0.0.1:8000&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=*',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPOST, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=*&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPOST, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=POST&headers=CUSTOM&ACAOrigin=http://127.0.0.1:8000&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPOST, hasCustomHeader]],
+
+ [OTHER_BASE_URL + 'mode=cors&method=PUT',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAMethods=PUT',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&ACAMethods=PUT',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&ACAMethods=PUT',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=PUT&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsPUT, hasCustomHeader]],
+
+ [OTHER_BASE_URL + 'mode=cors&method=XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAMethods=XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&ACAMethods=XXX',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=*&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&ACAMethods=XXX',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test',
+ [fetchResolved, noContentLength, noServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+ [OTHER_BASE_URL + 'mode=cors&method=XXX&ACAOrigin=http://127.0.0.1:8000&headers=CUSTOM&ACAMethods=PUT, XXX&ACAHeaders=x-serviceworker-test&ACEHeaders=Content-Length, X-ServiceWorker-ServerHeader',
+ [fetchResolved, hasContentLength, hasServerHeader, hasBody, typeCors],
+ [methodIsXXX, hasCustomHeader]],
+
+ // Referer check
+ [BASE_URL + 'ignore=true',
+ [fetchIgnored],
+ [checkJsonpHeader.bind(this, 'Referer', IFRAME_URL)]],
+ [BASE_URL + 'noChange=true',
+ [fetchResolved],
+ [checkJsonpHeader.bind(this, 'Referer', WORKER_URL)]],
+ [BASE_URL ,
+ [fetchResolved],
+ [checkJsonpHeader.bind(this, 'Referer', WORKER_URL)]],
+
+ // Auth check
+ [BASE_URL + 'Auth',
+ [fetchResolved, hasBody], [checkJsonpError]],
+ [BASE_URL + 'Auth&credentials=omit',
+ [fetchResolved, hasBody], [checkJsonpError]],
+ [BASE_URL + 'Auth&credentials=include',
+ [fetchResolved, hasBody], [authCheck1]],
+ [BASE_URL + 'Auth&credentials=same-origin',
+ [fetchResolved, hasBody], [authCheck1]],
+
+ [BASE_URL + 'Auth&mode=no-cors&credentials=omit',
+ [fetchResolved, hasBody], [checkJsonpError]],
+ [BASE_URL + 'Auth&mode=no-cors&credentials=include',
+ [fetchResolved, hasBody], [authCheck1]],
+ [BASE_URL + 'Auth&mode=no-cors&credentials=same-origin',
+ [fetchResolved, hasBody], [authCheck1]],
+
+ [BASE_URL + 'Auth&mode=same-origin&credentials=omit',
+ [fetchResolved, hasBody], [checkJsonpError]],
+ [BASE_URL + 'Auth&mode=same-origin&credentials=include',
+ [fetchResolved, hasBody], [authCheck1]],
+ [BASE_URL + 'Auth&mode=same-origin&credentials=same-origin',
+ [fetchResolved, hasBody], [authCheck1]],
+
+ [BASE_URL + 'Auth&mode=cors&credentials=omit',
+ [fetchResolved, hasBody], [checkJsonpError]],
+ [BASE_URL + 'Auth&mode=cors&credentials=include',
+ [fetchResolved, hasBody], [authCheck1]],
+ [BASE_URL + 'Auth&mode=cors&credentials=same-origin',
+ [fetchResolved, hasBody], [authCheck1]],
+
+ [OTHER_BASE_URL + 'Auth',
+ [fetchResolved, noBody], [checkJsonpError]],
+ [OTHER_BASE_URL + 'Auth&credentials=omit',
+ [fetchResolved, noBody], [checkJsonpError]],
+ [OTHER_BASE_URL + 'Auth&credentials=include',
+ [fetchResolved, noBody], [authCheck2]],
+ [OTHER_BASE_URL + 'Auth&credentials=same-origin',
+ [fetchResolved, noBody], [authCheck2]],
+
+ [OTHER_BASE_URL + 'Auth&mode=no-cors&credentials=omit',
+ [fetchResolved, noBody], [checkJsonpError]],
+ [OTHER_BASE_URL + 'Auth&mode=no-cors&credentials=include',
+ [fetchResolved, noBody], [authCheck2]],
+ [OTHER_BASE_URL + 'Auth&mode=no-cors&credentials=same-origin',
+ [fetchResolved, noBody], [authCheck2]],
+
+ [OTHER_BASE_URL + 'Auth&mode=same-origin&credentials=omit',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=same-origin&credentials=include',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=same-origin&credentials=same-origin',
+ [fetchRejected]],
+
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=omit',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=include',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=same-origin',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=include&ACAOrigin=*',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=include&ACAOrigin=http://127.0.0.1:8000',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=include&ACAOrigin=*&ACACredentials=true',
+ [fetchRejected]],
+ [OTHER_BASE_URL + 'Auth&mode=cors&credentials=include&ACAOrigin=http://127.0.0.1:8000&ACACredentials=true',
+ [fetchResolved, hasBody], [authCheck2]],
+
+ // Redirect
+ // FIXME: Currently we don't support redirect in Fech() API.
+ [REDIRECT_URL + encodeURIComponent(BASE_URL),
+ [fetchRejected]],
+ [REDIRECT_URL + encodeURIComponent(OTHER_BASE_URL),
+ [fetchRejected]]
+];
+
+function login(test, origin, username, password) {
+ return new Promise(function(resolve, reject) {
+ with_iframe(
+ origin +
+ '/serviceworker/resources/fetch-access-control-login.html')
+ .then(test.step_func(function(frame) {
+ var channel = new MessageChannel();
+ channel.port1.onmessage = test.step_func(function() {
+ resolve();
+ });
+ frame.contentWindow.postMessage(
+ {username: username, password: password},
+ [channel.port2], origin);
+ }));
+ });
+}
+
+var test = async_test('Verify access control of fetch() in a Service Worker');
+test.step(function() {
+ var login1 = login(test, 'http://127.0.0.1:8000', 'username1', 'password1');
+ var login2 = login(test, 'http://localhost:8000', 'username2', 'password2');
+ var workerScript = 'resources/fetch-access-control-worker.js';
+ var worker = undefined;
+ var frameWindow = {};
+ var counter = 0;
+ window.addEventListener('message', test.step_func(onMessage), false);
+
+ Promise.all([login1, login2])
+ .then(function() {
+ return service_worker_unregister_and_register(test,
+ workerScript,
+ SCOPE);
+ })
+ .then(function(sw) {
+ worker = sw;
+ var messageChannel = new MessageChannel();
+ messageChannel.port1.onmessage = test.step_func(onWorkerMessage);
+ sw.postMessage(
+ {port: messageChannel.port2}, [messageChannel.port2]);
+ return wait_for_state(test, sw, 'activated');
+ })
+ .then(function() { return with_iframe(SCOPE); })
+ .then(function(frame) {
+ frameWindow = frame.contentWindow;
+ // Start tests.
+ loadNext();
+ })
+ .catch(unreached_rejection(test));
+
+ var readyFromWorkerReceived = undefined;
+ var resultFromWorkerReceived = undefined;
+ var resultFromIframeReceived = undefined;
+
+ function onMessage(e) {
+ // The message is sent from fetch-access-control-iframe.html in report()
+ // which is called by appending <script> element which source code is
+ // generated by fetch-access-control.php.
+ if (TEST_TARGETS[counter][2]) {
+ TEST_TARGETS[counter][2].forEach(function(checkFunc) {
+ checkFunc.call(this,
+ TEST_TARGETS[counter][0],
+ e.data);
+ });
+ }
+ resultFromIframeReceived();
+ }
+
+ function onWorkerMessage(e) {
+ // The message is sent from the ServiceWorker.
+ var message = e.data;
+ if (message.msg === 'READY') {
+ readyFromWorkerReceived();
+ return;
+ }
+ TEST_TARGETS[counter][1].forEach(function(checkFunc) {
+ checkFunc.call(this,
+ TEST_TARGETS[counter][0],
+ message);
+ });
+ resultFromWorkerReceived();
+ }
+
+ function loadNext() {
+ var workerPromise = new Promise(function(resolve, reject) {
+ resultFromWorkerReceived = resolve;
+ });
+ var iframePromise = new Promise(function(resolve, reject) {
+ resultFromIframeReceived = resolve;
+ });
+ Promise.all([workerPromise, iframePromise])
+ .then(test.step_func(function() {
+ ++counter;
+ if (counter === TEST_TARGETS.length) {
+ service_worker_unregister_and_done(test, SCOPE);
+ } else {
+ loadNext();
+ }
+ }));
+ (new Promise(function(resolve, reject) {
+ readyFromWorkerReceived = resolve;
+ worker.postMessage({msg: 'START TEST CASE'});
+ }))
+ .then(test.step_func(function() {
+ frameWindow.postMessage(
+ {url: TEST_TARGETS[counter][0]},
+ IFRAME_ORIGIN);
+ }));
+ }
+});
+</script>
+</body>
« no previous file with comments | « no previous file | LayoutTests/http/tests/serviceworker/resources/fetch-access-control.php » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698