Skip to content

Commit 3fbc156

Browse files
committed
refactor: avoid deprecated extension APIs
1 parent 1f3cddf commit 3fbc156

File tree

13 files changed

+62
-36
lines changed

13 files changed

+62
-36
lines changed

packages/electron-chrome-extensions/src/browser/api/browser-action.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,12 @@ export class BrowserActionAPI {
202202
}
203203

204204
private setupSession(session: Electron.Session) {
205-
session.on('extension-loaded', (event, extension) => {
205+
const sessionExtensions = session.extensions || session
206+
sessionExtensions.on('extension-loaded', (event, extension) => {
206207
this.processExtension(extension)
207208
})
208209

209-
session.on('extension-unloaded', (event, extension) => {
210+
sessionExtensions.on('extension-unloaded', (event, extension) => {
210211
this.removeActions(extension.id)
211212
})
212213
}
@@ -227,7 +228,8 @@ export class BrowserActionAPI {
227228
const imageSize = parseInt(fragments[2], 10)
228229
const resizeType = parseInt(fragments[3], 10) || ResizeType.Up
229230

230-
const extension = this.ctx.session.getExtension(extensionId)
231+
const sessionExtensions = this.ctx.session.extensions || this.ctx.session
232+
const extension = sessionExtensions.getExtension(extensionId)
231233

232234
let iconDetails: chrome.browserAction.TabIconDetails | undefined
233235

@@ -433,7 +435,8 @@ export class BrowserActionAPI {
433435
private activateContextMenu(details: ActivateDetails) {
434436
const { extensionId, anchorRect } = details
435437

436-
const extension = this.ctx.session.getExtension(extensionId)
438+
const sessionExtensions = this.ctx.session.extensions || this.ctx.session
439+
const extension = sessionExtensions.getExtension(extensionId)
437440
if (!extension) {
438441
throw new Error(`Unregistered extension '${extensionId}'`)
439442
}
@@ -480,7 +483,7 @@ export class BrowserActionAPI {
480483
label: 'Remove extension',
481484
click: () => {
482485
d(`removing extension "${extension.name}" (${extension.id})`)
483-
this.ctx.session.removeExtension(extension.id)
486+
sessionExtensions.removeExtension(extension.id)
484487
},
485488
})
486489
}

packages/electron-chrome-extensions/src/browser/api/commands.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ export class CommandsAPI {
88
const handle = this.ctx.router.apiHandler()
99
handle('commands.getAll', this.getAll)
1010

11-
ctx.session.on('extension-loaded', (_event, extension) => {
11+
const sessionExtensions = ctx.session.extensions || ctx.session
12+
sessionExtensions.on('extension-loaded', (_event, extension) => {
1213
this.processExtension(extension)
1314
})
1415

15-
ctx.session.on('extension-unloaded', (_event, extension) => {
16+
sessionExtensions.on('extension-unloaded', (_event, extension) => {
1617
this.removeCommands(extension)
1718
})
1819
}

packages/electron-chrome-extensions/src/browser/api/context-menus.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ export class ContextMenusAPI {
8989
handle('contextMenus.remove', this.remove)
9090
handle('contextMenus.removeAll', this.removeAll)
9191

92-
this.ctx.session.on('extension-unloaded', (event, extension) => {
92+
const sessionExtensions = ctx.session.extensions || ctx.session
93+
sessionExtensions.on('extension-unloaded', (event, extension) => {
9394
if (this.menus.has(extension.id)) {
9495
this.menus.delete(extension.id)
9596
}
@@ -193,8 +194,10 @@ export class ContextMenusAPI {
193194
documentUrl: params.frameURL || params.pageURL,
194195
}
195196

197+
const sessionExtensions = this.ctx.session.extensions || this.ctx.session
198+
196199
for (const [extensionId, propItems] of this.menus) {
197-
const extension = this.ctx.session.getExtension(extensionId)
200+
const extension = sessionExtensions.getExtension(extensionId)
198201
if (!extension) continue
199202

200203
const extensionMenuItemOptions: ContextItemConstructorOptions[] = []
@@ -259,7 +262,8 @@ export class ContextMenusAPI {
259262
menuType: ContextMenuType,
260263
): Electron.MenuItem[] {
261264
const extensionItems = this.menus.get(extensionId)
262-
const extension = this.ctx.session.getExtension(extensionId)
265+
const sessionExtensions = this.ctx.session.extensions || this.ctx.session
266+
const extension = sessionExtensions.getExtension(extensionId)
263267
const activeTab = this.ctx.store.getActiveTabOfCurrentWindow()
264268

265269
const menuItemOptions = []

packages/electron-chrome-extensions/src/browser/api/notifications.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ export class NotificationsAPI {
5656
handle('notifications.getPermissionLevel', this.getPermissionLevel)
5757
handle('notifications.update', this.update)
5858

59-
this.ctx.session.on('extension-unloaded', (event, extension) => {
59+
const sessionExtensions = ctx.session.extensions || ctx.session
60+
sessionExtensions.on('extension-unloaded', (event, extension) => {
6061
for (const [key, notification] of this.registry) {
6162
if (key.startsWith(extension.id)) {
6263
notification.close()

packages/electron-chrome-extensions/src/browser/api/permissions.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ export class PermissionsAPI {
2121
handle('permissions.remove', this.remove)
2222
handle('permissions.request', this.request)
2323

24-
ctx.session.getAllExtensions().forEach((ext) => this.processExtension(ext))
24+
const sessionExtensions = ctx.session.extensions || ctx.session
25+
sessionExtensions.getAllExtensions().forEach((ext) => this.processExtension(ext))
2526

26-
ctx.session.on('extension-loaded', (_event, extension) => {
27+
sessionExtensions.on('extension-loaded', (_event, extension) => {
2728
this.processExtension(extension)
2829
})
2930

30-
ctx.session.on('extension-unloaded', (_event, extension) => {
31+
sessionExtensions.on('extension-unloaded', (_event, extension) => {
3132
this.permissionMap.delete(extension.id)
3233
})
3334
}

packages/electron-chrome-extensions/src/browser/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export class ElectronChromeExtensions extends EventEmitter {
175175
}
176176

177177
private listenForExtensions() {
178-
this.ctx.session.addListener('extension-loaded', (_event, extension) => {
178+
const sessionExtensions = this.ctx.session.extensions || this.ctx.session
179+
sessionExtensions.addListener('extension-loaded', (_event, extension) => {
179180
readLoadedExtensionManifest(this.ctx, extension)
180181
})
181182
}

packages/electron-chrome-extensions/src/browser/router.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ export class ExtensionRouter {
236236
) {
237237
this.delegate.addObserver(this)
238238

239-
session.on('extension-unloaded', (event, extension) => {
239+
const sessionExtensions = session.extensions || session
240+
sessionExtensions.on('extension-unloaded', (event, extension) => {
240241
this.filterListeners((listener) => listener.extensionId !== extension.id)
241242
})
242243

@@ -297,7 +298,8 @@ export class ExtensionRouter {
297298
addListener(listener: EventListener, extensionId: string, eventName: string) {
298299
const { listeners, session } = this
299300

300-
const extension = session.getExtension(extensionId)
301+
const sessionExtensions = session.extensions || session
302+
const extension = sessionExtensions.getExtension(extensionId)
301303
if (!extension) {
302304
throw new Error(`extension not registered in session [extensionId:${extensionId}]`)
303305
}
@@ -358,13 +360,14 @@ export class ExtensionRouter {
358360
) {
359361
const { session } = this
360362
const eventSession = getSessionFromEvent(event)
363+
const eventSessionExtensions = eventSession.extensions || eventSession
361364
const handler = this.getHandler(handlerName)
362365

363366
if (eventSession !== session && !handler.allowRemote) {
364367
throw new Error(`${handlerName} does not support calling from a remote session`)
365368
}
366369

367-
const extension = extensionId ? eventSession.getExtension(extensionId) : undefined
370+
const extension = extensionId ? eventSessionExtensions.getExtension(extensionId) : undefined
368371
if (!extension && handler.extensionContext) {
369372
throw new Error(`${handlerName} was sent from an unknown extension context`)
370373
}

packages/electron-chrome-web-store/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ Installs Chrome extension from the Chrome Web Store.
109109
- `options`
110110
- `session`: The Electron session to load extensions in. Defaults to `session.defaultSession`.
111111
- `extensionsPath`: The path to the extensions directory. Defaults to 'Extensions/' in the app's userData path.
112-
- `loadExtensionOptions`: Extension options passed into `session.loadExtension`.
112+
- `loadExtensionOptions`: Extension options passed into `session.extensions.loadExtension`.
113113

114114
### `uninstallExtension`
115115

packages/electron-chrome-web-store/src/browser/api.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ function getExtensionInstallStatus(
6262
return ExtensionInstallStatus.BLOCKED_BY_POLICY
6363
}
6464

65-
const extensions = state.session.getAllExtensions()
65+
const sessionExtensions = state.session.extensions || state.session
66+
const extensions = sessionExtensions.getAllExtensions()
6667
const extension = extensions.find((ext) => ext.id === extensionId)
6768

6869
if (!extension) {
@@ -219,7 +220,8 @@ export function registerWebStoreApi(webStoreState: WebStoreState) {
219220

220221
if (result.result === Result.SUCCESS) {
221222
queueMicrotask(() => {
222-
const ext = webStoreState.session.getExtension(details.id)
223+
const sessionExtensions = webStoreState.session.extensions || webStoreState.session
224+
const ext = sessionExtensions.getExtension(details.id)
223225
if (ext && senderFrame && !senderFrame.isDestroyed()) {
224226
try {
225227
senderFrame.send('chrome.management.onInstalled', getExtensionInfo(ext))
@@ -314,7 +316,8 @@ export function registerWebStoreApi(webStoreState: WebStoreState) {
314316
})
315317

316318
handle('chrome.management.getAll', async (event) => {
317-
const extensions = webStoreState.session.getAllExtensions()
319+
const sessionExtensions = webStoreState.session.extensions || webStoreState.session
320+
const extensions = sessionExtensions.getAllExtensions()
318321
return extensions.map(getExtensionInfo)
319322
})
320323

packages/electron-chrome-web-store/src/browser/installer.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,11 @@ export async function installExtension(
215215
d('installing %s', extensionId)
216216

217217
const session = opts.session || electronSession.defaultSession
218+
const sessionExtensions = session.extensions || session
218219
const extensionsPath = opts.extensionsPath || getDefaultExtensionsPath()
219220

220221
// Check if already loaded
221-
const existingExtension = session.getExtension(extensionId)
222+
const existingExtension = sessionExtensions.getExtension(extensionId)
222223
if (existingExtension) {
223224
d('%s already loaded', extensionId)
224225
return existingExtension
@@ -228,12 +229,15 @@ export async function installExtension(
228229
const existingExtensionInfo = await findExtensionInstall(extensionId, extensionsPath)
229230
if (existingExtensionInfo && existingExtensionInfo.type === 'store') {
230231
d('%s already installed', extensionId)
231-
return await session.loadExtension(existingExtensionInfo.path, opts.loadExtensionOptions)
232+
return await sessionExtensions.loadExtension(
233+
existingExtensionInfo.path,
234+
opts.loadExtensionOptions,
235+
)
232236
}
233237

234238
// Download and load new extension
235239
const extensionPath = await downloadExtension(extensionId, extensionsPath)
236-
const extension = await session.loadExtension(extensionPath, opts.loadExtensionOptions)
240+
const extension = await sessionExtensions.loadExtension(extensionPath, opts.loadExtensionOptions)
237241
d('installed %s', extensionId)
238242

239243
return extension
@@ -249,12 +253,13 @@ export async function uninstallExtension(
249253
d('uninstalling %s', extensionId)
250254

251255
const session = opts.session || electronSession.defaultSession
256+
const sessionExtensions = session.extensions || session
252257
const extensionsPath = opts.extensionsPath || getDefaultExtensionsPath()
253258

254-
const extensions = session.getAllExtensions()
259+
const extensions = sessionExtensions.getAllExtensions()
255260
const existingExt = extensions.find((ext) => ext.id === extensionId)
256261
if (existingExt) {
257-
session.removeExtension(extensionId)
262+
sessionExtensions.removeExtension(extensionId)
258263
}
259264

260265
const extensionDir = path.join(extensionsPath, extensionId)

0 commit comments

Comments
 (0)