Bug 1420982 - Fix for copy as cURL ignoring PATCH data. r=Honza
MozReview-Commit-ID: 8GDV8ykAIsH
--- 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¶m2=value2¶m3=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¶m2=value2¶m3=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¶m2=value2¶m3=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);