Add chrome-extension protocol for loading devtools extensions.

This commit is contained in:
Cheng Zhao 2014-08-27 16:01:15 +08:00
parent 1533600720
commit cd40bdbec8
3 changed files with 45 additions and 0 deletions

View file

@ -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',

View 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)}]);"

View file

@ -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'