Bug 1426809 - Prevent fetching network update packet again after packet arrived r=Honza

MozReview-Commit-ID: 5Ifgj1opsNW

--HG--
extra : rebase_source : 9ddd273520657db459df15c9a52cef120d669c51
This commit is contained in:
Ricky Chien 2017-12-23 14:03:24 +08:00
parent 9d20fe6b18
commit 5baf806cde
2 changed files with 51 additions and 56 deletions

View File

@ -134,10 +134,6 @@ class FirefoxDataProvider {
let response = await this.getLongString(text);
responseContent.content.text = response;
payload.responseContent = responseContent;
// Lock down responseContentAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.responseContentAvailable = false;
}
return payload;
}
@ -149,10 +145,6 @@ class FirefoxDataProvider {
if (headers) {
payload.requestHeaders = headers;
}
// Lock down requestHeadersAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.requestHeadersAvailable = false;
}
return payload;
}
@ -164,10 +156,6 @@ class FirefoxDataProvider {
if (headers) {
payload.responseHeaders = headers;
}
// Lock down responseHeadersAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.responseHeadersAvailable = false;
}
return payload;
}
@ -188,10 +176,6 @@ class FirefoxDataProvider {
requestPostData.postData.text = postData;
payload.requestPostData = Object.assign({}, requestPostData);
payload.requestHeadersFromUploadStream = { headers, headersSize };
// Lock down requestPostDataAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.requestPostDataAvailable = false;
}
return payload;
}
@ -214,10 +198,6 @@ class FirefoxDataProvider {
payload.requestCookies = reqCookies;
}
}
// Lock down requestCookiesAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.requestCookiesAvailable = false;
}
return payload;
}
@ -240,10 +220,6 @@ class FirefoxDataProvider {
payload.responseCookies = resCookies;
}
}
// Lock down responseCookiesAvailable once we fetch data from back-end.
// Using this as flag to prevent fetching arrived data again.
payload.responseCookiesAvailable = false;
}
return payload;
}
@ -434,7 +410,12 @@ class FirefoxDataProvider {
this.lazyRequestData.delete(key);
if (this.actions.updateRequest) {
await this.actions.updateRequest(actor, payload, true);
await this.actions.updateRequest(actor, {
...payload,
// Lockdown *Available property once we fetch data from back-end.
// Using this as a flag to prevent fetching arrived data again.
[`${method}Available`]: false,
}, true);
}
return payload;

View File

@ -40,6 +40,7 @@ class RequestListContextMenu {
requestPostDataAvailable,
responseHeaders,
responseHeadersAvailable,
responseContent,
responseContentAvailable,
url,
} = selectedRequest;
@ -73,7 +74,7 @@ class RequestListContextMenu {
// Menu item will be visible even if data hasn't arrived, so we need to check
// *Available property and then fetch data lazily once user triggers the action.
visible: !!(selectedRequest && (requestPostDataAvailable || requestPostData)),
click: () => this.copyPostData(id, formDataSections),
click: () => this.copyPostData(id, formDataSections, requestPostData),
});
copySubmenu.push({
@ -82,8 +83,11 @@ class RequestListContextMenu {
accesskey: L10N.getStr("netmonitor.context.copyAsCurl.accesskey"),
// Menu item will be visible even if data hasn't arrived, so we need to check
// *Available property and then fetch data lazily once user triggers the action.
visible: !!(selectedRequest && (requestHeadersAvailable || requestHeaders)),
click: () => this.copyAsCurl(id, url, method, requestHeaders, httpVersion),
visible: !!(selectedRequest &&
(requestHeadersAvailable || requestHeaders) &&
(responseContentAvailable || responseContent)),
click: () =>
this.copyAsCurl(id, url, method, httpVersion, requestHeaders, responseContent),
});
copySubmenu.push({
@ -117,16 +121,17 @@ class RequestListContextMenu {
accesskey: L10N.getStr("netmonitor.context.copyResponse.accesskey"),
// Menu item will be visible even if data hasn't arrived, so we need to check
// *Available property and then fetch data lazily once user triggers the action.
visible: !!(selectedRequest && responseContentAvailable),
click: () => this.copyResponse(id),
visible: !!(selectedRequest && (responseContentAvailable || responseContent)),
click: () => this.copyResponse(id, responseContent),
});
copySubmenu.push({
id: "request-list-context-copy-image-as-data-uri",
label: L10N.getStr("netmonitor.context.copyImageAsDataUri"),
accesskey: L10N.getStr("netmonitor.context.copyImageAsDataUri.accesskey"),
visible: !!(selectedRequest && mimeType && mimeType.includes("image/")),
click: () => this.copyImageAsDataUri(id, mimeType),
visible: !!(selectedRequest && (responseContentAvailable || responseContent) &&
mimeType && mimeType.includes("image/")),
click: () => this.copyImageAsDataUri(id, mimeType, responseContent),
});
copySubmenu.push({
@ -161,8 +166,9 @@ class RequestListContextMenu {
id: "request-list-context-save-image-as",
label: L10N.getStr("netmonitor.context.saveImageAs"),
accesskey: L10N.getStr("netmonitor.context.saveImageAs.accesskey"),
visible: !!(selectedRequest && mimeType && mimeType.includes("image/")),
click: () => this.saveImageAs(id, url),
visible: !!(selectedRequest && (responseContentAvailable || responseContent) &&
mimeType && mimeType.includes("image/")),
click: () => this.saveImageAs(id, url, responseContent),
});
menu.push({
@ -263,7 +269,7 @@ class RequestListContextMenu {
* Copy the request form data parameters (or raw payload) from
* the currently selected item.
*/
async copyPostData(id, formDataSections) {
async copyPostData(id, formDataSections, requestPostData) {
let params = [];
// Try to extract any form data parameters.
formDataSections.forEach(section => {
@ -279,8 +285,9 @@ class RequestListContextMenu {
// Fall back to raw payload.
if (!string) {
let { requestPostData } = await this.props.connector
.requestData(id, "requestPostData");
requestPostData = requestPostData ||
await this.props.connector.requestData(id, "requestPostData").requestPostData;
string = requestPostData.postData.text;
if (Services.appinfo.OS !== "WINNT") {
string = string.replace(/\r/g, "");
@ -292,18 +299,19 @@ class RequestListContextMenu {
/**
* Copy a cURL command from the currently selected item.
*/
async copyAsCurl(id, url, method, requestHeaders, httpVersion) {
if (!requestHeaders) {
requestHeaders = await this.props.connector.requestData(id, "requestHeaders");
}
let { requestPostData } = await this.props.connector
.requestData(id, "requestPostData");
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;
// Create a sanitized object for the Curl command generator.
let data = {
url,
method,
headers: requestHeaders.headers,
httpVersion: httpVersion,
httpVersion,
postDataText: requestPostData ? requestPostData.postData.text : "",
};
copyString(Curl.generateCommand(data));
@ -313,9 +321,9 @@ class RequestListContextMenu {
* Copy the raw request headers from the currently selected item.
*/
async copyRequestHeaders(id, requestHeaders) {
if (!requestHeaders) {
requestHeaders = await this.props.connector.requestData(id, "requestHeaders");
}
requestHeaders = requestHeaders ||
await this.props.connector.requestData(id, "requestHeaders");
let rawHeaders = requestHeaders.rawHeaders.trim();
if (Services.appinfo.OS !== "WINNT") {
@ -328,9 +336,9 @@ class RequestListContextMenu {
* Copy the raw response headers from the currently selected item.
*/
async copyResponseHeaders(id, responseHeaders) {
if (!responseHeaders) {
responseHeaders = await this.props.connector.requestData(id, "responseHeaders");
}
responseHeaders = responseHeaders ||
await this.props.connector.requestData(id, "responseHeaders");
let rawHeaders = responseHeaders.rawHeaders.trim();
if (Services.appinfo.OS !== "WINNT") {
@ -342,8 +350,10 @@ class RequestListContextMenu {
/**
* Copy image as data uri.
*/
async copyImageAsDataUri(id, mimeType) {
let responseContent = await this.props.connector.requestData(id, "responseContent");
async copyImageAsDataUri(id, mimeType, responseContent) {
responseContent = responseContent ||
await this.props.connector.requestData(id, "responseContent");
let { encoding, text } = responseContent.content;
copyString(formDataURI(mimeType, encoding, text));
}
@ -351,8 +361,10 @@ class RequestListContextMenu {
/**
* Save image as.
*/
async saveImageAs(id, url) {
let responseContent = await this.props.connector.requestData(id, "responseContent");
async saveImageAs(id, url, responseContent) {
responseContent = responseContent ||
await this.props.connector.requestData(id, "responseContent");
let { encoding, text } = responseContent.content;
let fileName = getUrlBaseName(url);
let data;
@ -371,8 +383,10 @@ class RequestListContextMenu {
/**
* Copy response data as a string.
*/
async copyResponse(id) {
let responseContent = await this.props.connector.requestData(id, "responseContent");
async copyResponse(id, responseContent) {
responseContent = responseContent ||
await this.props.connector.requestData(id, "responseContent");
copyString(responseContent.content.text);
}