diff --git a/packages/electron-chrome-extensions/README.md b/packages/electron-chrome-extensions/README.md index 3df36325..bdefaaed 100644 --- a/packages/electron-chrome-extensions/README.md +++ b/packages/electron-chrome-extensions/README.md @@ -211,6 +211,18 @@ Example: } ``` +##### `extensions.windowUpdated(window)` + +- `window` Electron.BrowserWindow + +Update the details of a window from the main process. + +##### `extensions.tabUpdated(tab)` + +- `tab` Electron.WebContents + +Update the details of a tab from the main process. + #### Instance Events ##### Event: 'browser-action-popup-created' diff --git a/packages/electron-chrome-extensions/src/browser/api/tabs.ts b/packages/electron-chrome-extensions/src/browser/api/tabs.ts index 9417cafc..1fa2f989 100644 --- a/packages/electron-chrome-extensions/src/browser/api/tabs.ts +++ b/packages/electron-chrome-extensions/src/browser/api/tabs.ts @@ -123,6 +123,12 @@ export class TabsAPI { } this.ctx.store.tabDetailsCache.set(tab.id, details) + + // Update the window's tab cache + if (win) { + this.ctx.store.updateWindowDetails(win) + } + return details } diff --git a/packages/electron-chrome-extensions/src/browser/api/windows.ts b/packages/electron-chrome-extensions/src/browser/api/windows.ts index f8a0d902..38b66c9d 100644 --- a/packages/electron-chrome-extensions/src/browser/api/windows.ts +++ b/packages/electron-chrome-extensions/src/browser/api/windows.ts @@ -27,6 +27,7 @@ export class WindowsAPI { handle('windows.remove', this.remove.bind(this)) this.ctx.store.on('window-added', this.observeWindow.bind(this)) + this.ctx.store.on('update-window-details', this.updateWindowDetails.bind(this)) } private observeWindow(window: Electron.BrowserWindow) { @@ -62,7 +63,7 @@ export class WindowsAPI { }) .map((tab) => this.ctx.store.tabDetailsCache.get(tab.id) as chrome.tabs.Tab) .filter(Boolean), - incognito: this.ctx.session.isPersistent(), + incognito: !this.ctx.session.isPersistent(), type: 'normal', // TODO state: getWindowState(win), alwaysOnTop: win.isAlwaysOnTop(), @@ -81,6 +82,11 @@ export class WindowsAPI { return details } + public updateWindowDetails(win: Electron.BaseWindow) { + const details = this.createWindowDetails(win) + return details + } + private getWindowFromId(id: number) { if (id === WindowsAPI.WINDOW_ID_CURRENT) { return this.ctx.store.getCurrentWindow() diff --git a/packages/electron-chrome-extensions/src/browser/index.ts b/packages/electron-chrome-extensions/src/browser/index.ts index d2e60c6b..c4f693e2 100644 --- a/packages/electron-chrome-extensions/src/browser/index.ts +++ b/packages/electron-chrome-extensions/src/browser/index.ts @@ -213,6 +213,19 @@ export class ElectronChromeExtensions extends EventEmitter { } } + windowUpdated(window: Electron.BaseWindow) { + return this.api.windows.updateWindowDetails(window) + } + + tabUpdated(tab: Electron.WebContents) { + this.checkWebContentsArgument(tab) + if (this.ctx.store.tabs.has(tab)) { + this.api.tabs.onUpdated(tab.id) + return true + } + return false + } + /** * Add webContents to be tracked as an extension host which will receive * extension events when a chrome-extension:// resource is loaded. diff --git a/packages/electron-chrome-extensions/src/browser/store.ts b/packages/electron-chrome-extensions/src/browser/store.ts index 6ef9d318..1c0ff7de 100644 --- a/packages/electron-chrome-extensions/src/browser/store.ts +++ b/packages/electron-chrome-extensions/src/browser/store.ts @@ -206,4 +206,8 @@ export class ExtensionStore extends EventEmitter { const result: unknown = await this.impl.requestPermissions(extension, permissions) return typeof result === 'boolean' ? result : false } + + updateWindowDetails(win: Electron.BaseWindow) { + this.emit('update-window-details', win) + } }