1 # This file loads the user config file: config.js and frame.js.
3 createConfigAPI = require('./api')
4 messageManager = require('./message-manager')
5 utils = require('./utils')
6 prefs = require('./prefs')
8 {OS} = Components.utils.import('resource://gre/modules/osfile.jsm', {})
10 load = (vimfx, options = null, callback = ->) ->
11 configDir = vimfx.options.config_file_directory
17 scope = {vimfx: createConfigAPI(vimfx, options)}
19 # Calling `vimfx.createKeyTrees()` after each `vimfx.set()` that modifies a
20 # shortcut is absolutely redundant and may make Firefox start slower. Do it
22 vimfx.skipCreateKeyTrees = true
23 error = loadFile(configDir, 'config.js', scope)
24 vimfx.skipCreateKeyTrees = false
25 vimfx.createKeyTrees()
31 messageManager.send('loadConfig', null, callback)
33 checkSandbox = (expandedDir) ->
34 prefix = 'security.sandbox.content'
35 if prefs.root.get("#{prefix}.level") > 2
38 if Services.appinfo.OS == 'Darwin'
40 prefs.root.get("#{prefix}.mac.testing_read_path1"),
41 prefs.root.get("#{prefix}.mac.testing_read_path2")
44 whitelisted = prefs.root.get("#{prefix}.read_path_whitelist").split(',')
45 return not whitelisted.some((e) -> e.startsWith(expandedDir))
47 loadFile = (dir, file, scope) ->
48 expandedDir = utils.expandPath(dir)
49 uri = OS.Path.toFileURI(OS.Path.join(expandedDir, file))
51 Services.scriptloader.loadSubScriptWithOptions(uri, {
52 target: Object.assign({
53 __dirname: OS.Path.toFileURI(expandedDir)
60 # in e10s Firefox / Firefox Quantum the content process sandbox might
61 # prevent us from accessing frame.js. The error message is incomprehensible
62 # without explanation.
63 if typeof error == 'string' and
64 error.startsWith('Error opening input stream (invalid filename?)') and
65 checkSandbox(expandedDir)
66 console.error("VimFx: Error loading #{file} likely due to e10s sandbox")
67 console.info("Please consult VimFx' documentation on config files.")
69 console.error("VimFx: Error loading #{file}", uri, error)