Files
firefox/testing/web-platform/tests/shared-storage/setters.tentative.https.sub.html
Yao Xiao e6e739d570 Bug 1957443 [wpt PR 51720] - [shared storage] Validate that batchUpdate() cannot contain inner method locks, a=testonly
Automatic update from web-platform-tests
[shared storage] Validate that batchUpdate() cannot contain inner method locks

As part of the transactional batchUpdate() proposal (spec PR:[1]),
inner method locks are no longer permitted. This CL implements
validation in both the caller code and mojom traits.

Note that while unrecognized IDL dictionary fields are generally
allowed, strict validation is enforced for this deprecated
'withLock' field to prevent potential misuse.

[1] https://github.com/WICG/shared-storage/pull/231

Bug: 404568020
Change-Id: I9dbc395445342a34a68f12b31fdc285a7576787f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6393777
Reviewed-by: Maks Orlovich <[email protected]>
Commit-Queue: Yao Xiao <[email protected]>
Reviewed-by: Cammie Smith Barnes <[email protected]>
Reviewed-by: Dominic Farolino <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1440291}

--

wpt-commits: 86858ee83ee8acec885b42923b656a61fde7f257
wpt-pr: 51720
2025-04-03 09:43:28 +00:00

126 lines
3.2 KiB
HTML

<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
'use strict';
promise_test(async t => {
return promise_rejects_js(t, TypeError, sharedStorage.set());
}, 'sharedStorage.set with 0 argument');
promise_test(async t => {
return promise_rejects_js(t, TypeError, sharedStorage.set("a"));
}, 'sharedStorage.set with 1 argument');
promise_test(() => {
return sharedStorage.set("a", "b");
}, 'sharedStorage.set with 2 arguments');
promise_test(() => {
return sharedStorage.set("a", "b", {ignoreIfPresent: true});
}, 'sharedStorage.set with options');
promise_test(async t => {
return promise_rejects_js(t, TypeError, sharedStorage.set("a", "b", "c"));
}, 'sharedStorage.set with invalid options');
promise_test(async t => {
try {
await sharedStorage.set('', 'b');
} catch (e) {
assert_equals(e.name, 'DataError');
return;
}
assert_unreached("did not reject");
}, 'sharedStorage.set with empty key');
promise_test(() => {
return sharedStorage.append("a", "b");
}, 'sharedStorage.append');
promise_test(() => {
return sharedStorage.clear();
}, 'sharedStorage.clear');
promise_test(() => {
return sharedStorage.delete("a");
}, 'sharedStorage.delete');
test(() => {
try {
let a = new SharedStorageSetMethod('a');
} catch (e) {
assert_equals(e.name, 'TypeError');
return;
}
assert_unreached("did not throw");
}, 'new SharedStorageSetMethod with 1 argument');
test(() => {
let a = new SharedStorageSetMethod('a', 'b');
}, 'new SharedStorageSetMethod with 2 arguments');
test(() => {
try {
let a = new SharedStorageAppendMethod('a');
} catch (e) {
assert_equals(e.name, 'TypeError');
return;
}
assert_unreached("did not throw");
}, 'new SharedStorageAppendMethod with 1 argument');
test(() => {
let a = new SharedStorageAppendMethod('a', 'b');
}, 'new SharedStorageAppendMethod with 2 arguments');
test(() => {
try {
let a = new SharedStorageDeleteMethod();
} catch (e) {
assert_equals(e.name, 'TypeError');
return;
}
assert_unreached("did not throw");
}, 'new SharedStorageDeleteMethod with no arguments');
test(() => {
let a = new SharedStorageDeleteMethod('a');
}, 'new SharedStorageDeleteMethod with 1 argument');
test(() => {
try {
let a = SharedStorageClearMethod();
} catch (e) {
assert_equals(e.name, 'TypeError');
return;
}
assert_unreached("did not throw");
}, 'call SharedStorageClearMethod() as a function');
test(() => {
let a = new SharedStorageClearMethod();
}, 'new SharedStorageClearMethod with no arguments');
promise_test(() => {
return sharedStorage.batchUpdate([
new SharedStorageSetMethod("key0", "value0"),
new SharedStorageAppendMethod("key1", "value1"),
new SharedStorageDeleteMethod("key2"),
new SharedStorageClearMethod()
], {withLock: "lock3"});
}, 'sharedStorage.batchUpdate');
promise_test(async t => {
return promise_rejects_js(t, TypeError, sharedStorage.batchUpdate());
}, 'sharedStorage.batchUpdate without \'methods\' argument');
promise_test(async t => {
return promise_rejects_js(t, TypeError, sharedStorage.batchUpdate(["123"]));
}, 'sharedStorage.batchUpdate with invalid \'methods\' argument');
</script>
</body>