| Index: LayoutTests/http/tests/fetch/resources/fetch-access-control-util.js
|
| diff --git a/LayoutTests/http/tests/fetch/resources/fetch-access-control-util.js b/LayoutTests/http/tests/fetch/resources/fetch-access-control-util.js
|
| deleted file mode 100644
|
| index b37537f2c3588a821c6cb71f20b04839ce0497df..0000000000000000000000000000000000000000
|
| --- a/LayoutTests/http/tests/fetch/resources/fetch-access-control-util.js
|
| +++ /dev/null
|
| @@ -1,406 +0,0 @@
|
| -var SCOPE = BASE_ORIGIN +
|
| - '/fetch/resources/fetch-access-control-iframe.html?' + TEST_OPTIONS;
|
| -var IFRAME_ORIGIN = BASE_ORIGIN;
|
| -var BASE_URL = BASE_ORIGIN +
|
| - '/serviceworker/resources/fetch-access-control.php?';
|
| -var OTHER_BASE_URL = OTHER_ORIGIN +
|
| - '/serviceworker/resources/fetch-access-control.php?';
|
| -var REDIRECT_URL = BASE_ORIGIN +
|
| - '/serviceworker/resources/redirect.php?Redirect=';
|
| -var OTHER_REDIRECT_URL = OTHER_ORIGIN +
|
| - '/serviceworker/resources/redirect.php?Redirect=';
|
| -var REDIRECT_LOOP_URL = BASE_ORIGIN +
|
| - '/fetch/resources/redirect-loop.php?Redirect=';
|
| -var OTHER_REDIRECT_LOOP_URL = OTHER_ORIGIN +
|
| - '/fetch/resources/redirect-loop.php?Redirect=';
|
| -var IFRAME_URL = SCOPE;
|
| -var WORKER_URL = BASE_ORIGIN +
|
| - '/fetch/resources/fetch-access-control-worker.js?' +
|
| - TEST_OPTIONS;
|
| -
|
| -function onlyOnServiceWorkerProxiedTest(checkFuncs) {
|
| - return [];
|
| -}
|
| -
|
| -// 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);
|
| - if (hasBody) {
|
| - assert_not_equals(data.body, '',
|
| - 'response must have body. url: ' + url);
|
| - } else {
|
| - assert_equals(data.body, '',
|
| - 'response must not have body. 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 showComment = function(url, data) {
|
| - assert_true(!data.comment, 'Show comment: ' + data.comment + ' 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, cookie, 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);
|
| - assert_equals(data.cookie,
|
| - cookie,
|
| - 'Cookie must match. url: ' + url);
|
| -};
|
| -var checkJsonpCookie = function(cookie, url, data) {
|
| - assert_equals(data.jsonpResult,
|
| - 'success',
|
| - url + ' jsonpResult must be success');
|
| - assert_equals(data.cookie,
|
| - cookie,
|
| - 'Cookie must match. url: ' + url);
|
| -};
|
| -var checkJsonpError = checkJsonpResult.bind(this, 'error');
|
| -var checkJsonpSuccess = checkJsonpResult.bind(this, 'success');
|
| -var checkJsonpNoRedirect = checkJsonpResult.bind(this, 'noredirect');
|
| -var hasCustomHeader =
|
| - checkJsonpHeader.bind(this, 'x-serviceworker-test', 'test');
|
| -var hasCustomHeader2 = function(url, data) {
|
| - checkJsonpHeader('x-serviceworker-s', 'test1', url, data);
|
| - checkJsonpHeader('x-serviceworker-test', 'test2,test3', url, data);
|
| - checkJsonpHeader('x-serviceworker-ua', 'test4', url, data);
|
| - checkJsonpHeader('x-serviceworker-u', 'test5', url, data);
|
| - checkJsonpHeader('x-serviceworker-v', 'test6', url, data);
|
| -};
|
| -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 authCheckNone =
|
| - checkJsonpAuth.bind(this, 'undefined', 'undefined', 'undefined');
|
| -var authCheck1 = checkJsonpAuth.bind(this, 'username1', 'password1', 'cookie1');
|
| -var authCheck2 = checkJsonpAuth.bind(this, 'username2', 'password2', 'cookie2');
|
| -
|
| -var cookieCheck1 = checkJsonpCookie.bind(this, 'cookie1');
|
| -var cookieCheck2 = checkJsonpCookie.bind(this, 'cookie2');
|
| -var cookieCheckA = checkJsonpCookie.bind(this, 'cookieA');
|
| -var cookieCheckB = checkJsonpCookie.bind(this, 'cookieB');
|
| -var cookieCheckC = checkJsonpCookie.bind(this, 'cookieC');
|
| -var cookieCheckNone = checkJsonpCookie.bind(this, 'undefined');
|
| -
|
| -if (location.href.indexOf('base-https') >= 0)
|
| - authCheck1 = checkJsonpAuth.bind(this, 'username1s', 'password1s', 'cookie1');
|
| -
|
| -if (location.href.indexOf('other-https') >= 0)
|
| - authCheck2 = checkJsonpAuth.bind(this, 'username2s', 'password2s', 'cookie2');
|
| -
|
| -function executeServiceWorkerProxiedTests(test_targets) {
|
| - var test = async_test('Verify access control of fetch() in a Service Worker');
|
| - test.step(function() {
|
| - var worker = undefined;
|
| - var frameWindow = {};
|
| - var counter = 0;
|
| - window.addEventListener('message', test.step_func(onMessage), false);
|
| -
|
| - Promise.resolve()
|
| - .then(function() {
|
| - return service_worker_unregister_and_register(test,
|
| - WORKER_URL,
|
| - SCOPE);
|
| - })
|
| - .then(function(registration) {
|
| - worker = registration.installing;
|
| - var messageChannel = new MessageChannel();
|
| - messageChannel.port1.onmessage = test.step_func(onWorkerMessage);
|
| - worker.postMessage(
|
| - {port: messageChannel.port2}, [messageChannel.port2]);
|
| - return wait_for_state(test, worker, '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;
|
| - }
|
| - var checks = test_targets[counter][1].concat(showComment);
|
| - checks.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);
|
| - }));
|
| - }
|
| - });
|
| -}
|
| -
|
| -function getQueryParams(url) {
|
| - var search = (new URL(url)).search;
|
| - if (!search) {
|
| - return {};
|
| - }
|
| - var ret = {};
|
| - var params = search.substring(1).split('&');
|
| - params.forEach(function(param) {
|
| - var element = param.split('=');
|
| - ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
|
| - });
|
| - return ret;
|
| -}
|
| -
|
| -function getRequestInit(params) {
|
| - var init = {};
|
| - if (params['method']) {
|
| - init['method'] = params['method'];
|
| - }
|
| - if (params['mode']) {
|
| - init['mode'] = params['mode'];
|
| - }
|
| - if (params['credentials']) {
|
| - init['credentials'] = params['credentials'];
|
| - }
|
| - if (params['headers'] === 'CUSTOM') {
|
| - init['headers'] = {'X-ServiceWorker-Test': 'test'};
|
| - } else if (params['headers'] === 'CUSTOM2') {
|
| - init['headers'] = [['X-ServiceWorker-Test', 'test2'],
|
| - ['X-ServiceWorker-ua', 'test4'],
|
| - ['X-ServiceWorker-V', 'test6'],
|
| - ['X-ServiceWorker-s', 'test1'],
|
| - ['X-ServiceWorker-Test', 'test3'],
|
| - ['X-ServiceWorker-U', 'test5']];
|
| - } else if (params['headers'] === '{}') {
|
| - init['headers'] = {};
|
| - }
|
| - return init;
|
| -}
|
| -
|
| -function headersToArray(headers) {
|
| - var ret = [];
|
| -
|
| - // Workaround for Firefox. iterable is not implemented yet.
|
| - // This is used only by checkFetchResponseHeader, and
|
| - // checkFetchResponseHeader is used only for the header names listed below.
|
| - // FIXME: Replace it with the original code below when Firefox supports
|
| - // iterable.
|
| - ['content-length', 'x-serviceworker-serverheader'].forEach(function(name) {
|
| - for (var value of headers.getAll(name))
|
| - ret.push([name, value]);
|
| - });
|
| -
|
| - // Original code:
|
| - // for (var header of headers) {
|
| - // ret.push(header);
|
| - // }
|
| -
|
| - return ret;
|
| -}
|
| -
|
| -function doFetch(request) {
|
| - var originalURL = request.url;
|
| - var params = getQueryParams(originalURL);
|
| - var init = getRequestInit(params);
|
| - var url = params['url'];
|
| - try {
|
| - if (url) {
|
| - request = new Request(url, init);
|
| - } else {
|
| - request = new Request(request, init);
|
| - }
|
| - var response;
|
| - return fetch(request)
|
| - .then(function(res) {
|
| - response = res;
|
| - return res.clone().text()
|
| - .then(function(body) {
|
| - return Promise.resolve({
|
| - // Setting a comment will fail the test and show the
|
| - // comment in the result. Use this for debugging
|
| - // tests.
|
| - comment: undefined,
|
| -
|
| - fetchResult: 'resolved',
|
| - body: body,
|
| - status: response.status,
|
| - headers: headersToArray(response.headers),
|
| - type: response.type,
|
| - response: response,
|
| - originalURL: originalURL
|
| - });
|
| - })
|
| - .catch(function(e) {
|
| - return Promise.resolve({fetchResult: 'error'});
|
| - });
|
| - })
|
| - .catch(function(e) {
|
| - return Promise.resolve({fetchResult: 'rejected'});
|
| - });
|
| - } catch (e) {
|
| - return Promise.resolve({fetchResult: 'error'});
|
| - }
|
| -}
|
| -
|
| -var report_data = {};
|
| -function report(data) {
|
| - report_data = data;
|
| -}
|
| -
|
| -function executeTest(test_target) {
|
| - if (test_target.length == 0) {
|
| - return Promise.resolve();
|
| - }
|
| - return doFetch(new Request(test_target[0],
|
| - {credentials: 'same-origin', mode: 'no-cors'}))
|
| - .then(function(message) {
|
| - var checks = test_target[1].concat(showComment);
|
| - checks.forEach(function(checkFunc) {
|
| - checkFunc.call(this, test_target[0], message);
|
| - });
|
| -
|
| - if (test_target[2]) {
|
| - report_data = {};
|
| - if (message.fetchResult !== 'resolved' ||
|
| - message.body === '' ||
|
| - 400 <= message.status) {
|
| - report({jsonpResult:'error'});
|
| - } else {
|
| - eval(message.body);
|
| - }
|
| - assert_not_equals(report_data, {}, 'data should be set');
|
| -
|
| - test_target[2].forEach(function(checkFunc) {
|
| - checkFunc.call(this, test_target[0], report_data);
|
| - });
|
| - }
|
| - });
|
| -}
|
| -
|
| -function executeTests(test_targets) {
|
| - for (var i = 0; i < test_targets.length; ++i) {
|
| - sequential_promise_test(
|
| - function(counter, t) {
|
| - return executeTest(test_targets[counter]);
|
| - }.bind(this, i),
|
| - "executeTest-" + i);
|
| - }
|
| -}
|
|
|