Skip to content

Commit ab713a6

Browse files
author
Erik Bender
authored
feat: add electron 9 support (#131)
1 parent d692149 commit ab713a6

File tree

3 files changed

+103
-26
lines changed

3 files changed

+103
-26
lines changed

.circleci/config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,17 @@ workflows:
5252
- test-electron:
5353
name: test-electron-8
5454
electron_version: ^8.0.0
55+
- test-electron:
56+
name: test-electron-9
57+
electron_version: ^9.0.0
5558
- release:
5659
requires:
5760
- test-electron-4
5861
- test-electron-5
5962
- test-electron-6
6063
- test-electron-7
6164
- test-electron-8
65+
- test-electron-9
6266
filters:
6367
branches:
6468
only:

src/index.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BrowserWindow } from 'electron';
1+
import { BrowserWindow, session } from 'electron';
22
import fs from 'fs';
33
import path from 'path';
44
import semver from 'semver';
@@ -48,19 +48,44 @@ const install = (extensionReference, forceDownload = false) => {
4848
);
4949
}
5050
const extensionName = IDMap[chromeStoreID];
51-
const extensionInstalled =
52-
extensionName &&
53-
BrowserWindow.getDevToolsExtensions &&
54-
BrowserWindow.getDevToolsExtensions()[extensionName];
51+
let extensionInstalled = extensionName;
52+
53+
// For Electron >=9.
54+
if (session.defaultSession.getExtension) {
55+
extensionInstalled =
56+
extensionInstalled &&
57+
session.defaultSession.getAllExtensions().find((e) => e.name === extensionName);
58+
} else {
59+
extensionInstalled =
60+
extensionInstalled &&
61+
BrowserWindow.getDevToolsExtensions &&
62+
BrowserWindow.getDevToolsExtensions().hasOwnProperty(extensionName);
63+
}
64+
5565
if (!forceDownload && extensionInstalled) {
5666
return Promise.resolve(IDMap[chromeStoreID]);
5767
}
5868
return downloadChromeExtension(chromeStoreID, forceDownload).then((extensionFolder) => {
5969
// Use forceDownload, but already installed
6070
if (extensionInstalled) {
61-
BrowserWindow.removeDevToolsExtension(extensionName);
71+
// For Electron >=9.
72+
if (session.defaultSession.removeExtension) {
73+
const extensionId = session.defaultSession.getAllExtensions().find((e) => e.name).id;
74+
session.defaultSession.removeExtension(extensionId);
75+
} else {
76+
BrowserWindow.removeDevToolsExtension(extensionName);
77+
}
6278
}
79+
80+
// For Electron >=9.
81+
if (session.defaultSession.loadExtension) {
82+
return session.defaultSession.loadExtension(extensionFolder).then((ext) => {
83+
return Promise.resolve(ext.name);
84+
});
85+
}
86+
6387
const name = BrowserWindow.addDevToolsExtension(extensionFolder); // eslint-disable-line
88+
6489
fs.writeFileSync(
6590
getIDMapPath(),
6691
JSON.stringify(

test/install_spec.js

Lines changed: 68 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import chaiAsPromised from 'chai-as-promised';
44
import chaiFs from 'chai-fs';
55
import { given } from 'mocha-testdata';
66
import path from 'path';
7-
import { BrowserWindow } from 'electron';
7+
import { BrowserWindow, session } from 'electron';
88

99
// Actual Test Imports
1010
import installExtension, { REACT_DEVELOPER_TOOLS } from '../src/';
@@ -31,20 +31,51 @@ describe('Extension Installer', () => {
3131
it('should upgraded the extension with forceDownload', (done) => {
3232
const extensionName = 'React Developer Tools';
3333
const oldVersion = '0.14.0';
34-
BrowserWindow.removeDevToolsExtension(extensionName);
35-
BrowserWindow.addDevToolsExtension(
36-
path.join(__dirname, 'fixtures/simple_extension'),
37-
).should.be.equal(extensionName);
38-
BrowserWindow.getDevToolsExtensions()[extensionName].version.should.be.equal(oldVersion);
3934

40-
installExtension(REACT_DEVELOPER_TOOLS, true)
41-
.then(() => {
42-
BrowserWindow.getDevToolsExtensions()[extensionName].version.should.not.be.equal(
43-
oldVersion,
44-
);
45-
done();
46-
})
47-
.catch((err) => done(err));
35+
// For Electron >=9.
36+
if (session.defaultSession.removeExtension) {
37+
session.defaultSession.removeExtension(extensionName);
38+
} else {
39+
BrowserWindow.removeDevToolsExtension(extensionName);
40+
}
41+
42+
// For Electron >=9.
43+
if (session.defaultSession.loadExtension) {
44+
session.defaultSession
45+
.loadExtension(path.join(__dirname, 'fixtures/simple_extension'))
46+
.then((ext) => {
47+
ext.name.should.be.equal(extensionName);
48+
session.defaultSession
49+
.getAllExtensions()
50+
.find((e) => e.name === extensionName)
51+
.version.should.be.equal(oldVersion);
52+
53+
installExtension(REACT_DEVELOPER_TOOLS, true)
54+
.then(() => {
55+
session.defaultSession
56+
.getAllExtensions()
57+
.find((e) => e.name === extensionName)
58+
.version.should.not.be.equal(oldVersion);
59+
done();
60+
})
61+
.catch((err) => done(err));
62+
})
63+
.catch((err) => done(err));
64+
} else {
65+
BrowserWindow.addDevToolsExtension(
66+
path.join(__dirname, 'fixtures/simple_extension'),
67+
).should.be.equal(extensionName);
68+
BrowserWindow.getDevToolsExtensions()[extensionName].version.should.be.equal(oldVersion);
69+
70+
installExtension(REACT_DEVELOPER_TOOLS, true)
71+
.then(() => {
72+
BrowserWindow.getDevToolsExtensions()[extensionName].version.should.not.be.equal(
73+
oldVersion,
74+
);
75+
done();
76+
})
77+
.catch((err) => done(err));
78+
}
4879
});
4980
});
5081
});
@@ -53,10 +84,20 @@ describe('Extension Installer', () => {
5384
it('should resolve the promise and install all of them', (done) => {
5485
installExtension(knownExtensions)
5586
.then(() => {
56-
const installed = BrowserWindow.getDevToolsExtensions();
57-
for (const extension of knownExtensions) {
58-
installed.should.have.property(extension.description);
59-
BrowserWindow.removeDevToolsExtension(extension.description);
87+
// For Electron >=9.
88+
if (session.defaultSession.getAllExtensions) {
89+
const installed = session.defaultSession.getAllExtensions();
90+
for (const extension of knownExtensions) {
91+
installed.map((e) => e.name).should.include(extension.description);
92+
const extensionId = installed.find((e) => e.name === extension.description).id;
93+
session.defaultSession.removeExtension(extensionId);
94+
}
95+
} else {
96+
const installed = BrowserWindow.getDevToolsExtensions();
97+
for (const extension of knownExtensions) {
98+
installed.should.have.property(extension.description);
99+
BrowserWindow.removeDevToolsExtension(extension.description);
100+
}
60101
}
61102
done();
62103
})
@@ -69,8 +110,15 @@ describe('Extension Installer', () => {
69110
});
70111

71112
afterEach((done) => {
72-
const exts = BrowserWindow.getDevToolsExtensions();
73-
Object.keys(exts).forEach((ext) => BrowserWindow.removeDevToolsExtension(ext));
113+
// For Electron >=9.
114+
if (session.defaultSession.getAllExtensions) {
115+
session.defaultSession
116+
.getAllExtensions()
117+
.forEach((ext) => session.defaultSession.removeExtension(ext.id));
118+
} else {
119+
const exts = BrowserWindow.getDevToolsExtensions();
120+
Object.keys(exts).forEach((ext) => BrowserWindow.removeDevToolsExtension(ext));
121+
}
74122
setTimeout(done, 200);
75123
});
76124
});

0 commit comments

Comments
 (0)