Bug 1269468 - onRequestPostData returns requestPostData not whole payload; r=Honza draft
authorTom Glowka <glowka.tom@gmail.com>
Wed, 14 Mar 2018 23:25:12 +0100
changeset 770505 e398cf76137bc5009ed1614a9cc97d0c4edfa67f
parent 770504 5cd3f175501dd0e3239e6f689dada1da99f2a8a2
push id103418
push userbmo:glowka.tom@gmail.com
push dateWed, 21 Mar 2018 12:30:12 +0000
reviewersHonza
bugs1269468
milestone61.0a1
Bug 1269468 - onRequestPostData returns requestPostData not whole payload; r=Honza For the sake of coherence with the rest of FirefoxDataProvider interface, to avoid future bugs like the one this commit refers to. MozReview-Commit-ID: EX8JQvoIeTb
devtools/client/netmonitor/src/connector/firefox-data-provider.js
devtools/client/netmonitor/src/har/har-builder.js
devtools/client/netmonitor/src/utils/request-utils.js
devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
devtools/client/netmonitor/test/browser_net_curl-utils.js
--- a/devtools/client/netmonitor/src/connector/firefox-data-provider.js
+++ b/devtools/client/netmonitor/src/connector/firefox-data-provider.js
@@ -179,18 +179,20 @@ class FirefoxDataProvider {
 
       // Calculate total header size and don't forget to include
       // two new-line characters at the end.
       const headersSize = headers.reduce((acc, { name, value }) => {
         return acc + name.length + value.length + 2;
       }, 0);
 
       requestPostData.postData.text = postData;
-      payload.requestPostData = Object.assign({}, requestPostData);
-      payload.requestHeadersFromUploadStream = { headers, headersSize };
+      payload.requestPostData = {
+        ...requestPostData,
+        uploadHeaders: { headers, headersSize }
+      };
     }
     return payload;
   }
 
   async fetchRequestCookies(requestCookies) {
     let payload = {};
     if (requestCookies) {
       let reqCookies = [];
@@ -535,17 +537,17 @@ class FirefoxDataProvider {
    *
    * @param {object} response the message received from the server.
    */
   async onRequestPostData(response) {
     let payload = await this.updateRequest(response.from, {
       requestPostData: response
     });
     emit(EVENTS.RECEIVED_REQUEST_POST_DATA, response.from);
-    return payload;
+    return payload.requestPostData;
   }
 
   /**
    * Handles additional information received for a "securityInfo" packet.
    *
    * @param {object} response the message received from the server.
    */
   async onSecurityInfo(response) {
--- a/devtools/client/netmonitor/src/har/har-builder.js
+++ b/devtools/client/netmonitor/src/har/har-builder.js
@@ -263,19 +263,18 @@ HarBuilder.prototype = {
     // When using HarAutomation, HarCollector will automatically fetch requestPostData
     // and requestHeaders, but when we use it from netmonitor, FirefoxDataProvider
     // should fetch it itself lazily, via requestData.
     let requestPostData = file.requestPostData;
     let requestHeaders = file.requestHeaders;
     let requestHeadersFromUploadStream;
 
     if (!requestPostData && this._options.requestData) {
-      let payload = await this._options.requestData(file.id, "requestPostData");
-      requestPostData = payload.requestPostData;
-      requestHeadersFromUploadStream = payload.requestHeadersFromUploadStream;
+      requestPostData = await this._options.requestData(file.id, "requestPostData");
+      requestHeadersFromUploadStream = requestPostData.uploadHeaders;
     }
 
     if (!requestPostData.postData.text) {
       return undefined;
     }
 
     if (!requestHeaders && this._options.requestData) {
       requestHeaders = await this._options.requestData(file.id, "requestHeaders");
--- a/devtools/client/netmonitor/src/utils/request-utils.js
+++ b/devtools/client/netmonitor/src/utils/request-utils.js
@@ -436,17 +436,17 @@ async function updateFormDataSections(pr
     requestPostDataAvailable,
   } = request;
 
   if (requestHeadersAvailable && !requestHeaders) {
     requestHeaders = await connector.requestData(id, "requestHeaders");
   }
 
   if (requestPostDataAvailable && !requestPostData) {
-    ({ requestPostData } = await connector.requestData(id, "requestPostData"));
+    requestPostData = await connector.requestData(id, "requestPostData");
   }
 
   if (!formDataSections && requestHeaders && requestPostData &&
       requestHeadersFromUploadStream) {
     formDataSections = await getFormDataSections(
       requestHeaders,
       requestHeadersFromUploadStream,
       requestPostData,
@@ -471,20 +471,17 @@ function processNetworkUpdates(request =
       switch (key) {
         case "securityInfo":
           result.securityState = value.state;
           break;
         case "totalTime":
           result.totalTime = request.totalTime;
           break;
         case "requestPostData":
-          result.requestHeadersFromUploadStream = {
-            headers: [],
-            headersSize: 0,
-          };
+          result.requestHeadersFromUploadStream = value.uploadHeaders;
           break;
       }
     }
   }
   return result;
 }
 
 module.exports = {
--- a/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
+++ b/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
@@ -284,17 +284,17 @@ class RequestListContextMenu {
 
     let string = params
       .map(param => param.name + (param.value ? "=" + param.value : ""))
       .join(Services.appinfo.OS === "WINNT" ? "\r\n" : "\n");
 
     // Fall back to raw payload.
     if (!string) {
       requestPostData = requestPostData ||
-        (await this.props.connector.requestData(id, "requestPostData")).requestPostData;
+        await this.props.connector.requestData(id, "requestPostData");
 
       string = requestPostData.postData.text;
       if (Services.appinfo.OS !== "WINNT") {
         string = string.replace(/\r/g, "");
       }
     }
     copyString(string);
   }
@@ -302,17 +302,17 @@ class RequestListContextMenu {
   /**
    * Copy a cURL command from the currently selected item.
    */
   async copyAsCurl(id, url, method, httpVersion, requestHeaders, requestPostData) {
     requestHeaders = requestHeaders ||
       await this.props.connector.requestData(id, "requestHeaders");
 
     requestPostData = requestPostData ||
-      (await this.props.connector.requestData(id, "requestPostData")).requestPostData;
+      await this.props.connector.requestData(id, "requestPostData");
 
     // Create a sanitized object for the Curl command generator.
     let data = {
       url,
       method,
       headers: requestHeaders.headers,
       httpVersion,
       postDataText: requestPostData ? requestPostData.postData.text : "",
--- a/devtools/client/netmonitor/test/browser_net_curl-utils.js
+++ b/devtools/client/netmonitor/test/browser_net_curl-utils.js
@@ -253,17 +253,17 @@ async function createCurlData(selected, 
 
   let requestHeaders = await requestData(id, "requestHeaders");
   // Fetch header values.
   for (let { name, value } of requestHeaders.headers) {
     let text = await getLongString(value);
     data.headers.push({ name: name, value: text });
   }
 
-  let { requestPostData } = await requestData(id, "requestPostData");
+  let requestPostData = await requestData(id, "requestPostData");
   // Fetch the request payload.
   if (requestPostData) {
     let postData = requestPostData.postData.text;
     data.postDataText = await getLongString(postData);
   }
 
   return data;
 }