From 21af69004e29a4edeea1973b22c56fd7dbc4c4a8 Mon Sep 17 00:00:00 2001 From: Samuel Maddock Date: Tue, 12 Nov 2024 11:08:06 -0500 Subject: [PATCH] set error message --- .../src/browser/index.ts | 22 +++++++++++-------- .../src/renderer/web-store-api.ts | 12 +++++++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/electron-chrome-web-store/src/browser/index.ts b/packages/electron-chrome-web-store/src/browser/index.ts index 4662bc21..040bb201 100644 --- a/packages/electron-chrome-web-store/src/browser/index.ts +++ b/packages/electron-chrome-web-store/src/browser/index.ts @@ -199,23 +199,24 @@ export function setupChromeWebStore(session: Session, modulePath: string = __dir await extractCrx(crx, unpackedDir) // Load extension into session - await session.loadExtension(unpackedDir) + const ext = await session.loadExtension(unpackedDir) - return Result.SUCCESS + queueMicrotask(() => { + event.sender.send('chrome.management.onInstalled', getExtensionInfo(ext)) + }) + + return { result: Result.SUCCESS } } catch (error) { console.error('Extension installation failed:', error) - return Result.INSTALL_ERROR + return { + result: Result.INSTALL_ERROR, + message: error instanceof Error ? error.message : String(error), + } } }) ipcMain.handle('chromeWebstore.completeInstall', async (event, id) => { // TODO: Implement completion of extension installation - queueMicrotask(() => { - const ext = session.getExtension(id) - if (ext) { - event.sender.send('chrome.management.onInstalled', getExtensionInfo(ext)) - } - }) return Result.SUCCESS }) @@ -352,6 +353,9 @@ export function setupChromeWebStore(session: Session, modulePath: string = __dir try { await uninstallExtension(id) + queueMicrotask(() => { + event.sender.send('chrome.management.onUninstalled', id) + }) return Result.SUCCESS } catch (error) { console.error(error) diff --git a/packages/electron-chrome-web-store/src/renderer/web-store-api.ts b/packages/electron-chrome-web-store/src/renderer/web-store-api.ts index 985b8dd6..af445813 100644 --- a/packages/electron-chrome-web-store/src/renderer/web-store-api.ts +++ b/packages/electron-chrome-web-store/src/renderer/web-store-api.ts @@ -83,6 +83,15 @@ interface WebstorePrivate { } function setupChromeWebStoreApi() { + const setExtensionError = (message?: string) => { + webFrame.executeJavaScript(` + if (typeof chrome !== 'undefined') { + if (!chrome.extension) chrome.extension = {}; + chrome.extension.lastError = ${JSON.stringify(message ? { message } : null)}; + } + `) + } + /** * Implementation of Chrome's webstorePrivate for Electron. */ @@ -94,8 +103,9 @@ function setupChromeWebStoreApi() { beginInstallWithManifest3: async (details, callback) => { console.log('webstorePrivate.beginInstallWithManifest3', details) - const result = await ipcRenderer.invoke('chromeWebstore.beginInstall', details) + const { result, message } = await ipcRenderer.invoke('chromeWebstore.beginInstall', details) console.log('webstorePrivate.beginInstallWithManifest3 result:', result) + setExtensionError(result === Result.SUCCESS ? null : message) if (callback) callback(result) return result },