| <script src="/common/get-host-info.sub.js"></script> |
| <script src="test-helpers.sub.js?pipe=sub"></script> |
| <script> |
| var path = base_path() + 'fetch-access-control.py'; |
| var host_info = get_host_info(); |
| var SUCCESS = 'SUCCESS'; |
| var FAIL = 'FAIL'; |
| |
| function create_test_case_promise(url, with_credentials) { |
| return new Promise(function(resolve) { |
| var xhr = new XMLHttpRequest(); |
| xhr.onload = function() { |
| if (xhr.status == 200) { |
| resolve(SUCCESS); |
| } else { |
| resolve("STATUS" + xhr.status); |
| } |
| } |
| xhr.onerror = function() { |
| resolve(FAIL); |
| } |
| xhr.responseType = 'text'; |
| xhr.withCredentials = with_credentials; |
| xhr.open('GET', url, true); |
| xhr.send(); |
| }); |
| } |
| |
| window.addEventListener('message', async (evt) => { |
| var port = evt.ports[0]; |
| var url = host_info['HTTPS_ORIGIN'] + path; |
| var remote_url = host_info['HTTPS_REMOTE_ORIGIN'] + path; |
| var TEST_CASES = [ |
| // Reject tests |
| [url + '?reject', false, FAIL], |
| [url + '?reject', true, FAIL], |
| [remote_url + '?reject', false, FAIL], |
| [remote_url + '?reject', true, FAIL], |
| // Event handler exception tests |
| [url + '?throw', false, SUCCESS], |
| [url + '?throw', true, SUCCESS], |
| [remote_url + '?throw', false, FAIL], |
| [remote_url + '?throw', 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['HTTPS_ORIGIN'] + '&ignore', |
| false, SUCCESS |
| ], |
| [ |
| remote_url + '?ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore', |
| true, FAIL, true // Executed in serial. |
| ], |
| [ |
| remote_url + '?ACAOrigin=' + host_info['HTTPS_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], |
| [remote_url + '?Auth&ignore', true, FAIL], |
| [ |
| remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore', |
| false, 'STATUS401' |
| ], |
| [ |
| remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore', |
| true, FAIL, true // Executed in serial. |
| ], |
| [ |
| remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_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['HTTPS_ORIGIN']), |
| false, SUCCESS |
| ], |
| [ |
| url + '?mode=cors&url=' + |
| encodeURIComponent(remote_url + '?ACAOrigin=' + |
| host_info['HTTPS_ORIGIN']), |
| true, FAIL |
| ], |
| [ |
| url + '?mode=cors&url=' + |
| encodeURIComponent(remote_url + '?ACAOrigin=' + |
| host_info['HTTPS_ORIGIN'] + |
| '&ACACredentials=true'), |
| true, SUCCESS |
| ], |
| [ |
| remote_url + '?mode=cors&url=' + |
| encodeURIComponent(remote_url + '?ACAOrigin=' + |
| host_info['HTTPS_ORIGIN']), |
| false, SUCCESS |
| ], |
| [ |
| remote_url + |
| '?mode=cors&url=' + |
| encodeURIComponent(remote_url + '?ACAOrigin=' + |
| host_info['HTTPS_ORIGIN']), |
| true, FAIL |
| ], |
| [ |
| remote_url + |
| '?mode=cors&url=' + |
| encodeURIComponent(remote_url + '?ACAOrigin=' + |
| host_info['HTTPS_ORIGIN'] + |
| '&ACACredentials=true'), |
| true, SUCCESS |
| ] |
| ]; |
| |
| let counter = 0; |
| for (let test of TEST_CASES) { |
| let result = await create_test_case_promise(test[0], test[1]); |
| let testName = 'test ' + (++counter) + ': ' + test[0] + ' with credentials ' + test[1] + ' must be ' + test[2]; |
| port.postMessage({testName: testName, result: result === test[2]}); |
| } |
| port.postMessage('done'); |
| }, false); |
| </script> |