I am trying to install hotmail for my mailto handlers:

This is done using this code from a webpage area:
navigator.registerProtocolHandler('mailto','http://mail.live.com/secure/start?action=compose&to=%s','Live Mail');
From XPCOM we will have to use this: MXR :: WebContentConverter.js # 369) .
So, from the search for the github code, I understand that you are importing it as follows:
var nsiwchr = Cc["@mozilla.org/embeddor.implemented/web-content-handler-registrar;1"].getService(Ci.nsIWebContentHandlerRegistrar);
So I would register it like this:
nsiwchr.registerProtocolHandler('mailto','http://mail.live.com/secure/start?action=compose&to=%s','Live Mail', null);
I use null because I don't have contentWindow , but apparently you cannot pass null for this. Because:
http://mxr.mozilla.org/mozilla-release/source/browser/components/feeds/src/WebContentConverter.js#372
var uri = this._checkAndGetURI(aURIString, aContentWindow);
And then he checks:
aContentWindow.location.hostname != uri.host)
So, I decided to fake it as follows:
var fakeContentWindow = { document: { baseURIObject: { asciiHost:"mail.live.com", asciiSpec:"http://mail.live.com/secure", hasRef:true, host:"mail.live.com", hostPort:"mail.live.com", originCharset:"UTF-8", password:"", path:"/secure", port:-1, prePath:"http://mail.live.com", ref:"", //369 scheme:"http", spec:"http://mail.live.com/secure", specIgnoringRef:"http://mail.live.com", userPass:"", username:"" } }, location: { hash:"", //#369 host:"mail.live.com", hostname:"mail.live.com", href:"http://mail.live.com/secure", origin:"http://mxr.mozilla.org", pathname:"/secure", port:"", protocol:"http:", search:"" } }; nsiwchr.registerProtocolHandler('mailto','http://mail.live.com/secure/start?action=compose&to=%s','Live Mail', fakeContentWindow);
but it causes some completely strange error:
/ * Exception: [XPCWrappedNative_NoHelper object] * / Browser console:
"[object XPCWrappedNative_NoHelper]" scratchpad.js:999 SP_writeAsErrorComment/<() scratchpad.js:999 Handler.prototype.process() Promise-backend.js:863 this.PromiseWalker.walkerLoop() Promise-backend.js:742
It does not make sense. I want to successfully trick this without using real contentWindow .