Bug 1305162: Part 1b - Properly serialize nsIMIMEInputStream in RemoteWebNavigation. r=dragana
MozReview-Commit-ID: 6PePVAEL1Px
--- a/toolkit/components/remotebrowserutils/RemoteWebNavigation.js
+++ b/toolkit/components/remotebrowserutils/RemoteWebNavigation.js
@@ -12,19 +12,30 @@ XPCOMUtils.defineLazyModuleGetter(this,
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
"resource://gre/modules/NetUtil.jsm");
function makeURI(url)
{
return Services.io.newURI(url, null, null);
}
-function readInputStreamToString(aStream)
+function serializeInputStream(aStream)
{
- return NetUtil.readInputStreamToString(aStream, aStream.available());
+ let data = {
+ content: NetUtil.readInputStreamToString(aStream, aStream.available()),
+ };
+
+ if (aStream instanceof Ci.nsIMIMEInputStream) {
+ data.headers = new Map();
+ aStream.visitHeaders((name, value) => {
+ data.headers.set(name, value);
+ });
+ }
+
+ return data;
}
function RemoteWebNavigation()
{
this.wrappedJSObject = this;
}
RemoteWebNavigation.prototype = {
@@ -77,18 +88,18 @@ RemoteWebNavigation.prototype = {
},
loadURIWithOptions: function(aURI, aLoadFlags, aReferrer, aReferrerPolicy,
aPostData, aHeaders, aBaseURI) {
this._sendMessage("WebNavigation:LoadURI", {
uri: aURI,
flags: aLoadFlags,
referrer: aReferrer ? aReferrer.spec : null,
referrerPolicy: aReferrerPolicy,
- postData: aPostData ? readInputStreamToString(aPostData) : null,
- headers: aHeaders ? readInputStreamToString(aHeaders) : null,
+ postData: aPostData ? serializeInputStream(aPostData) : null,
+ headers: aHeaders ? serializeInputStream(aHeaders) : null,
baseURI: aBaseURI ? aBaseURI.spec : null,
});
},
setOriginAttributesBeforeLoading: function(aOriginAttributes) {
this._sendMessage("WebNavigation:SetOriginAttributes", {
originAttributes: aOriginAttributes,
});
},
--- a/toolkit/content/browser-child.js
+++ b/toolkit/content/browser-child.js
@@ -18,20 +18,32 @@ XPCOMUtils.defineLazyModuleGetter(this,
"resource://gre/modules/PageThumbUtils.jsm");
if (AppConstants.MOZ_CRASHREPORTER) {
XPCOMUtils.defineLazyServiceGetter(this, "CrashReporter",
"@mozilla.org/xre/app-info;1",
"nsICrashReporter");
}
-function makeInputStream(aString) {
+function makeInputStream(data) {
let stream = Cc["@mozilla.org/io/string-input-stream;1"].
createInstance(Ci.nsISupportsCString);
- stream.data = aString;
+ stream.data = data.content;
+
+ if (data.headers) {
+ let mimeStream = Cc["@mozilla.org/network/mime-input-stream;1"]
+ .createInstance(Ci.nsIMIMEInputStream);
+
+ mimeStream.setData(stream);
+ for (let [name, value] of data.headers) {
+ mimeStream.addHeader(name, value);
+ }
+ return mimeStream;
+ }
+
return stream; // XPConnect will QI this to nsIInputStream for us.
}
var WebProgressListener = {
init: function() {
this._filter = Cc["@mozilla.org/appshell/component/browser-status-filter;1"]
.createInstance(Ci.nsIWebProgress);
this._filter.addProgressListener(this, Ci.nsIWebProgress.NOTIFY_ALL);