diff --git a/toolkit/components/addoncompat/RemoteAddonsChild.jsm b/toolkit/components/addoncompat/RemoteAddonsChild.jsm index ecce33c9237..bf135ab8ea2 100644 --- a/toolkit/components/addoncompat/RemoteAddonsChild.jsm +++ b/toolkit/components/addoncompat/RemoteAddonsChild.jsm @@ -203,11 +203,14 @@ let ContentPolicyChild = { // This is a shim channel whose only purpose is to return some string // data from an about: protocol handler. -function AboutProtocolChannel(uri, contractID) +function AboutProtocolChannel(uri, contractID, loadInfo) { this.URI = uri; this.originalURI = uri; this._contractID = contractID; + this._loadingPrincipal = loadInfo.loadingPrincipal; + this._securityFlags = loadInfo.securityFlags; + this._contentPolicyType = loadInfo.contentPolicyType; } AboutProtocolChannel.prototype = { @@ -227,7 +230,10 @@ AboutProtocolChannel.prototype = { .getService(Ci.nsISyncMessageSender); let rval = cpmm.sendRpcMessage("Addons:AboutProtocol:OpenChannel", { uri: this.URI.spec, - contractID: this._contractID + contractID: this._contractID, + loadingPrincipal: this._loadingPrincipal, + securityFlags: this._securityFlags, + contentPolicyType: this._contentPolicyType }, { notificationCallbacks: this.notificationCallbacks, loadGroupNotificationCallbacks: this.loadGroup ? this.loadGroup.notificationCallbacks : null, @@ -327,8 +333,8 @@ AboutProtocolInstance.prototype = { // available to CPOWs. Consequently, we return a shim channel that, // when opened, asks the parent to open the channel and read out all // the data. - newChannel: function(uri) { - return new AboutProtocolChannel(uri, this._contractID); + newChannel: function(uri, loadInfo) { + return new AboutProtocolChannel(uri, this._contractID, loadInfo); }, QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory, Ci.nsIAboutModule]) diff --git a/toolkit/components/addoncompat/RemoteAddonsParent.jsm b/toolkit/components/addoncompat/RemoteAddonsParent.jsm index 95f9f729d77..e60a16a01af 100644 --- a/toolkit/components/addoncompat/RemoteAddonsParent.jsm +++ b/toolkit/components/addoncompat/RemoteAddonsParent.jsm @@ -248,9 +248,19 @@ let AboutProtocolParent = { let uri = BrowserUtils.makeURI(msg.data.uri); let contractID = msg.data.contractID; - let module = Cc[contractID].getService(Ci.nsIAboutModule); + let loadingPrincipal = msg.data.loadingPrincipal; + let securityFlags = msg.data.securityFlags; + let contentPolicyType = msg.data.contentPolicyType; try { - let channel = module.newChannel(uri, null); + let channel = NetUtil.newChannel2(uri, + null, + null, + null, // aLoadingNode + loadingPrincipal, + null, // aTriggeringPrincipal + securityFlags, + contentPolicyType); + // We're not allowed to set channel.notificationCallbacks to a // CPOW, since the setter for notificationCallbacks is in C++, // which can't tolerate CPOWs. Instead we just use a JS object diff --git a/toolkit/components/passwordmgr/test/test_bug_627616.html b/toolkit/components/passwordmgr/test/test_bug_627616.html index 738a6341dc3..7a25cf653d2 100644 --- a/toolkit/components/passwordmgr/test/test_bug_627616.html +++ b/toolkit/components/passwordmgr/test/test_bug_627616.html @@ -11,6 +11,8 @@ SimpleTest.waitForExplicitFinish(); var Cc = SpecialPowers.Cc; + var Ci = SpecialPowers.Ci; + var systemPrincipal = SpecialPowers.Services.scriptSecurityManager.getSystemPrincipal(); testNum = 1; @@ -35,7 +37,14 @@ var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var pps = Cc["@mozilla.org/network/protocol-proxy-service;1"].getService(); - var channel = ios.newChannel("http://example.com", null, null); + var channel = ios.newChannel2("http://example.com", + null, + null, + null, // aLoadingNode + systemPrincipal, + null, // aTriggeringPrincipal + Ci.nsILoadInfo.SEC_NORMAL, + Ci.nsIContentPolicy.TYPE_OTHER); pps.asyncResolve(channel, 0, resolveCallback); } diff --git a/toolkit/components/passwordmgr/test/test_prompt.html b/toolkit/components/passwordmgr/test/test_prompt.html index 4fa2da52dad..785c69b7717 100644 --- a/toolkit/components/passwordmgr/test/test_prompt.html +++ b/toolkit/components/passwordmgr/test/test_prompt.html @@ -26,6 +26,7 @@ var tmplogin, login1, login2A, login2B, login2C, login2D, login2E, login3A, logi var mozproxy, proxiedHost = "http://mochi.test:8888"; var proxyChannel; var testNum = 1; +var systemPrincipal = SpecialPowers.Services.scriptSecurityManager.getSystemPrincipal(); function initLogins(pi) { observerService = Cc["@mozilla.org/observer-service;1"]. @@ -163,8 +164,7 @@ var resolveCallback = SpecialPowers.wrapCallbackObject({ null, null, null, // aLoadingNode - SpecialPowers.Services. - scriptSecurityManager.getSystemPrincipal(), + systemPrincipal, null, // aTriggeringPrincipal Ci.nsILoadInfo.SEC_NORMAL, Ci.nsIContentPolicy.TYPE_OTHER); @@ -179,7 +179,14 @@ function startup() { var pps = SpecialPowers.Cc["@mozilla.org/network/protocol-proxy-service;1"].getService(); - var channel = ios.newChannel("http://example.com", null, null); + var channel = ios.newChannel2("http://example.com", + null, + null, + null, // aLoadingNode + systemPrincipal, + null, // aTriggeringPrincipal + Ci.nsILoadInfo.SEC_NORMAL, + Ci.nsIContentPolicy.TYPE_OTHER); pps.asyncResolve(channel, 0, resolveCallback); } diff --git a/toolkit/components/passwordmgr/test/test_prompt_async.html b/toolkit/components/passwordmgr/test/test_prompt_async.html index 7d7223efc6b..44eb9db5c59 100644 --- a/toolkit/components/passwordmgr/test/test_prompt_async.html +++ b/toolkit/components/passwordmgr/test/test_prompt_async.html @@ -146,7 +146,17 @@ var pps = SpecialPowers.Cc["@mozilla.org/network/protocol-proxy-service;1"] .getService(); - var channel = ios.newChannel("http://example.com", null, null); + var systemPrincipal = SpecialPowers.Services.scriptSecurityManager + .getSystemPrincipal(); + + var channel = ios.newChannel2("http://example.com", + null, + null, + null, // aLoadingNode + systemPrincipal, + null, // aTriggeringPrincipal + Ci.nsILoadInfo.SEC_NORMAL, + Ci.nsIContentPolicy.TYPE_OTHER); pps.asyncResolve(channel, 0, resolveCallback); }