Bug 1434855 - Refactor HAR builder options; r=ochameau
MozReview-Commit-ID: FRcxp4XPFdf
--- a/devtools/client/netmonitor/initializer.js
+++ b/devtools/client/netmonitor/initializer.js
@@ -100,54 +100,39 @@ window.Netmonitor = {
// Support for WebExtensions API
/**
* Support for `devtools.network.getHAR` (get collected data as HAR)
*/
getHar() {
let { HarExporter } = require("devtools/client/netmonitor/src/har/har-exporter");
- let {
- getLongString,
- getTabTarget,
- getTimingMarker,
- requestData,
- } = connector;
- let { form: { title, url } } = getTabTarget();
let state = store.getState();
let options = {
- getString: getLongString,
+ connector,
items: getSortedRequests(state),
- requestData,
- getTimingMarker,
- title: title || url,
};
return HarExporter.getHar(options);
},
/**
* Support for `devtools.network.onRequestFinished`. A hook for
* every finished HTTP request used by WebExtensions API.
*/
onRequestAdded(event, requestId) {
let listeners = this.toolbox.getRequestFinishedListeners();
if (!listeners.size) {
return;
}
let { HarExporter } = require("devtools/client/netmonitor/src/har/har-exporter");
- let { getLongString, getTabTarget, requestData } = connector;
- let { form: { title, url } } = getTabTarget();
-
let options = {
- getString: getLongString,
- requestData,
- title: title || url,
+ connector,
includeResponseBodies: false,
items: [getDisplayedRequestById(store.getState(), requestId)],
};
// Build HAR for specified request only.
HarExporter.getHar(options).then(har => {
let harEntry = har.log.entries[0];
delete harEntry.pageref;
--- a/devtools/client/netmonitor/src/har/har-exporter.js
+++ b/devtools/client/netmonitor/src/har/har-exporter.js
@@ -181,20 +181,38 @@ const HarExporter = {
},
/**
* Build HAR data object. This object contains all HTTP data
* collected by the Network panel. The process is asynchronous
* since it can involve additional RDP communication (e.g. resolving
* long strings).
*/
- buildHarData: function (options) {
+ buildHarData: async function (options) {
+ let { connector } = options;
+ let {
+ getTabTarget,
+ } = connector;
+ let {
+ form: { title, url }
+ } = getTabTarget();
+
+ options = {
+ ...options,
+ title: title || url,
+ getString: connector.getLongString,
+ getTimingMarker: connector.getTimingMarker,
+ requestData: connector.requestData,
+ };
+
// Build HAR object from collected data.
let builder = new HarBuilder(options);
- return builder.build();
+ let result = await builder.build();
+
+ return result;
},
/**
* Build JSON string from the HAR data object.
*/
stringify: function (har) {
if (!har) {
return null;
--- a/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
+++ b/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
@@ -404,27 +404,16 @@ class RequestListContextMenu {
// This will not work in launchpad
// document.execCommand(‘cut’/‘copy’) was denied because it was not called from
// inside a short running user-generated event handler.
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard
return HarExporter.save(this.getDefaultHarOptions(sortedRequests));
}
getDefaultHarOptions(sortedRequests) {
- let {
- getLongString,
- getTabTarget,
- requestData,
- getTimingMarker,
- } = this.props.connector;
- let { form: { title, url } } = getTabTarget();
-
return {
- getString: getLongString,
+ connector: this.props.connector,
items: sortedRequests,
- requestData,
- getTimingMarker,
- title: title || url,
};
}
}
module.exports = RequestListContextMenu;