183 lines
4.9 KiB
JavaScript
183 lines
4.9 KiB
JavaScript
// Copyright 2022 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
var globalVar = 0;
|
|
|
|
async function busyWaitMs(time_to_wait) {
|
|
const startTime = Date.now();
|
|
while (Date.now() - startTime < time_to_wait) {
|
|
|
|
}
|
|
}
|
|
|
|
class TestURLSelectionOperation {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('setKey') && data.hasOwnProperty('setValue')) {
|
|
await sharedStorage.set(data['setKey'], data['setValue']);
|
|
}
|
|
|
|
if (data && data.hasOwnProperty('mockResult')) {
|
|
return data['mockResult'];
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class TestURLSelectionOperationTwo {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('mockResult')) {
|
|
return data['mockResult'];
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class TestSlowURLSelectionOperation {
|
|
async run(urls, data) {
|
|
await busyWaitMs(100);
|
|
if (data && data.hasOwnProperty('mockResult')) {
|
|
return data['mockResult'];
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class IncrementGlobalVariableAndReturnOriginalValueOperation {
|
|
async run(urls, data) {
|
|
return globalVar++;
|
|
}
|
|
}
|
|
|
|
class VerifyKeyValue {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('expectedKey') &&
|
|
data.hasOwnProperty('expectedValue')) {
|
|
const expectedValue = data['expectedValue'];
|
|
const value = await sharedStorage.get(data['expectedKey']);
|
|
if (value === expectedValue) {
|
|
return 1;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class VerifyKeyNotFound {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('expectedKey')) {
|
|
const value = await sharedStorage.get(data['expectedKey']);
|
|
if (typeof value === 'undefined') {
|
|
return 1;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class VerifyInterestGroups {
|
|
async run(urls, data) {
|
|
if (data &&
|
|
data.hasOwnProperty('expectedOwner') &&
|
|
data.hasOwnProperty('expectedName')) {
|
|
|
|
const groups = await interestGroups();
|
|
|
|
if (groups.length !== 1) {
|
|
return -1;
|
|
}
|
|
|
|
if (groups[0]["owner"] !== data['expectedOwner']) {
|
|
return -1;
|
|
}
|
|
|
|
if (groups[0]["name"] !== data['expectedName']) {
|
|
return -1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class GetWaitIncrementWithinLockOperation {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('key')) {
|
|
await navigator.locks.request("lock0", async (lock) => {
|
|
let value_read = await sharedStorage.get(data['key']);
|
|
value_read = value_read ? Number(value_read) : 0;
|
|
|
|
await busyWaitMs(100);
|
|
|
|
await sharedStorage.set(data['key'], value_read + 1);
|
|
});
|
|
|
|
return 1;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class GetWaitSetWithinLockOperation {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('key') && data.hasOwnProperty('lock_name')
|
|
&& data.hasOwnProperty('append_letter')) {
|
|
await navigator.locks.request(data['lock_name'], async (lock) => {
|
|
let value_read = await sharedStorage.get(data['key']);
|
|
|
|
if (value_read === undefined) {
|
|
value_read = "";
|
|
}
|
|
|
|
await busyWaitMs(500);
|
|
|
|
await sharedStorage.set(data['key'], value_read + data['append_letter']);
|
|
});
|
|
|
|
return 1;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class AppendWithLockOptionOperation {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('key') && data.hasOwnProperty('lock_name')
|
|
&& data.hasOwnProperty('append_letter')) {
|
|
sharedStorage.append(data['key'], data['append_letter'], {withLock: data['lock_name']});
|
|
return 1;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
class BatchUpdateWithTwoAppendMethodsWithBatchLockOptionOperation {
|
|
async run(urls, data) {
|
|
if (data && data.hasOwnProperty('key') && data.hasOwnProperty('lock_name')
|
|
&& data.hasOwnProperty('append_letter')) {
|
|
sharedStorage.batchUpdate([
|
|
new SharedStorageAppendMethod(data['key'], data['append_letter']),
|
|
new SharedStorageAppendMethod(data['key'], data['append_letter'])
|
|
], {withLock: data['lock_name']});
|
|
return 1;
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
register('test-url-selection-operation', TestURLSelectionOperation);
|
|
register('test-url-selection-operation-2', TestURLSelectionOperationTwo);
|
|
register('test-slow-url-selection-operation', TestSlowURLSelectionOperation);
|
|
register('increment-global-variable-and-return-original-value-operation',
|
|
IncrementGlobalVariableAndReturnOriginalValueOperation);
|
|
register('verify-key-value', VerifyKeyValue);
|
|
register('verify-key-not-found', VerifyKeyNotFound);
|
|
register('verify-interest-groups', VerifyInterestGroups);
|
|
register('get-wait-increment-within-lock', GetWaitIncrementWithinLockOperation);
|
|
register('get-wait-set-within-lock', GetWaitSetWithinLockOperation);
|
|
register('append-with-lock-option', AppendWithLockOptionOperation);
|
|
register('batch-update-with-two-append-methods-with-batch-lock-option', BatchUpdateWithTwoAppendMethodsWithBatchLockOptionOperation);
|