Bug 1201979 - Support requestBody in onBeforeRequest, use boundary from header if ever possible, non-release builds only. r?kmag
MozReview-Commit-ID: AadoVKNWUVc
--- a/toolkit/components/extensions/ext-webRequest.js
+++ b/toolkit/components/extensions/ext-webRequest.js
@@ -48,17 +48,18 @@ function WebRequestEventManager(context,
// Fills in tabId typically.
let result = {};
extensions.emit("fill-browser-data", data.browser, data2, result);
if (result.cancel) {
return;
}
- let optional = ["requestHeaders", "responseHeaders", "statusCode", "statusLine", "error", "redirectUrl"];
+ let optional = ["requestHeaders", "responseHeaders", "statusCode", "statusLine", "error", "redirectUrl",
+ "_requestBodyUnsupported"];
for (let opt of optional) {
if (opt in data) {
data2[opt] = data[opt];
}
}
if (data.requestBodyGetter) {
XPCOMUtils.defineLazyGetter(data2, "requestBody", data.requestBodyGetter);
--- a/toolkit/components/extensions/test/mochitest/test_ext_webrequest.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest.html
@@ -316,17 +316,17 @@ function backgroundScript() {
return {cancel: true};
}
return {};
}
function onUpload(details) {
let url = new URL(details.url);
let upload = url.searchParams.get("upload");
- if (!upload) {
+ if (!upload || details._requestBodyUnsupported) {
return;
}
let requestBody = details.requestBody;
browser.test.log(`onUpload ${details.url} ${JSON.stringify(details.requestBody)}`);
browser.test.assertTrue(!!requestBody, `Intercepted upload ${details.url} #${details.requestId} ${upload} have a requestBody`);
if (!requestBody) {
return;
}
--- a/toolkit/modules/addons/WebRequest.jsm
+++ b/toolkit/modules/addons/WebRequest.jsm
@@ -19,16 +19,18 @@ Cu.import("resource://gre/modules/XPCOMU
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils",
"resource://gre/modules/BrowserUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "WebRequestCommon",
"resource://gre/modules/WebRequestCommon.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "WebRequestUpload",
"resource://gre/modules/WebRequestUpload.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
+ "resource://gre/modules/AppConstants.jsm");
function attachToChannel(channel, key, data) {
if (channel instanceof Ci.nsIWritablePropertyBag2) {
let wrapper = {wrappedJSObject: data};
channel.setPropertyAsInterface(key, wrapper);
}
return data;
}
@@ -566,23 +568,27 @@ HttpObserverManager = {
if (opts.requestHeaders) {
data.requestHeaders = this.getHeaders(channel, "visitRequestHeaders", kind);
requestHeaderNames = data.requestHeaders.map(h => h.name);
}
if (opts.responseHeaders) {
data.responseHeaders = this.getHeaders(channel, "visitResponseHeaders", kind);
responseHeaderNames = data.responseHeaders.map(h => h.name);
}
- if (opts.requestBody) {
- if (requestBodyGetter === undefined) {
- requestBodyGetter = WebRequestUpload.createGetter(channel);
- }
- if (requestBodyGetter) {
- XPCOMUtils.defineLazyGetter(data, "requestBody", requestBodyGetter);
- data.requestBodyGetter = requestBodyGetter;
+ if (opts.requestBody && !AppConstants.RELEASE_BUILD) {
+ if (AppConstants.RELEASE_BUILD) {
+ data._requestBodyUnsupported = true;
+ } else {
+ if (requestBodyGetter === undefined) {
+ requestBodyGetter = WebRequestUpload.createGetter(channel);
+ }
+ if (requestBodyGetter) {
+ XPCOMUtils.defineLazyGetter(data, "requestBody", requestBodyGetter);
+ data.requestBodyGetter = requestBodyGetter;
+ }
}
}
if (includeStatus) {
mergeStatus(data, channel, kind);
}
let result = null;
try {