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 '../../../../platform/userDataProfile/common/userDataProfile.js';
 import { IAnyWorkspaceIdentifier } from '../../../../platform/workspace/common/workspace.js';
 import { IUserDataProfileService } from '../../userDataProfile/common/userDataProfile.js';
+import { hash } from '../../../../base/common/hash.js';
 
 export class BrowserStorageService extends AbstractStorageService {
 
@@ -300,7 +301,11 @@ export class IndexedDBStorageDatabase ex
 	}
 
 	static async createWorkspaceStorage(workspaceId: string, logService: ILogService): Promise<IIndexedDBStorageDatabase> {
-		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<IIndexedDBStorageDatabase> {
