1
- import { app , nativeImage , webContents } from 'electron' ;
1
+ import { app , BrowserWindow , nativeImage , webContents } from 'electron' ;
2
2
import { Buffer } from 'buffer' ;
3
3
import fs from 'fs' ;
4
4
import path from 'path' ;
@@ -53,15 +53,13 @@ const getManifestFromPath = (srcDirectory) => {
53
53
Object . assign ( manifest , {
54
54
srcDirectory : srcDirectory ,
55
55
extensionId : extensionId ,
56
- // We can not use 'file://' directly because all resources in the extension
57
- // will be treated as relative to the root in Chrome.
58
56
startPage : url . format ( {
59
- protocol : 'chrome -extension' ,
57
+ protocol : 'lulumi -extension' ,
60
58
slashes : true ,
61
59
hostname : extensionId ,
62
- pathname : manifest . devtools_page
63
- } )
64
- } )
60
+ pathname : manifest . devtools_page ,
61
+ } ) ,
62
+ } ) ;
65
63
return manifest ;
66
64
} else if ( manifest && manifest . name ) {
67
65
console . warn ( `Attempted to load extension "${ manifest . name } " that has already been loaded.` ) ;
@@ -151,6 +149,7 @@ const injectContentScripts = (manifest) => {
151
149
contentScripts : manifest . content_scripts . map ( contentScriptToEntry ) ,
152
150
icons : iconsToEntry ( manifest . icons ) ,
153
151
srcDirectory : manifest . srcDirectory ,
152
+ name : manifest . name ,
154
153
} ;
155
154
global . renderProcessPreferences . push ( entry ) ;
156
155
contentScripts [ manifest . name ] = entry ;
@@ -168,8 +167,6 @@ const removeContentScripts = (manifest) => {
168
167
delete contentScripts [ manifest . name ] ;
169
168
}
170
169
171
- // Transfer the |manifest| to a format that can be recognized by the
172
- // |DevToolsAPI.addExtensions|.
173
170
const manifestToExtensionInfo = ( manifest ) => {
174
171
return {
175
172
startPage : manifest . startPage ,
@@ -193,7 +190,6 @@ const loadLulumiExtensions = (win, manifests) => {
193
190
manifests . forEach ( loadExtension ) ;
194
191
195
192
const extensionInfoArray = manifests . map ( manifestToExtensionInfo ) ;
196
- // win.devToolsWebContents.executeJavaScript(`DevToolsAPI.addExtensions(${JSON.stringify(extensionInfoArray)})`);
197
193
} ;
198
194
199
195
app . on ( 'web-contents-created' , ( event , webContents ) => {
@@ -228,7 +224,7 @@ const lulumiExtensionHandler = (request, callback) => {
228
224
229
225
fs . readFile ( path . join ( manifest . srcDirectory , parsed . path ) , ( err , content ) => {
230
226
if ( err ) {
231
- return callback ( - 6 ) ; // FILE_NOT_FOUND
227
+ return callback ( - 6 ) ; // FILE_NOT_FOUND
232
228
} else {
233
229
return callback ( content ) ;
234
230
}
@@ -246,7 +242,6 @@ app.on('session-created', (sess) => {
246
242
// the persistent path of "Lulumi Extensions" preference file
247
243
let loadedExtensionsPath = null ;
248
244
249
- /*
250
245
app . on ( 'will-quit' , ( ) => {
251
246
try {
252
247
const loadedExtensions = objectValues ( manifestMap ) . map ( ( manifest ) => {
@@ -266,77 +261,62 @@ app.on('will-quit', () => {
266
261
// Ignore error
267
262
}
268
263
} ) ;
269
- */
270
264
271
265
// we can not use protocol or BrowserWindow until app is ready
272
266
app . once ( 'ready' , ( ) => {
273
267
// load persisted extensions
274
268
loadedExtensionsPath = process . env . NODE_ENV === 'development'
275
- ? path . resolve ( './ extensions')
276
- : path . join ( config . lulumiAppPath , 'extensions' ) ;
269
+ ? path . join ( config . devUserData , 'lulumi- extensions')
270
+ : path . join ( app . getPath ( 'userData' ) , 'lulumi- extensions' ) ;
277
271
try {
278
- const loadedExtensions
279
- = fs . readdirSync ( loadedExtensionsPath ) . filter ( ( file ) => file . startsWith ( '.' ) === false ) . filter ( ( file ) => fs . lstatSync ( path . join ( loadedExtensionsPath , file ) ) . isDirectory ( ) ) ;
272
+ const loadedExtensions = JSON . parse ( fs . readFileSync ( loadedExtensionsPath ) ) ;
280
273
if ( Array . isArray ( loadedExtensions ) ) {
281
- for ( const extension of loadedExtensions ) {
282
- // Start background pages and set content scripts.
283
- const manifest = getManifestFromPath ( path . join ( loadedExtensionsPath , extension ) ) ;
274
+ for ( const srcDirectory of loadedExtensions ) {
275
+ // start background pages and set content scripts
276
+ const manifest = getManifestFromPath ( srcDirectory ) ;
284
277
loadExtension ( manifest ) ;
285
278
}
286
279
}
287
280
} catch ( error ) {
288
- // Ignore error
281
+ // ignore error
289
282
}
290
283
291
284
// the public API to add/remove extensions
292
- /*
293
- BrowserWindow.addDevToolsExtension = function (srcDirectory) {
294
- const manifest = getManifestFromPath(srcDirectory)
285
+ BrowserWindow . addExtension = ( srcDirectory ) => {
286
+ const manifest = getManifestFromPath ( srcDirectory ) ;
295
287
if ( manifest ) {
296
- loadExtension(manifest)
297
- for (const webContents of getAllWebContents()) {
288
+ loadExtension ( manifest ) ;
289
+ for ( const webContents of webContents . getAllWebContents ( ) ) {
298
290
if ( isWindowOrWebView ( webContents ) ) {
299
- loadDevToolsExtensions (webContents, [manifest])
291
+ loadLulumiExtensions ( webContents , [ manifest ] ) ;
300
292
}
301
293
}
302
- return manifest.name
294
+ return manifest . name ;
303
295
}
304
296
}
305
297
306
- BrowserWindow.removeDevToolsExtension = function (name) {
307
- const manifest = manifestNameMap[name]
308
- if (!manifest) return
298
+ BrowserWindow . removeExtension = ( name ) => {
299
+ const manifest = manifestNameMap [ name ] ;
300
+ if ( ! manifest ) {
301
+ return ;
302
+ }
309
303
310
- removeBackgroundPages(manifest)
311
- removeContentScripts(manifest)
312
- delete manifestMap[manifest.extensionId]
313
- delete manifestNameMap[name]
304
+ removeBackgroundPages ( manifest ) ;
305
+ removeContentScripts ( manifest ) ;
306
+ delete manifestMap [ manifest . extensionId ] ;
307
+ delete manifestNameMap [ name ] ;
314
308
}
315
309
316
- BrowserWindow.getDevToolsExtensions = function () {
317
- const extensions = {}
310
+ BrowserWindow . getExtensions = ( ) => {
311
+ const extensions = { } ;
318
312
Object . keys ( manifestNameMap ) . forEach ( function ( name ) {
319
- const manifest = manifestNameMap[name]
320
- extensions[name] = {name: manifest.name, version: manifest.version}
313
+ const manifest = manifestNameMap [ name ] ;
314
+ extensions [ name ] = { name : manifest . name , version : manifest . version } ;
321
315
} )
322
- return extensions
316
+ return extensions ;
323
317
}
324
- */
325
318
} ) ;
326
319
327
- export function addExtension ( srcDirectory ) {
328
- const manifest = getManifestFromPath ( srcDirectory ) ;
329
- if ( manifest ) {
330
- loadExtension ( manifest ) ;
331
- for ( const webContents of webContents . getAllWebContents ( ) ) {
332
- if ( isWindowOrWebView ( webContents ) ) {
333
- loadLulumiExtensions ( webContents , [ manifest ] ) ;
334
- }
335
- }
336
- return manifest . name ;
337
- }
338
- } ;
339
-
340
320
export {
341
321
manifestMap ,
342
322
manifestNameMap ,
0 commit comments