Add chrome-extension protocol for loading devtools extensions.
This commit is contained in:
parent
1533600720
commit
cd40bdbec8
3 changed files with 45 additions and 0 deletions
1
atom.gyp
1
atom.gyp
|
@ -28,6 +28,7 @@
|
||||||
'atom/browser/api/lib/protocol.coffee',
|
'atom/browser/api/lib/protocol.coffee',
|
||||||
'atom/browser/api/lib/tray.coffee',
|
'atom/browser/api/lib/tray.coffee',
|
||||||
'atom/browser/api/lib/web-contents.coffee',
|
'atom/browser/api/lib/web-contents.coffee',
|
||||||
|
'atom/browser/lib/chrome-extension.coffee',
|
||||||
'atom/browser/lib/init.coffee',
|
'atom/browser/lib/init.coffee',
|
||||||
'atom/browser/lib/objects-registry.coffee',
|
'atom/browser/lib/objects-registry.coffee',
|
||||||
'atom/browser/lib/rpc-server.coffee',
|
'atom/browser/lib/rpc-server.coffee',
|
||||||
|
|
41
atom/browser/lib/chrome-extension.coffee
Normal file
41
atom/browser/lib/chrome-extension.coffee
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
app = require 'app'
|
||||||
|
fs = require 'fs'
|
||||||
|
path = require 'path'
|
||||||
|
url = require 'url'
|
||||||
|
|
||||||
|
# Mapping between hostname and file path.
|
||||||
|
hostPathMap = {}
|
||||||
|
hostPathMapNextKey = 0
|
||||||
|
|
||||||
|
getHostForPath = (path) ->
|
||||||
|
key = "#{++hostPathMapNextKey}"
|
||||||
|
hostPathMap[key] = path
|
||||||
|
key
|
||||||
|
|
||||||
|
getPathForHost = (host) ->
|
||||||
|
hostPathMap[host]
|
||||||
|
|
||||||
|
app.once 'ready', ->
|
||||||
|
protocol = require 'protocol'
|
||||||
|
BrowserWindow = require 'browser-window'
|
||||||
|
|
||||||
|
protocol.registerProtocol 'chrome-extension', (request) ->
|
||||||
|
parsed = url.parse request.url
|
||||||
|
return unless parsed.hostname and parsed.path?
|
||||||
|
|
||||||
|
directory = getPathForHost parsed.hostname
|
||||||
|
return new protocol.RequestFileJob(path.join(directory, parsed.path))
|
||||||
|
|
||||||
|
BrowserWindow::loadDevToolsExtension = (srcDirectory) ->
|
||||||
|
manifest = JSON.parse fs.readFileSync(path.join(srcDirectory, 'manifest.json'))
|
||||||
|
|
||||||
|
# We can not use 'file://' directly because all resources in the extension
|
||||||
|
# will be treated as relative to the root in Chrome.
|
||||||
|
page = url.format
|
||||||
|
protocol: 'chrome-extension'
|
||||||
|
slashes: true
|
||||||
|
hostname: getHostForPath srcDirectory
|
||||||
|
pathname: manifest.devtools_page
|
||||||
|
|
||||||
|
extensionInfo = startPage: page, name: manifest.name
|
||||||
|
@devToolsWebContents?.executeJavaScript "WebInspector.addExtensions([#{JSON.stringify(extensionInfo)}]);"
|
|
@ -52,6 +52,9 @@ setImmediate ->
|
||||||
detail: message
|
detail: message
|
||||||
buttons: ['OK']
|
buttons: ['OK']
|
||||||
|
|
||||||
|
# Load the chrome extension support.
|
||||||
|
require './chrome-extension.js'
|
||||||
|
|
||||||
# Load the RPC server.
|
# Load the RPC server.
|
||||||
require './rpc-server.js'
|
require './rpc-server.js'
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue