Bug 1201979 - Support requestBody in onBeforeRequest, use boundary from header if ever possible, non-release builds only. r?kmag draft
authorGiorgio Maone <g.maone@informaction.com>
Tue, 26 Jul 2016 22:04:25 +0200
changeset 393042 fccbdad1b21656d8302dbed5a7fbf122fe8b41f0
parent 393038 d279f88999f7e22cf062ac4468de257b47f65788
child 526471 2c84cba51442c16a55751c07961fc20a51ff4c17
push id24190
push userg.maone@informaction.com
push dateTue, 26 Jul 2016 20:34:38 +0000
reviewerskmag
bugs1201979
milestone50.0a1
Bug 1201979 - Support requestBody in onBeforeRequest, use boundary from header if ever possible, non-release builds only. r?kmag MozReview-Commit-ID: AadoVKNWUVc
toolkit/components/extensions/ext-webRequest.js
toolkit/components/extensions/test/mochitest/test_ext_webrequest.html
toolkit/modules/addons/WebRequest.jsm
--- 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 {