summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/mixed-content/generic/test-case.sub.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/mixed-content/generic/test-case.sub.js')
-rw-r--r--testing/web-platform/tests/mixed-content/generic/test-case.sub.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/mixed-content/generic/test-case.sub.js b/testing/web-platform/tests/mixed-content/generic/test-case.sub.js
new file mode 100644
index 0000000000..bfb02a0e61
--- /dev/null
+++ b/testing/web-platform/tests/mixed-content/generic/test-case.sub.js
@@ -0,0 +1,61 @@
+/**
+ * @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};
+}