Bug 1174095 - Do not add 'postData' to HAR requests if there isn't any posted data r?honza draft
authorXavier ALT <dex@phoenix-ind.net>
Sat, 19 Aug 2017 00:05:57 +0200
changeset 652418 67fa188da3eb13638030afd24624402d39d74178
parent 652136 892c8916ba32b7733e06bfbfdd4083ffae3ca028
child 728082 e1d5195aa91b0b8818f97633d19877a981c04107
push id76049
push userbmo:dex@phoenix-ind.net
push dateThu, 24 Aug 2017 20:02:32 +0000
reviewershonza
bugs1174095
milestone57.0a1
Bug 1174095 - Do not add 'postData' to HAR requests if there isn't any posted data r?honza MozReview-Commit-ID: GNySOInGDVz
devtools/client/netmonitor/src/har/har-builder.js
devtools/client/netmonitor/src/har/test/browser.ini
devtools/client/netmonitor/src/har/test/browser_net_har_post_data_on_get.js
devtools/client/netmonitor/src/har/test/html_har_post-data-test-page.html
--- a/devtools/client/netmonitor/src/har/har-builder.js
+++ b/devtools/client/netmonitor/src/har/har-builder.js
@@ -160,17 +160,19 @@ HarBuilder.prototype = {
     request.httpVersion = file.httpVersion || "";
 
     request.headers = this.buildHeaders(file.requestHeaders);
     request.headers = this.appendHeadersPostData(request.headers, file);
     request.cookies = this.buildCookies(file.requestCookies);
 
     request.queryString = parseQueryString(getUrlQuery(file.url)) || [];
 
-    request.postData = this.buildPostData(file);
+    if (file.requestPostData) {
+      request.postData = this.buildPostData(file);
+    }
 
     request.headersSize = file.requestHeaders.headersSize;
 
     // Set request body size, but make sure the body is fetched
     // from the backend.
     if (file.requestPostData) {
       this.fetchData(file.requestPostData.postData.text).then(value => {
         request.bodySize = value.length;
--- a/devtools/client/netmonitor/src/har/test/browser.ini
+++ b/devtools/client/netmonitor/src/har/test/browser.ini
@@ -6,8 +6,9 @@ support-files =
   head.js
   html_har_post-data-test-page.html
   !/devtools/client/netmonitor/test/head.js
   !/devtools/client/netmonitor/test/html_simple-test-page.html
 
 [browser_net_har_copy_all_as_har.js]
 [browser_net_har_post_data.js]
 [browser_net_har_throttle_upload.js]
+[browser_net_har_post_data_on_get.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/src/har/test/browser_net_har_post_data_on_get.js
@@ -0,0 +1,45 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests for exporting POST data into HAR format.
+ */
+add_task(function* () {
+  let { tab, monitor } = yield initNetMonitor(
+    HAR_EXAMPLE_URL + "html_har_post-data-test-page.html");
+
+  info("Starting test... ");
+
+  let { store, windowRequire } = monitor.panelWin;
+  let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
+  let RequestListContextMenu = windowRequire(
+    "devtools/client/netmonitor/src/request-list-context-menu");
+
+  store.dispatch(Actions.batchEnable(false));
+
+  // Execute one GET request on the page and wait till its done.
+  let wait = waitForNetworkEvents(monitor, 1);
+  yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
+    content.wrappedJSObject.executeTest3();
+  });
+  yield wait;
+
+  // Copy HAR into the clipboard (asynchronous).
+  let contextMenu = new RequestListContextMenu({});
+  let jsonString = yield contextMenu.copyAllAsHar();
+  let har = JSON.parse(jsonString);
+
+  // Check out the HAR log.
+  isnot(har.log, null, "The HAR log must exist");
+  is(har.log.pages.length, 1, "There must be one page");
+  is(har.log.entries.length, 1, "There must be one request");
+
+  let entry = har.log.entries[0];
+  is(entry.request.postData, undefined,
+    "Check post data is not present");
+
+  // Clean up
+  return teardown(monitor);
+});
--- a/devtools/client/netmonitor/src/har/test/html_har_post-data-test-page.html
+++ b/devtools/client/netmonitor/src/har/test/html_har_post-data-test-page.html
@@ -11,33 +11,45 @@
     <meta http-equiv="Expires" content="0" />
     <title>Network Monitor Test Page</title>
   </head>
 
   <body>
     <p>HAR POST data test</p>
 
     <script type="text/javascript">
-      /* exported executeTest, executeTest2 */
+      /* exported executeTest, executeTest2, executeTest3 */
       "use strict";
 
       function post(address, data) {
         let xhr = new XMLHttpRequest();
         xhr.open("POST", address, true);
         xhr.setRequestHeader("Content-Type", "application/json");
         xhr.send(data);
       }
 
+      function get(address) {
+        let xhr = new XMLHttpRequest();
+        xhr.open("GET", address);
+        xhr.send();
+      }
+
       function executeTest() {
         const url = "html_har_post-data-test-page.html";
         const data = "{'first': 'John', 'last': 'Doe'}";
         post(url, data);
       }
 
       function executeTest2(size) {
         const url = "html_har_post-data-test-page.html";
         const data = "x".repeat(size);
         post(url, data);
       }
+
+      function executeTest3(size) {
+        const url = "html_har_post-data-test-page.html";
+        get(url);
+      }
+
     </script>
   </body>
 
 </html>