☠☠ backed out by 7a40d9d95e3c ☠ ☠ | |
author | abhinav <abhinav.koppula@gmail.com> |
Sun, 17 Sep 2017 12:24:06 +0530 | |
changeset 381873 | 48e2fba9e04e3d209b92a02d1e7198ac879703e9 |
parent 381872 | b165925af92a92dc59d8d07acd4bdacee7e6bc36 |
child 381874 | 865bfef2c528b19d30b838760a84cc87f57886a6 |
push id | 32542 |
push user | kwierso@gmail.com |
push date | Wed, 20 Sep 2017 21:07:55 +0000 |
treeherder | mozilla-central@319a34bea9e4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | Honza |
bugs | 1398522 |
milestone | 57.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/devtools/client/netmonitor/src/components/headers-panel.js +++ b/devtools/client/netmonitor/src/components/headers-panel.js @@ -61,22 +61,26 @@ const HeadersPanel = createClass({ getInitialState() { return { rawHeadersOpened: false, }; }, getProperties(headers, title) { if (headers && headers.headers.length) { - return { - [`${title} (${getFormattedSize(headers.headersSize, 3)})`]: + let headerKey = `${title} (${getFormattedSize(headers.headersSize, 3)})`; + let propertiesResult = { + [headerKey]: headers.headers.reduce((acc, { name, value }) => name ? Object.assign(acc, { [name]: value }) : acc , {}) }; + + propertiesResult[headerKey] = this.sortByKey(propertiesResult[headerKey]); + return propertiesResult; } return null; }, toggleRawHeaders() { this.setState({ rawHeadersOpened: !this.state.rawHeadersOpened, @@ -119,16 +123,26 @@ const HeadersPanel = createClass({ })), headerDocURL ? MDNLink({ url: headerDocURL, }) : null ) ); }, + sortByKey: function (object) { + let result = {}; + Object.keys(object).sort(function (left, right) { + return left.toLowerCase().localeCompare(right.toLowerCase()); + }).forEach(function (key) { + result[key] = object[key]; + }); + return result; + }, + render() { const { openLink, cloneSelectedRequest, request: { fromCache, fromServiceWorker, httpVersion,
--- a/devtools/client/netmonitor/test/browser.ini +++ b/devtools/client/netmonitor/test/browser.ini @@ -111,16 +111,17 @@ skip-if = (os == 'linux' && debug && bit [browser_net_filter-01.js] skip-if = (os == 'linux' && debug && bits == 32) # Bug 1303439 [browser_net_filter-02.js] [browser_net_filter-03.js] [browser_net_filter-04.js] [browser_net_filter-autocomplete.js] [browser_net_filter-flags.js] [browser_net_footer-summary.js] +[browser_net_headers_sorted.js] [browser_net_icon-preview.js] [browser_net_image-tooltip.js] [browser_net_json-b64.js] [browser_net_json-null.js] [browser_net_json-long.js] [browser_net_json-malformed.js] [browser_net_json_custom_mime.js] [browser_net_json_text_mime.js]
new file mode 100644 --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_headers_sorted.js @@ -0,0 +1,42 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests if Request-Headers and Response-Headers are sorted in Headers tab. + */ +add_task(function* () { + let { tab, monitor } = yield initNetMonitor(SIMPLE_SJS); + info("Starting test... "); + + let { document, store, windowRequire } = monitor.panelWin; + let Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + + store.dispatch(Actions.batchEnable(false)); + + tab.linkedBrowser.reload(); + + let wait = waitForNetworkEvents(monitor, 1); + yield wait; + + wait = waitForDOM(document, ".headers-overview"); + EventUtils.sendMouseEvent({ type: "mousedown" }, + document.querySelectorAll(".request-list-item")[0]); + yield wait; + + info("Check if Request-Headers and Response-Headers are sorted"); + let expectedLabelValues = ["Response headers (330 B)", "cache-control", "connection", + "content-length", "content-type", "date", "expires", + "foo-bar", "pragma", "server", "set-cookie", + "Request headers (466 B)", "Accept", "Accept-Encoding", + "Accept-Language", "Cache-Control", "Connection", "Cookie", + "Host", "Pragma", "Upgrade-Insecure-Requests", "User-Agent"]; + let labelCells = document.querySelectorAll(".treeLabelCell"); + labelCells.forEach(function (val, index) { + is(val.innerText, expectedLabelValues[index], + "Actual label value " + val.innerText + " not equal to expected label value " + + expectedLabelValues[index]); + }); + yield teardown(monitor); +});