I recently ran into a problem with (I thought) mozRepl, which turned out to be a problem with a completely unrelated extension, r2d2b2g that was on my system.
So, for some reason, mozRepl wasn’t working and I couldn’t telnet into it (`telnet localhost 4242` should be all it takes). I was wondering why that could possibly be, stopping it, restarting, restarting firefox, trying again.
After I couldn’t figure out what I was doing wrong, I figured it might be Firefox that was going wrong, so I started firefox from a shell, and watched the output. Was pleased that the output I usually find annoying/useless was actually serving it’s perfectly, allowing me to get to the root of the problem, the errors posed by r2d2b2g:
console.error: r2d2b2g:
Message: TypeError: gcli.addCommand is not a function
Stack:
addCommand@resource://r2d2b2g-at-mozilla-dot-org/gcli/lib/gcli.js:19:3
@resource://r2d2b2g-at-mozilla-dot-org/r2d2b2g/lib/main.js:163:1
CuddlefishLoader/options<.load@resource://gre/modules/commonjs/sdk/loader/cuddlefish.js:129:18
run@resource://gre/modules/commonjs/sdk/addon/runner.js:138:19
startup/</<@resource://gre/modules/commonjs/sdk/addon/runner.js:81:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:865:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:744:7
*************************
A coding exception was thrown in a Promise resolution callback.
See https://developer.mozilla.org/Mozilla/JavaScript_code_modules/Promise.jsm/Promise
Full message: TypeError: gcli.addCommand is not a function
Full stack: addCommand@resource://r2d2b2g-at-mozilla-dot-org/gcli/lib/gcli.js:19:3
@resource://r2d2b2g-at-mozilla-dot-org/r2d2b2g/lib/main.js:163:1
CuddlefishLoader/options<.load@resource://gre/modules/commonjs/sdk/loader/cuddlefish.js:129:18
run@resource://gre/modules/commonjs/sdk/addon/runner.js:138:19
startup/</<@resource://gre/modules/commonjs/sdk/addon/runner.js:81:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:865:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:744:7
*************************
console.error: r2d2b2g:
Message: TypeError: gcli.addCommand is not a function
Stack:
addCommand@resource://r2d2b2g-at-mozilla-dot-org/gcli/lib/gcli.js:19:3
@resource://r2d2b2g-at-mozilla-dot-org/r2d2b2g/lib/main.js:163:1
CuddlefishLoader/options<.load@resource://gre/modules/commonjs/sdk/loader/cuddlefish.js:129:18
run@resource://gre/modules/commonjs/sdk/addon/runner.js:138:19
startup/</<@resource://gre/modules/commonjs/sdk/addon/runner.js:81:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:865:23
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:744:7
When I saw that combination of errors, I thought that mabye that error (while in an unrelated extension) was bringing down mozRepl. While Firefox probably shouldn’t be letting failures in one extension affect another, I don’t know that I’m ready to open that can of worms just yet.
After a little searching around (`cd ~/.mozilla && find . -name “gcli.js”`), I found the offending file:
~/.mozilla/firefox/
'use strict';
const { Cu } = require('chrome');
const { when: unload } = require('unload');
try {
// Starting with FF 23, gcli.jsm moved to another location
Cu.import("resource://gre/modules/devtools/gcli.jsm");
} catch(e) {
try {
Cu.import("resource:///modules/devtools/gcli.jsm");
} catch(e) {
console.error("Unable to load gcli.jsm");
}
}
function addCommand(cmd) {
let name = cmd.name;
//gcli.addCommand(cmd);
gcli.commands.add(cmd);
//unload(gcli.removeCommand.bind(gcli, name));
unload(gcli.commands.remove.bind(gcli, name));
}
exports.addCommand = addCommand;
exports.removeCommand = gcli.removeCommand;
The offending lines are commented out, and the lines I added (based on a quick internet search for the change to that interface) are below their respective lines, and working properly.
Just wanted to post this in case anyone else runs into it… I am running Firefox 34.0 and from what I know, the latest version of the FirefoxOS simulator and all other add-ons.