Bug 1420982 - Fix for copy as cURL ignoring PATCH data. r=Honza draft
authorabhinav <abhinav.koppula@gmail.com>
Fri, 22 Dec 2017 00:41:50 +0530
changeset 716258 49aced8366e742320a87834acf0a7ab50c789fd7
parent 715663 f78a83244fbebe8a469ae3512fce7f638cab7e1f
child 744989 aa6677a3f90614022360d075685c420c98bb0174
push id94380
push userbmo:abhinav.koppula@gmail.com
push dateFri, 05 Jan 2018 11:48:37 +0000
reviewersHonza
bugs1420982
milestone59.0a1
Bug 1420982 - Fix for copy as cURL ignoring PATCH data. r=Honza MozReview-Commit-ID: 8GDV8ykAIsH
devtools/client/netmonitor/test/browser_net_curl-utils.js
devtools/client/netmonitor/test/html_curl-utils.html
devtools/client/shared/curl.js
--- a/devtools/client/netmonitor/test/browser_net_curl-utils.js
+++ b/devtools/client/netmonitor/test/browser_net_curl-utils.js
@@ -20,38 +20,43 @@ add_task(function* () {
   } = windowRequire("devtools/client/netmonitor/src/selectors/index");
   let {
     getLongString,
     requestData,
   } = connector;
 
   store.dispatch(Actions.batchEnable(false));
 
-  let wait = waitForNetworkEvents(monitor, 4);
+  let wait = waitForNetworkEvents(monitor, 5);
   yield ContentTask.spawn(tab.linkedBrowser, SIMPLE_SJS, function* (url) {
     content.wrappedJSObject.performRequests(url);
   });
   yield wait;
 
   let requests = {
     get: getSortedRequests(store.getState()).get(0),
     post: getSortedRequests(store.getState()).get(1),
-    multipart: getSortedRequests(store.getState()).get(2),
-    multipartForm: getSortedRequests(store.getState()).get(3),
+    patch: getSortedRequests(store.getState()).get(2),
+    multipart: getSortedRequests(store.getState()).get(3),
+    multipartForm: getSortedRequests(store.getState()).get(4),
   };
 
   let data = yield createCurlData(requests.get, getLongString, requestData);
   testFindHeader(data);
 
   data = yield createCurlData(requests.post, getLongString, requestData);
   testIsUrlEncodedRequest(data);
   testWritePostDataTextParams(data);
   testWriteEmptyPostDataTextParams(data);
   testDataArgumentOnGeneratedCommand(data);
 
+  data = yield createCurlData(requests.patch, getLongString, requestData);
+  testWritePostDataTextParams(data);
+  testDataArgumentOnGeneratedCommand(data);
+
   data = yield createCurlData(requests.multipart, getLongString, requestData);
   testIsMultipartRequest(data);
   testGetMultipartBoundary(data);
   testMultiPartHeaders(data);
   testRemoveBinaryDataFromMultipartText(data);
 
   data = yield createCurlData(requests.multipartForm, getLongString, requestData);
   testMultiPartHeaders(data);
--- a/devtools/client/netmonitor/test/html_curl-utils.html
+++ b/devtools/client/netmonitor/test/html_curl-utils.html
@@ -25,16 +25,17 @@
       <input type="text" name="param2" value="value2"/>
       <input type="text" name="param3" value="value3"/>
       <input type="submit"/>
     </form>
     <iframe name="target"></iframe>
 
     <script type="text/javascript">
       /* exported performRequests */
+      /* eslint-disable max-nested-callbacks */
       "use strict";
 
       function ajaxGet(url, callback) {
         let xhr = new XMLHttpRequest();
         xhr.open("GET", url + "?param1=value1&param2=value2&param3=value3", true);
         xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
         xhr.onload = function () {
           callback();
@@ -49,16 +50,27 @@
         xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
         xhr.onload = function () {
           callback();
         };
         const params = "param1=value1&param2=value2&param3=value3";
         xhr.send(params);
       }
 
+      function ajaxPatch(url, callback) {
+        let xhr = new XMLHttpRequest();
+        xhr.open("PATCH", url, true);
+        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+        xhr.onload = function () {
+          callback();
+        };
+        const params = "param1=value1&param2=value2&param3=value3";
+        xhr.send(params);
+      }
+
       function ajaxMultipart(url, callback) {
         let xhr = new XMLHttpRequest();
         xhr.open("POST", url, true);
         xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
         xhr.onload = function () {
           callback();
         };
 
@@ -85,18 +97,20 @@
         ctx.fillRect(0, 0, 100, 100);
         ctx.clearRect(20, 20, 60, 60);
         ctx.strokeRect(25, 25, 50, 50);
       }
 
       function performRequests(url) {
         ajaxGet(url, () => {
           ajaxPost(url, () => {
-            ajaxMultipart(url, () => {
-              submitForm();
+            ajaxPatch(url, () => {
+              ajaxMultipart(url, () => {
+                submitForm();
+              });
             });
           });
         });
       }
 
       initCanvas();
     </script>
   </body>
--- a/devtools/client/shared/curl.js
+++ b/devtools/client/shared/curl.js
@@ -70,17 +70,17 @@ const Curl = {
     command.push(escapeString(data.url));
 
     let postDataText = null;
     let multipartRequest = utils.isMultipartRequest(data);
 
     // Create post data.
     let postData = [];
     if (utils.isUrlEncodedRequest(data) ||
-          ["PUT", "POST"].includes(data.method)) {
+          ["PUT", "POST", "PATCH"].includes(data.method)) {
       postDataText = data.postDataText;
       postData.push("--data");
       postData.push(escapeString(utils.writePostDataTextParams(postDataText)));
       ignoredHeaders.add("content-length");
     } else if (multipartRequest) {
       postDataText = data.postDataText;
       postData.push("--data-binary");
       let boundary = utils.getMultipartBoundary(data);