| Index: LayoutTests/http/tests/serviceworker/resources/fetch-cors-xhr-iframe.html
|
| diff --git a/LayoutTests/http/tests/serviceworker/resources/fetch-cors-xhr-iframe.html b/LayoutTests/http/tests/serviceworker/resources/fetch-cors-xhr-iframe.html
|
| index f9c2e184f4d8146cd65c4861504b9e92706857a9..37c0c621cccf92a5397ab37964406e2fe0322729 100644
|
| --- a/LayoutTests/http/tests/serviceworker/resources/fetch-cors-xhr-iframe.html
|
| +++ b/LayoutTests/http/tests/serviceworker/resources/fetch-cors-xhr-iframe.html
|
| @@ -2,13 +2,21 @@
|
| <script>
|
| var path = base_path() + 'fetch-access-control.php';
|
| var host_info = get_host_info();
|
| +var SUCCESS = 'SUCCESS';
|
| +var FAIL = 'FAIL';
|
|
|
| -function create_success_test_promise(url, with_credentials) {
|
| - return new Promise(function(resolve, reject) {
|
| +function create_test_case_promise(url, with_credentials) {
|
| + return new Promise(function(resolve) {
|
| var xhr = new XMLHttpRequest();
|
| - xhr.onload = resolve;
|
| + xhr.onload = function() {
|
| + if (xhr.status == 200) {
|
| + resolve(SUCCESS);
|
| + } else {
|
| + resolve("STATUS" + xhr.status);
|
| + }
|
| + }
|
| xhr.onerror = function() {
|
| - reject('XHR to ' + url + ' should succeed.');
|
| + resolve(FAIL);
|
| }
|
| xhr.responseType = 'text';
|
| xhr.withCredentials = with_credentials;
|
| @@ -17,70 +25,160 @@ function create_success_test_promise(url, with_credentials) {
|
| });
|
| }
|
|
|
| -function create_failure_test_promise(url, with_credentials) {
|
| +
|
| +function create_test_promise(url, with_credentials, expected_result) {
|
| return new Promise(function(resolve, reject) {
|
| - var xhr = new XMLHttpRequest();
|
| - xhr.onload = function() {
|
| - reject('XHR to ' + url + ' should fail.');
|
| - }
|
| - xhr.onerror = function() {
|
| - resolve();
|
| - }
|
| - xhr.responseType = 'text';
|
| - xhr.withCredentials = with_credentials;
|
| - xhr.open('GET', url, true);
|
| - xhr.send();
|
| + create_test_case_promise(url, with_credentials)
|
| + .then(function(result) {
|
| + if (result == expected_result) {
|
| + resolve();
|
| + } else {
|
| + reject('Result of url:' + url + ' ' +
|
| + ' with_credentials: ' + with_credentials + ' must be ' +
|
| + expected_result + ' but ' + result);
|
| + }
|
| + })
|
| + });
|
| +}
|
| +
|
| +function create_serial_promise(test_cases) {
|
| + var promise = Promise.resolve();
|
| + test_cases.forEach(function(test_case) {
|
| + promise = promise.then(function() {
|
| + return create_test_promise(test_case[0], test_case[1], test_case[2]);
|
| + });
|
| });
|
| + return promise;
|
| }
|
|
|
| window.addEventListener('message', function(evt) {
|
| var port = evt.ports[0];
|
| - create_success_test_promise(host_info['HTTP_ORIGIN'] + path, false)
|
| - .then(function() {
|
| - return create_failure_test_promise(
|
| - host_info['HTTP_REMOTE_ORIGIN'] + path,
|
| - false);
|
| - })
|
| - .then(function() {
|
| - return create_failure_test_promise('./dummy?reject', false);
|
| - })
|
| - .then(function() {
|
| - return create_failure_test_promise('./dummy?resolve-null', false);
|
| - })
|
| - .then(function() {
|
| - return create_success_test_promise(
|
| - './dummy?url=' +
|
| - encodeURIComponent(host_info['HTTP_ORIGIN'] + path),
|
| - false);
|
| - })
|
| - .then(function() {
|
| - return create_failure_test_promise(
|
| - './dummy?mode=no-cors&url=' +
|
| - encodeURIComponent(host_info['HTTP_REMOTE_ORIGIN'] + path),
|
| - false);
|
| - })
|
| - .then(function() {
|
| - return create_success_test_promise(
|
| - './dummy?url=' +
|
| - encodeURIComponent(host_info['HTTP_REMOTE_ORIGIN'] + path +
|
| - '?ACAOrigin=' + host_info['HTTP_ORIGIN']),
|
| - false);
|
| - })
|
| - .then(function() {
|
| - return create_failure_test_promise(
|
| - './dummy?url=' +
|
| - encodeURIComponent(host_info['HTTP_REMOTE_ORIGIN'] + path +
|
| - '?ACAOrigin=' + host_info['HTTP_ORIGIN']),
|
| - true);
|
| - })
|
| - .then(function() {
|
| - return create_success_test_promise(
|
| - './dummy?url=' +
|
| - encodeURIComponent(
|
| - host_info['HTTP_REMOTE_ORIGIN'] + path +
|
| - '?ACACredentials=true&ACAOrigin=' + host_info['HTTP_ORIGIN']),
|
| - true);
|
| - })
|
| + var url = host_info['HTTP_ORIGIN'] + path;
|
| + var remote_url = host_info['HTTP_REMOTE_ORIGIN'] + path;
|
| + // If the 4th value of the item of TEST_CASES is true, the test case outputs
|
| + // warning messages. So such tests must be executed in serial to match the
|
| + // expected output text.
|
| + var TEST_CASES = [
|
| + // Reject tests
|
| + [url + '?reject', false, FAIL],
|
| + [url + '?reject', true, FAIL],
|
| + [remote_url + '?reject', false, FAIL],
|
| + [remote_url + '?reject', true, FAIL],
|
| + // Reject(resolve-null) tests
|
| + [url + '?resolve-null', false, FAIL],
|
| + [url + '?resolve-null', true, FAIL],
|
| + [remote_url + '?resolve-null', false, FAIL],
|
| + [remote_url + '?resolve-null', true, FAIL],
|
| + // Fallback tests
|
| + [url + '?ignore', false, SUCCESS],
|
| + [url + '?ignore', true, SUCCESS],
|
| + [remote_url + '?ignore', false, FAIL, true], // Executed in serial.
|
| + [remote_url + '?ignore', true, FAIL, true], // Executed in serial.
|
| + [
|
| + remote_url + '?ACAOrigin=' + host_info['HTTP_ORIGIN'] + '&ignore',
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + remote_url + '?ACAOrigin=' + host_info['HTTP_ORIGIN'] + '&ignore',
|
| + true, FAIL, true // Executed in serial.
|
| + ],
|
| + [
|
| + remote_url + '?ACAOrigin=' + host_info['HTTP_ORIGIN'] +
|
| + '&ACACredentials=true&ignore',
|
| + true, SUCCESS
|
| + ],
|
| + // Credential test (fallback)
|
| + [url + '?Auth&ignore', false, SUCCESS],
|
| + [url + '?Auth&ignore', true, SUCCESS],
|
| + [remote_url + '?Auth&ignore', false, FAIL, true], // Executed in serial.
|
| + [remote_url + '?Auth&ignore', true, FAIL, true], // Executed in serial.
|
| + [
|
| + remote_url + '?Auth&ACAOrigin=' + host_info['HTTP_ORIGIN'] + '&ignore',
|
| + false, 'STATUS401'
|
| + ],
|
| + [
|
| + remote_url + '?Auth&ACAOrigin=' + host_info['HTTP_ORIGIN'] + '&ignore',
|
| + true, FAIL, true // Executed in serial.
|
| + ],
|
| + [
|
| + remote_url + '?Auth&ACAOrigin=' + host_info['HTTP_ORIGIN'] +
|
| + '&ACACredentials=true&ignore',
|
| + true, SUCCESS
|
| + ],
|
| + // Basic response
|
| + [
|
| + url + '?mode=same-origin&url=' + encodeURIComponent(url),
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + url + '?mode=same-origin&url=' + encodeURIComponent(url),
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + remote_url + '?mode=same-origin&url=' + encodeURIComponent(url),
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + remote_url + '?mode=same-origin&url=' + encodeURIComponent(url),
|
| + false, SUCCESS
|
| + ],
|
| + // Opaque response
|
| + [
|
| + url + '?mode=no-cors&url=' + encodeURIComponent(remote_url),
|
| + false, FAIL
|
| + ],
|
| + [
|
| + url + '?mode=no-cors&url=' + encodeURIComponent(remote_url),
|
| + false, FAIL
|
| + ],
|
| + [
|
| + remote_url + '?mode=no-cors&url=' + encodeURIComponent(remote_url),
|
| + false, FAIL
|
| + ],
|
| + [
|
| + remote_url + '?mode=no-cors&url=' + encodeURIComponent(remote_url),
|
| + false, FAIL
|
| + ],
|
| + // CORS response
|
| + [
|
| + url + '?mode=cors&url=' +
|
| + encodeURIComponent(remote_url + '?ACAOrigin=' +
|
| + host_info['HTTP_ORIGIN']),
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + url + '?mode=cors&url=' +
|
| + encodeURIComponent(remote_url + '?ACAOrigin=' +
|
| + host_info['HTTP_ORIGIN']),
|
| + true, SUCCESS
|
| + ],
|
| + [
|
| + remote_url + '?mode=cors&url=' +
|
| + encodeURIComponent(remote_url + '?ACAOrigin=' +
|
| + host_info['HTTP_ORIGIN']),
|
| + false, SUCCESS
|
| + ],
|
| + [
|
| + remote_url +
|
| + '?mode=cors&url=' +
|
| + encodeURIComponent(remote_url + '?ACAOrigin=' +
|
| + host_info['HTTP_ORIGIN']),
|
| + true, SUCCESS
|
| + ]
|
| + ];
|
| + var promises = [];
|
| + var serial_tests = [];
|
| + for (var i = 0; i < TEST_CASES.length ; ++i) {
|
| + if (!TEST_CASES[i][3]) {
|
| + promises.push(create_test_promise(TEST_CASES[i][0],
|
| + TEST_CASES[i][1],
|
| + TEST_CASES[i][2]));
|
| + } else {
|
| + serial_tests.push(TEST_CASES[i]);
|
| + }
|
| + }
|
| + promises.push(create_serial_promise(serial_tests));
|
| + Promise.all(promises)
|
| .then(function() {
|
| port.postMessage({results: 'finish'});
|
| })
|
|
|