From 174bf8b750bbf38630e071535edf66f5e0723441 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 11 Oct 2018 11:47:41 +0200 Subject: [PATCH] sqlite - detect cross window changes to localStorage --- .../nextStorage2Service.ts | 15 +++++++++++++++ src/vs/workbench/electron-browser/main.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) rename src/vs/platform/storage2/{node => electron-browser}/nextStorage2Service.ts (92%) diff --git a/src/vs/platform/storage2/node/nextStorage2Service.ts b/src/vs/platform/storage2/electron-browser/nextStorage2Service.ts similarity index 92% rename from src/vs/platform/storage2/node/nextStorage2Service.ts rename to src/vs/platform/storage2/electron-browser/nextStorage2Service.ts index 79707bf1f40..4b185a7cc27 100644 --- a/src/vs/platform/storage2/node/nextStorage2Service.ts +++ b/src/vs/platform/storage2/electron-browser/nextStorage2Service.ts @@ -10,6 +10,8 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment' import { IWorkspaceStorageChangeEvent, INextStorage2Service, StorageScope } from 'vs/platform/storage2/common/storage2'; import { Storage, IStorageLoggingOptions } from 'vs/base/node/storage'; import { IStorageService, StorageScope as LocalStorageScope } from 'vs/platform/storage/common/storage'; +import { addDisposableListener } from 'vs/base/browser/dom'; +import { startsWith } from 'vs/base/common/strings'; export class NextStorage2Service extends Disposable implements INextStorage2Service { _serviceBrand: any; @@ -109,8 +111,21 @@ export class NextDelegatingStorageService extends Disposable implements INextSto ) { super(); + this.registerListeners(); + } + + private registerListeners(): void { this._register(this.nextStorage2Service.onDidChangeStorage(e => this._onDidChangeStorage.fire(e))); this._register(this.nextStorage2Service.onWillClose(e => this._onWillClose.fire())); + + const globalKeyMarker = 'storage://global/'; + this._register(addDisposableListener(window, 'storage', (e: StorageEvent) => { + if (startsWith(e.key, globalKeyMarker)) { + const key = e.key.substr(globalKeyMarker.length); + + this._onDidChangeStorage.fire({ key, scope: StorageScope.GLOBAL }); + } + })); } get(key: string, scope: StorageScope, fallbackValue?: any): string { diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index 9a7bb3f968c..f2b216b4b16 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -36,7 +36,7 @@ import { IWorkspacesService, ISingleFolderWorkspaceIdentifier } from 'vs/platfor import { createSpdLogService } from 'vs/platform/log/node/spdlogService'; import * as fs from 'fs'; import { ConsoleLogService, MultiplexLogService, ILogService } from 'vs/platform/log/common/log'; -import { NextStorage2Service, NextDelegatingStorageService } from 'vs/platform/storage2/node/nextStorage2Service'; +import { NextStorage2Service, NextDelegatingStorageService } from 'vs/platform/storage2/electron-browser/nextStorage2Service'; import { IssueChannelClient } from 'vs/platform/issue/node/issueIpc'; import { IIssueService } from 'vs/platform/issue/common/issue'; import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log/node/logIpc'; -- GitLab