Prevent state collisions Previously if you opened different workspaces that had the same filesystem path (for example if you have /home/coder on two different machines that are both accessed through the same host) they would conflict with each other. This ensures that different browser paths will be unique (for example /workspace1 and /workspace2). The easiest way to test is to open files in the same workspace using both / and /vscode and make sure they are not interacting with each other. Index: code-server/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts =================================================================== --- code-server.orig/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts +++ code-server/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts @@ -18,6 +18,7 @@ import { AbstractStorageService, isProfi import { isUserDataProfile, IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile'; import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace'; import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { hash } from 'vs/base/common/hash'; export class BrowserStorageService extends AbstractStorageService { @@ -298,7 +299,11 @@ export class IndexedDBStorageDatabase ex } static async createWorkspaceStorage(workspaceId: string, logService: ILogService): Promise { - return IndexedDBStorageDatabase.create({ id: workspaceId }, logService); + // Add a unique ID based on the current path for per-workspace databases. + // This prevents workspaces on different machines that share the same domain + // and file path from colliding (since it does not appear IndexedDB can be + // scoped to a path) as long as they are hosted on different paths. + return IndexedDBStorageDatabase.create({ id: workspaceId + '-' + hash(location.pathname.toString().replace(/\/$/, "")).toString(16) }, logService); } static async create(options: IndexedDBStorageDatabaseOptions, logService: ILogService): Promise {