| // 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); |