Protected ReadonlylocalFallback for withStoreLock when the Web Locks API is unavailable.
Protected ReadonlyloggerProtectedmissingProtected ReadonlypluginProtected Readonlystorage@theia/workspace rebinds StorageService to WorkspaceStorageService, which prefixes every
key with the current workspace URI. That would scope GLOBAL_STORAGE_KEY per workspace too,
so LocalStorageService is injected directly instead - the workspace store key already
encodes the workspace via PluginPathsService.getHostStoragePath.
ProtectedgetProtectedgetThe browser storage key holding the given kind of values, or undefined if there's
nowhere to keep them - e.g. workspace state while no workspace is open.
ProtectedgetThe Web Locks API of this browsing context, or undefined in an insecure context or an older browser.
Deploy a plugin.
Optionaltype: PluginTypewhether a plugin is installed by a system or a user, defaults to a user
Optionaloptions: PluginDeployOptionsProtectedrequestRequests name from locks and runs callback once granted, same as LockManager.request().
LockGrantedCallback is typed as (lock: Lock | null) => T, which doesn't account for an
async or never-settling callback even though the API itself supports and awaits one, hence
the cast. Kept as its own method so a subclass or test can swap the lock implementation.
ProtectedwithRuns task while holding the cross-tab lock for storeKey, via the Web Locks API, so a
concurrent setStorageValue on this or another tab can't interleave with it.
Plugins of a browser-only application are deployed at build time, so they can't be installed, uninstalled, enabled or disabled at runtime. The queries just report an empty result instead of failing, so callers like the plugin view still have something to render.
The plugin key-value storage backing
ExtensionContext.globalStateandExtensionContext.workspaceStatelives in the browser's local storage.