| /** |
| * @fileoverview Test case for mixed-content in web-platform-tests. |
| * @author burnik@google.com (Kristijan Burnik) |
| */ |
| |
| /** |
| * MixedContentTestCase exercises all the tests for checking browser behavior |
| * when resources regarded as mixed-content are requested. A single run covers |
| * only a single scenario. |
| * @param {object} scenario A JSON describing the test arrangement and |
| * expectation(s). Refer to /mixed-content/spec.src.json for details. |
| * @param {string} description The test scenario verbose description. |
| * @param {SanityChecker} sanityChecker Instance of an object used to check the |
| * running scenario. Useful in debug mode. See ./sanity-checker.js. |
| * Run {@code ./tools/generate.py -h} for info on test generating modes. |
| * @return {object} Object wrapping the start method used to run the test. |
| */ |
| function TestCase(scenarios, sanityChecker) { |
| function runTest(scenario) { |
| sanityChecker.checkScenario(scenario, subresourceMap); |
| |
| const urls = getRequestURLs(scenario.subresource, |
| scenario.origin, |
| scenario.redirection); |
| const checkResult = _ => { |
| // Send request to check if the key has been torn down. |
| return xhrRequest(urls.assertUrl) |
| .then(assertResult => { |
| // Now check if the value has been torn down. If it's still there, |
| // we have blocked the request to mixed-content. |
| assert_equals(assertResult.status, scenario.expectation, |
| "The resource request should be '" + scenario.expectation + "'."); |
| }); |
| }; |
| |
| /** @type {Subresource} */ |
| const subresource = { |
| subresourceType: scenario.subresource, |
| url: urls.testUrl, |
| policyDeliveries: scenario.subresource_policy_deliveries, |
| }; |
| |
| promise_test(() => { |
| return xhrRequest(urls.announceUrl) |
| // Send out the real resource request. |
| // This should tear down the key if it's not blocked. |
| .then(_ => invokeRequest(subresource, scenario.source_context_list)) |
| // We check the key state, regardless of whether the main request |
| // succeeded or failed. |
| .then(checkResult, checkResult); |
| }, scenario.test_description); |
| } // runTest |
| |
| function runTests() { |
| for (const scenario of scenarios) { |
| runTest(scenario); |
| } |
| } |
| |
| return {start: runTests}; |
| } |