forked from web-platform-tests/wpt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[shared storage] Allow creating multiple worklets per Window context
Explainer PR: WICG/shared-storage#130 How: - Introduce sharedStorage.createWorklet() method. In this patch, we still restrict the script to same origin. Ultimately, we will support cross-origin script/worklet (for the createWorklet() API). - Also, move the document service Remote to a window supplement class: This is a forward-looking change (e.g. it'll enable constructing the worklet via `new SharedStorageWorklet()` / not needing to exist along with the `sharedStorage` object, although this isn't in the current proposal). Bug: 1218540 Change-Id: I5bf64bdf6648a76875748b194e5dbceeb1400624 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5209102 Reviewed-by: Dominic Farolino <[email protected]> Reviewed-by: Avi Drissman <[email protected]> Commit-Queue: Yao Xiao <[email protected]> Reviewed-by: Cammie Smith Barnes <[email protected]> Cr-Commit-Position: refs/heads/main@{#1257412}
- Loading branch information
1 parent
5362cef
commit a973f27
Showing
2 changed files
with
92 additions
and
0 deletions.
There are no files selected for viewing
46 changes: 46 additions & 0 deletions
46
shared-storage-selecturl-limit/select-url-limit-multiple-worklets.tentative.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<!doctype html> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/common/utils.js"></script> | ||
<script src="/shared-storage-selecturl-limit/resources/utils.js"></script> | ||
<script src="/shared-storage/resources/util.js"></script> | ||
<script src="/fenced-frame/resources/utils.js"></script> | ||
|
||
<body> | ||
<script> | ||
'use strict'; | ||
|
||
promise_test(async () => { | ||
const ancestorKey = token(); | ||
const perOriginBitLimit = 6; | ||
const numUrls = 8; | ||
const urls = generateUrls(numUrls, "/shared-storage/resources/frame", | ||
[ancestorKey]); | ||
const bitsPerCall = Math.log2(numUrls); | ||
|
||
for (let i = 0; i < Math.floor(perOriginBitLimit / bitsPerCall); ++i) { | ||
let worklet = await sharedStorage.createWorklet("/shared-storage/resources/simple-module.js"); | ||
let config = await worklet.selectURL( | ||
"test-url-selection-operation", urls, | ||
{data: {'mockResult': 1}, keepAlive: true, resolveToConfig: true}); | ||
assert_true(config instanceof FencedFrameConfig); | ||
attachFencedFrame(config, 'opaque-ads'); | ||
const result = await nextValueFromServer(ancestorKey); | ||
assert_equals(result, "frame1_loaded", | ||
`for index ${i} when budget should remain;`); | ||
} | ||
|
||
// The per-origin per-pageload bit limit for `selectURL()` has been | ||
// reached. The next call should return the default URL. | ||
let worklet = await sharedStorage.createWorklet("/shared-storage/resources/simple-module.js"); | ||
let config = await worklet.selectURL( | ||
"test-url-selection-operation", urls, | ||
{data: {'mockResult': 1}, resolveToConfig: true}); | ||
assert_true(config instanceof FencedFrameConfig); | ||
attachFencedFrame(config, 'opaque-ads'); | ||
const result = await nextValueFromServer(ancestorKey); | ||
assert_equals(result, "frame0_loaded", 'when budget should be exhausted;'); | ||
|
||
}, 'selectURL() called on multiple worklets, with per-origin per-pageload limit'); | ||
</script> | ||
</body> |
46 changes: 46 additions & 0 deletions
46
shared-storage/select-url-on-two-worklets.tentative.https.sub.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<!doctype html> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/common/utils.js"></script> | ||
<script src="/shared-storage/resources/util.js"></script> | ||
<script src="/fenced-frame/resources/utils.js"></script> | ||
|
||
<body> | ||
<script> | ||
'use strict'; | ||
|
||
promise_test(async () => { | ||
const ancestor_key = token(); | ||
let url0 = generateURL("/shared-storage/resources/frame0.html", | ||
[ancestor_key]); | ||
let url1 = generateURL("/shared-storage/resources/frame1.html", | ||
[ancestor_key]); | ||
|
||
let worklet0 = await sharedStorage.createWorklet("/shared-storage/resources/simple-module.js"); | ||
let worklet1 = await sharedStorage.createWorklet("/shared-storage/resources/simple-module.js"); | ||
|
||
let select_url_result0 = await worklet0.selectURL( | ||
"increment-global-variable-and-return-original-value-operation", | ||
[{url: url0}, {url: url1}], {resolveToConfig: true, keepAlive: true}); | ||
assert_true(validateSelectURLResult(select_url_result0, true)); | ||
attachFencedFrame(select_url_result0, 'opaque-ads'); | ||
const result0 = await nextValueFromServer(ancestor_key); | ||
assert_equals(result0, "frame0_loaded"); | ||
|
||
let select_url_result1 = await worklet1.selectURL( | ||
"increment-global-variable-and-return-original-value-operation", | ||
[{url: url0}, {url: url1}], {resolveToConfig: true, keepAlive: true}); | ||
assert_true(validateSelectURLResult(select_url_result1, true)); | ||
attachFencedFrame(select_url_result1, 'opaque-ads'); | ||
const result1 = await nextValueFromServer(ancestor_key); | ||
|
||
// This indicates that the prior worklet0.selectURL and worklet1.selectURL ran | ||
// in two different worklet environments, as they did not share the global | ||
// variable. | ||
assert_equals(result1, "frame0_loaded"); | ||
|
||
}, 'selectURL() on two explicitly created SharedStorageWorklet. The two ' + | ||
'calls should run in two different worklet environments.'); | ||
|
||
</script> | ||
</body> |