Commit 219bce7d authored by Hiroki Nakagawa's avatar Hiroki Nakagawa Committed by Commit Bot

Worker: Add upgrade-insecure-requests tests for top-level classic shared worker script loading

This CL changes the code generator of upgrade-insecure-requests tests to add
tests for top-level classic shared worker script loading.

The test files (shared-worker-(redirect-)upgrade.https.html) are generated by
external/wpt/upgrade-insecure-requests/support/generate.py.

Bug: 917532, 989399
Change-Id: If4a3f27c6c8fe08e55dc8d86a8cbf925596490fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1728570
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: default avatarHiroshige Hayashizaki <hiroshige@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683445}
parent 24c35819
This is a testharness.js-based test.
PASS secure/same-origin => secure/same-origin shared-worker
FAIL insecure/same-origin => secure/same-origin shared-worker promise_test: Unhandled rejection with value: object "SecurityError: Failed to construct 'SharedWorker': Script at 'http://web-platform.test:8444/upgrade-insecure-requests/support/redirect-cors.py?location=https%3A%2F%2Fweb-platform.test%3A8444%2Fcommon%2Fsecurity-features%2Fsubresource%2Fshared-worker.py' cannot be accessed from origin 'https://web-platform.test:8444'."
PASS secure/same-origin => insecure/same-origin shared-worker
FAIL insecure/same-origin => insecure/same-origin shared-worker promise_test: Unhandled rejection with value: object "SecurityError: Failed to construct 'SharedWorker': Script at 'http://web-platform.test:8444/upgrade-insecure-requests/support/redirect-cors.py?location=http%3A%2F%2Fweb-platform.test%3A8444%2Fcommon%2Fsecurity-features%2Fsubresource%2Fshared-worker.py' cannot be accessed from origin 'https://web-platform.test:8444'."
Harness: the test ran to completion.
<!DOCTYPE html>
<html>
<head>
<!-- Generated by wpt/upgrade-insecure-requests/support/generate.py -->
<title>Upgrade Insecure Requests: shared-worker.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./support/testharness-helper.sub.js"></script>
<script src="/common/security-features/resources/common.js"></script>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</head>
<body>
<script>
const tests = generateRedirectTests(ResourceType.SHARED_WORKER, true);
tests.forEach(test => testMap['shared-worker'](test));
</script>
</body>
</html>
This is a testharness.js-based test.
PASS secure/same-origin shared-worker
FAIL insecure/same-origin shared-worker promise_test: Unhandled rejection with value: object "SecurityError: Failed to construct 'SharedWorker': Script at 'http://web-platform.test:8444/common/security-features/subresource/shared-worker.py' cannot be accessed from origin 'https://web-platform.test:8444'."
Harness: the test ran to completion.
<!DOCTYPE html>
<html>
<head>
<!-- Generated by wpt/upgrade-insecure-requests/support/generate.py -->
<title>Upgrade Insecure Requests: shared-worker.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./support/testharness-helper.sub.js"></script>
<script src="/common/security-features/resources/common.js"></script>
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</head>
<body>
<script>
const tests = generateTests(ResourceType.SHARED_WORKER, true);
tests.forEach(test => testMap['shared-worker'](test));
</script>
</body>
</html>
...@@ -40,11 +40,19 @@ for name, resourceType in [ ...@@ -40,11 +40,19 @@ for name, resourceType in [
('worker', 'WORKER'), ('worker', 'WORKER'),
('module-worker', 'WORKER'), ('module-worker', 'WORKER'),
('worker-subresource-xhr', 'FETCH'), ('worker-subresource-xhr', 'FETCH'),
('worker-subresource-fetch', 'FETCH')]: ('worker-subresource-fetch', 'FETCH'),
sameOriginOnly = 'true' if resourceType == 'WORKER' else 'false' ('shared-worker', 'SHARED_WORKER')]:
# TODO(https://crbug.com/989399): Add tests for subresource requests on shared
# workers, and main/subresource requests on service workers.
sameOriginOnly = 'false'
if resourceType == 'WORKER' or resourceType == 'SHARED_WORKER':
sameOriginOnly = 'true'
types = [('', 'generateTests'), ('-redirect', 'generateRedirectTests')] types = [('', 'generateTests'), ('-redirect', 'generateRedirectTests')]
if name == 'module-worker' or resourceType == 'WORKLET': if name == 'module-worker' or resourceType == 'WORKLET':
types.append(('-import', 'generateModuleImportTests')) types.append(('-import', 'generateModuleImportTests'))
for typeName, generatorName in types: for typeName, generatorName in types:
filename = '%s%s-upgrade.https.html' % (name, typeName) filename = '%s%s-upgrade.https.html' % (name, typeName)
with open(filename, 'w') as html_file: with open(filename, 'w') as html_file:
......
...@@ -12,6 +12,7 @@ const ResourceType = { ...@@ -12,6 +12,7 @@ const ResourceType = {
IMAGE: "image", IMAGE: "image",
FRAME: "frame", FRAME: "frame",
WORKER: "worker", WORKER: "worker",
SHARED_WORKER: "shared-worker",
WORKLET: "worklet", WORKLET: "worklet",
WEBSOCKET: "websocket", WEBSOCKET: "websocket",
FETCH: "fetch", FETCH: "fetch",
...@@ -36,6 +37,8 @@ function generateURL(host, protocol, resourceType) { ...@@ -36,6 +37,8 @@ function generateURL(host, protocol, resourceType) {
url.pathname = "echo"; url.pathname = "echo";
} else if (resourceType == ResourceType.WORKER) { } else if (resourceType == ResourceType.WORKER) {
url.pathname += "worker.py"; url.pathname += "worker.py";
} else if (resourceType == ResourceType.SHARED_WORKER) {
url.pathname += "shared-worker.py";
} else if (resourceType == ResourceType.WORKLET) { } else if (resourceType == ResourceType.WORKLET) {
url.pathname += "worker.py"; url.pathname += "worker.py";
} else if (resourceType == ResourceType.FETCH) { } else if (resourceType == ResourceType.FETCH) {
...@@ -184,6 +187,10 @@ const testMap = { ...@@ -184,6 +187,10 @@ const testMap = {
{}), {}),
test.name), test.name),
"shared-worker":
test => promise_test(
() => requestViaSharedWorker(test.url), test.name),
"audio-worklet": "audio-worklet":
test => promise_test( test => promise_test(
() => requestViaWorklet('audio', test.url), test.name), () => requestViaWorklet('audio', test.url), test.name),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment