Bug 1356869 - Add cookies and set cookies columns. r?ntim,rickychien draft
authorVangelis Katsikaros <vkatsikaros@gmail.com>
Mon, 17 Apr 2017 20:48:32 +0300
changeset 569265 582c58e9389c0d70d41de450657b20f79030870b
parent 569138 0b77ed3f26c5335503bc16e85b8c067382e7bb1e
child 626154 fa55f698a428811f8bfe34ac48ffc822d3f430b3
push id56114
push uservkatsikaros@gmail.com
push dateThu, 27 Apr 2017 07:49:12 +0000
reviewersntim, rickychien
bugs1356869
milestone55.0a1
Bug 1356869 - Add cookies and set cookies columns. r?ntim,rickychien MozReview-Commit-ID: CtZAYTURypz
devtools/client/locales/en-US/netmonitor.properties
devtools/client/netmonitor/index.js
devtools/client/netmonitor/src/assets/styles/netmonitor.css
devtools/client/netmonitor/src/components/moz.build
devtools/client/netmonitor/src/components/request-list-column-cookies.js
devtools/client/netmonitor/src/components/request-list-column-set-cookies.js
devtools/client/netmonitor/src/components/request-list-item.js
devtools/client/netmonitor/src/constants.js
devtools/client/netmonitor/src/reducers/ui.js
devtools/client/netmonitor/src/utils/sort-predicates.js
devtools/client/preferences/devtools.js
--- a/devtools/client/locales/en-US/netmonitor.properties
+++ b/devtools/client/locales/en-US/netmonitor.properties
@@ -429,16 +429,24 @@ netmonitor.toolbar.remoteip=Remote IP
 # LOCALIZATION NOTE (netmonitor.toolbar.cause): This is the label displayed
 # in the network table toolbar, above the "cause" column.
 netmonitor.toolbar.cause=Cause
 
 # LOCALIZATION NOTE (netmonitor.toolbar.type): This is the label displayed
 # in the network table toolbar, above the "type" column.
 netmonitor.toolbar.type=Type
 
+# LOCALIZATION NOTE (netmonitor.toolbar.cookies): This is the label displayed
+# in the network table toolbar, above the "cookies" column.
+netmonitor.toolbar.cookies=Cookies
+
+# LOCALIZATION NOTE (netmonitor.toolbar.setCookies): This is the label displayed
+# in the network table toolbar, above the "set cookies" column.
+netmonitor.toolbar.setCookies=Set Cookies
+
 # LOCALIZATION NOTE (netmonitor.toolbar.transferred): This is the label displayed
 # in the network table toolbar, above the "transferred" column, which is the
 # compressed / encoded size.
 netmonitor.toolbar.transferred=Transferred
 
 # LOCALIZATION NOTE (netmonitor.toolbar.contentSize): This is the label displayed
 # in the network table toolbar, above the "size" column, which is the
 # uncompressed / decoded size.
--- a/devtools/client/netmonitor/index.js
+++ b/devtools/client/netmonitor/index.js
@@ -18,17 +18,18 @@ const { Services: { appinfo, pref }} = r
 const { configureStore } = require("./src/utils/create-store");
 
 require("./src/assets/styles/netmonitor.css");
 
 EventEmitter.decorate(window);
 
 pref("devtools.netmonitor.enabled", true);
 pref("devtools.netmonitor.filters", "[\"all\"]");
-pref("devtools.netmonitor.hiddenColumns", "[]");
+pref("devtools.netmonitor.hiddenColumns",
+     "[\"cookies\",\"protocol\",\"remoteip\",\"setCookies\"]");
 pref("devtools.netmonitor.panes-network-details-width", 550);
 pref("devtools.netmonitor.panes-network-details-height", 450);
 pref("devtools.netmonitor.har.defaultLogDir", "");
 pref("devtools.netmonitor.har.defaultFileName", "Archive %date");
 pref("devtools.netmonitor.har.jsonp", false);
 pref("devtools.netmonitor.har.jsonpCallback", "");
 pref("devtools.netmonitor.har.includeResponseBodies", true);
 pref("devtools.netmonitor.har.compress", false);
--- a/devtools/client/netmonitor/src/assets/styles/netmonitor.css
+++ b/devtools/client/netmonitor/src/assets/styles/netmonitor.css
@@ -430,16 +430,28 @@ body,
 }
 
 /* Protocol column */
 
 .requests-list-protocol {
   width: 8%;
 }
 
+/* Cookies column */
+
+.requests-list-cookies {
+  width: 6%;
+}
+
+/* Set Cookies column */
+
+.requests-list-set-cookies {
+  width: 8%;
+}
+
 /* Domain column */
 
 .requests-list-domain {
   width: 13%;
 }
 
 .requests-list-domain.requests-list-column {
   text-align: start;
--- a/devtools/client/netmonitor/src/components/moz.build
+++ b/devtools/client/netmonitor/src/components/moz.build
@@ -9,21 +9,23 @@ DevToolsModules(
     'headers-panel.js',
     'mdn-link.js',
     'monitor-panel.js',
     'network-details-panel.js',
     'params-panel.js',
     'properties-view.js',
     'request-list-column-cause.js',
     'request-list-column-content-size.js',
+    'request-list-column-cookies.js',
     'request-list-column-domain.js',
     'request-list-column-file.js',
     'request-list-column-method.js',
     'request-list-column-protocol.js',
     'request-list-column-remote-ip.js',
+    'request-list-column-set-cookies.js',
     'request-list-column-status.js',
     'request-list-column-transferred-size.js',
     'request-list-column-type.js',
     'request-list-column-waterfall.js',
     'request-list-content.js',
     'request-list-empty-notice.js',
     'request-list-header.js',
     'request-list-item.js',
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/src/components/request-list-column-cookies.js
@@ -0,0 +1,43 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+  createClass,
+  DOM,
+  PropTypes,
+} = require("devtools/client/shared/vendor/react");
+
+const { div } = DOM;
+
+const RequestListColumnCookies = createClass({
+  displayName: "RequestListColumnCookies",
+
+  propTypes: {
+    item: PropTypes.object.isRequired,
+  },
+
+  shouldComponentUpdate(nextProps) {
+    let { requestCookies: currRequestCookies = { cookies: [] } } = this.props.item;
+    let { requestCookies: nextRequestCookies = { cookies: [] } } = nextProps.item;
+    currRequestCookies = currRequestCookies.cookies || currRequestCookies;
+    nextRequestCookies = nextRequestCookies.cookies || nextRequestCookies;
+    return currRequestCookies !== nextRequestCookies;
+  },
+
+  render() {
+    let { requestCookies = { cookies: [] } } = this.props.item;
+    requestCookies = requestCookies.cookies || requestCookies;
+    let requestCookiesLength = requestCookies.length > 0 ? requestCookies.length : "";
+    return (
+      div({
+        className: "requests-list-column requests-list-cookies",
+        title: requestCookiesLength
+      }, requestCookiesLength)
+    );
+  }
+});
+
+module.exports = RequestListColumnCookies;
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/src/components/request-list-column-set-cookies.js
@@ -0,0 +1,43 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+  createClass,
+  DOM,
+  PropTypes,
+} = require("devtools/client/shared/vendor/react");
+
+const { div } = DOM;
+
+const RequestListColumnSetCookies = createClass({
+  displayName: "RequestListColumnSetCookies",
+
+  propTypes: {
+    item: PropTypes.object.isRequired,
+  },
+
+  shouldComponentUpdate(nextProps) {
+    let { responseCookies: currResponseCookies = { cookies: [] } } = this.props.item;
+    let { responseCookies: nextResponseCookies = { cookies: [] } } = nextProps.item;
+    currResponseCookies = currResponseCookies.cookies || currResponseCookies;
+    nextResponseCookies = nextResponseCookies.cookies || nextResponseCookies;
+    return currResponseCookies !== nextResponseCookies;
+  },
+
+  render() {
+    let { responseCookies = { cookies: [] } } = this.props.item;
+    responseCookies = responseCookies.cookies || responseCookies;
+    let responseCookiesLength = responseCookies.length > 0 ? responseCookies.length : "";
+    return (
+      div({
+        className: "requests-list-column requests-list-set-cookies",
+        title: responseCookiesLength
+      }, responseCookiesLength)
+    );
+  }
+});
+
+module.exports = RequestListColumnSetCookies;
--- a/devtools/client/netmonitor/src/components/request-list-item.js
+++ b/devtools/client/netmonitor/src/components/request-list-item.js
@@ -11,21 +11,23 @@ const {
   PropTypes,
 } = require("devtools/client/shared/vendor/react");
 const I = require("devtools/client/shared/vendor/immutable");
 const { propertiesEqual } = require("../utils/request-utils");
 
 // Components
 const RequestListColumnCause = createFactory(require("./request-list-column-cause"));
 const RequestListColumnContentSize = createFactory(require("./request-list-column-content-size"));
+const RequestListColumnCookies = createFactory(require("./request-list-column-cookies"));
 const RequestListColumnDomain = createFactory(require("./request-list-column-domain"));
 const RequestListColumnFile = createFactory(require("./request-list-column-file"));
 const RequestListColumnMethod = createFactory(require("./request-list-column-method"));
 const RequestListColumnProtocol = createFactory(require("./request-list-column-protocol"));
 const RequestListColumnRemoteIP = createFactory(require("./request-list-column-remote-ip"));
+const RequestListColumnSetCookies = createFactory(require("./request-list-column-set-cookies"));
 const RequestListColumnStatus = createFactory(require("./request-list-column-status"));
 const RequestListColumnTransferredSize = createFactory(require("./request-list-column-transferred-size"));
 const RequestListColumnType = createFactory(require("./request-list-column-type"));
 const RequestListColumnWaterfall = createFactory(require("./request-list-column-waterfall"));
 
 const { div } = DOM;
 
 /**
@@ -132,16 +134,18 @@ const RequestListItem = createClass({
         columns.get("status") && RequestListColumnStatus({ item }),
         columns.get("method") && RequestListColumnMethod({ item }),
         columns.get("file") && RequestListColumnFile({ item }),
         columns.get("protocol") && RequestListColumnProtocol({ item }),
         columns.get("domain") && RequestListColumnDomain({ item, onSecurityIconClick }),
         columns.get("remoteip") && RequestListColumnRemoteIP({ item }),
         columns.get("cause") && RequestListColumnCause({ item, onCauseBadgeClick }),
         columns.get("type") && RequestListColumnType({ item }),
+        columns.get("cookies") && RequestListColumnCookies({ item }),
+        columns.get("setCookies") && RequestListColumnSetCookies({ item }),
         columns.get("transferred") && RequestListColumnTransferredSize({ item }),
         columns.get("contentSize") && RequestListColumnContentSize({ item }),
         columns.get("waterfall") &&
           RequestListColumnWaterfall({ item, firstRequestStartedMillis }),
       )
     );
   }
 });
--- a/devtools/client/netmonitor/src/constants.js
+++ b/devtools/client/netmonitor/src/constants.js
@@ -130,16 +130,25 @@ const HEADERS = [
     name: "cause",
     canFilter: true,
   },
   {
     name: "type",
     canFilter: false,
   },
   {
+    name: "cookies",
+    canFilter: false,
+  },
+  {
+    name: "setCookies",
+    boxName: "set-cookies",
+    canFilter: false,
+  },
+  {
     name: "transferred",
     canFilter: true,
   },
   {
     name: "contentSize",
     boxName: "size",
     filterKey: "size",
     canFilter: true,
--- a/devtools/client/netmonitor/src/reducers/ui.js
+++ b/devtools/client/netmonitor/src/reducers/ui.js
@@ -22,16 +22,18 @@ const Columns = I.Record({
   status: true,
   method: true,
   file: true,
   protocol: false,
   domain: true,
   remoteip: false,
   cause: true,
   type: true,
+  cookies: false,
+  setCookies: false,
   transferred: true,
   contentSize: true,
   waterfall: true,
 });
 
 const UI = I.Record({
   columns: new Columns(),
   detailsPanelSelectedTab: "headers",
--- a/devtools/client/netmonitor/src/utils/sort-predicates.js
+++ b/devtools/client/netmonitor/src/utils/sort-predicates.js
@@ -72,16 +72,36 @@ function remoteip(first, second) {
 
 function cause(first, second) {
   const firstCause = first.cause.type;
   const secondCause = second.cause.type;
   const result = compareValues(firstCause, secondCause);
   return result || waterfall(first, second);
 }
 
+function setCookies(first, second) {
+  let { responseCookies: firstResponseCookies = { cookies: [] } } = first;
+  let { responseCookies: secondResponseCookies = { cookies: [] } } = second;
+  firstResponseCookies = firstResponseCookies.cookies || firstResponseCookies;
+  secondResponseCookies = secondResponseCookies.cookies || secondResponseCookies;
+  const result =
+    compareValues(firstResponseCookies.length, secondResponseCookies.length);
+  return result || waterfall(first, second);
+}
+
+function cookies(first, second) {
+  let { requestCookies: firstRequestCookies = { cookies: [] } } = first;
+  let { requestCookies: secondRequestCookies = { cookies: [] } } = second;
+  firstRequestCookies = firstRequestCookies.cookies || firstRequestCookies;
+  secondRequestCookies = secondRequestCookies.cookies || secondRequestCookies;
+  const result =
+    compareValues(firstRequestCookies.length, secondRequestCookies.length);
+  return result || waterfall(first, second);
+}
+
 function type(first, second) {
   const firstType = getAbbreviatedMimeType(first.mimeType).toLowerCase();
   const secondType = getAbbreviatedMimeType(second.mimeType).toLowerCase();
   const result = compareValues(firstType, secondType);
   return result || waterfall(first, second);
 }
 
 function transferred(first, second) {
@@ -94,16 +114,18 @@ function contentSize(first, second) {
   return result || waterfall(first, second);
 }
 
 exports.Sorters = {
   status,
   method,
   file,
   protocol,
+  cookies,
+  setCookies,
   domain,
   remoteip,
   cause,
   type,
   transferred,
   contentSize,
   waterfall,
 };
--- a/devtools/client/preferences/devtools.js
+++ b/devtools/client/preferences/devtools.js
@@ -145,17 +145,17 @@ pref("devtools.serviceWorkers.testing.en
 
 // Enable the Network Monitor
 pref("devtools.netmonitor.enabled", true);
 
 // The default Network Monitor UI settings
 pref("devtools.netmonitor.panes-network-details-width", 550);
 pref("devtools.netmonitor.panes-network-details-height", 450);
 pref("devtools.netmonitor.filters", "[\"all\"]");
-pref("devtools.netmonitor.hiddenColumns", "[\"remoteip\",\"protocol\"]");
+pref("devtools.netmonitor.hiddenColumns", "[\"cookies\",\"protocol\",\"remoteip\",\"setCookies\"]");
 
 // The default Network monitor HAR export setting
 pref("devtools.netmonitor.har.defaultLogDir", "");
 pref("devtools.netmonitor.har.defaultFileName", "Archive %date");
 pref("devtools.netmonitor.har.jsonp", false);
 pref("devtools.netmonitor.har.jsonpCallback", "");
 pref("devtools.netmonitor.har.includeResponseBodies", true);
 pref("devtools.netmonitor.har.compress", false);