'atom/browser/api/lib/protocol.coffee',
'atom/browser/api/lib/tray.coffee',
'atom/browser/api/lib/web-contents.coffee',
+ 'atom/browser/lib/chrome-extension.coffee',
'atom/browser/lib/init.coffee',
'atom/browser/lib/objects-registry.coffee',
'atom/browser/lib/rpc-server.coffee',
--- /dev/null
+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)}]);"