Skip to content

Commit

Permalink
#72 - Download JSON formatted network data and added tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Manvel committed Dec 8, 2019
1 parent 2190165 commit 9f7a8ec
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 24 deletions.
34 changes: 12 additions & 22 deletions src/js/ui/tabs/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ const {addSettingItem, getSettingListData, resetSettingListData, Listener} = req
const permissionNotificationMsgId = "additionalPermissions_notification";
const filterParams = ["statusLine", "statusCode", "type", "url", "method"];

var downloadText = "";
let collectedRequests = [];
let tableList = null;

Expand Down Expand Up @@ -198,50 +197,41 @@ const {addSettingItem, getSettingListData, resetSettingListData, Listener} = req
});
break;
case "download-all": {
for (let i = 0; i < collectedRequests.length; i++)
const downloadJson = [];
for (const {request, data} of collectedRequests)
{
var requestObj = collectedRequests[i];
for (const param in requestObj)
const requestObj = {};
requestObj["action"] = data.type;
for (const param in request)
{
if (param == "requestHeaders" || param == "responseHeaders")
{
for (var j = 0; j < requestObj[param].length; j++)
requestObj["headers"] = {};
for (const {name, value} of request[param])
{
var header = requestObj[param][j];
downloadText += " ";
updateDownloadText(header.name, header.value);
requestObj["headers"][name] = value;
}
}
else if (param == "dataset")
{
updateDownloadText("Action type", requestObj[param].type);
}
else if (filterParams.indexOf(param) >= 0)
{
updateDownloadText(param, requestObj[param]);
requestObj[param] = request[param];
}
}
downloadText += "\n\n";
downloadJson.push(requestObj);
}

//Download requests
const anchorElem = document.createElement("a");
anchorElem.setAttribute("href", "data:text/plain;charset=utf-8," +
encodeURIComponent(downloadText));
encodeURIComponent(JSON.stringify(downloadJson, null, 2)));

anchorElem.setAttribute("download", "requests.txt");
anchorElem.setAttribute("download", "requests.json");
anchorElem.style.display = 'none';
document.body.appendChild(anchorElem);
anchorElem.click();
document.body.removeChild(anchorElem);
downloadText = "";
break;
}
}
}

function updateDownloadText(name, value)
{
downloadText += name + " : " + value + "\n";
}
})();
2 changes: 1 addition & 1 deletion src/popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ <h4 data-i18n="cookies_general"></h4>
</template>
</pm-table>
<div class="controls">
<button data-i18n="downloadAll" data-action="download-all" download="requests.txt"></button>
<pm-button data-i18n="downloadAll" data-action="download-all" download="requests.txt"></pm-button>
<pm-button data-i18n="deleteAll" data-action="delete-all"></pm-button>
</div>
</div>
Expand Down
32 changes: 31 additions & 1 deletion test/puppeteer/network.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const {allUrlsToPermissions, restorePermissions} = require("../manifest");
const {openPopupPage, closeBrowser, getBrowser} = require("../common");
const {equal} = require("assert");
const {equal, ok} = require("assert");
const path = require("path");
const {readFileSync, unlinkSync} = require("fs");

let page;
let page2;
Expand Down Expand Up @@ -191,6 +192,34 @@ describe("Testing Network tab", () =>
equal(await getItemText("User-Agent", await getItemElemId(0), "name"), null);
});

it("Clicking on 'Download All' button should download all collected requests", async() =>
{
await page._client.send('Page.setDownloadBehavior', {
behavior: "allow",
downloadPath: __dirname
});
await page.click("pm-button[data-action='download-all']");
await page.waitFor(200);
const file = readFileSync(path.join(__dirname, "requests.json"));
const requests = JSON.parse(file);

equal(requests[0].action, "send");
equal(requests[0].method, "GET");
ok(requests[0].headers);
equal(requests[0].type, "main_frame");
equal(requests[0].url, "http://127.0.0.1:4000/");

equal(requests[1].action, "receive");
equal(requests[1].headers["Content-Type"], "text/plain");
equal(requests[1].headers["test-header"], "test-value");
equal(requests[1].statusCode, 200);

equal(requests[2].url, "http://127.0.0.1:4000/favicon.ico");

equal(requests[3].url, "http://127.0.0.1:4000/favicon.ico");
equal(requests[3].type, "image");
});

it("Switching collectHeaders off should stop adding into network tab", async() =>
{
await page.click("pm-button[data-action='delete-all']");
Expand All @@ -208,6 +237,7 @@ describe("Testing Network tab", () =>

after(async() =>
{
unlinkSync(path.join(__dirname, "requests.json"));
await restorePermissions();
await closeBrowser();
server.close();
Expand Down

0 comments on commit 9f7a8ec

Please sign in to comment.