summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/src/utils/headers-provider.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/client/netmonitor/src/utils/headers-provider.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/utils/headers-provider.js b/devtools/client/netmonitor/src/utils/headers-provider.js
new file mode 100644
index 0000000000..a76e7d1c0e
--- /dev/null
+++ b/devtools/client/netmonitor/src/utils/headers-provider.js
@@ -0,0 +1,90 @@
+/* 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 {
+ ObjectProvider,
+} = require("resource://devtools/client/shared/components/tree/ObjectProvider.js");
+
+/**
+ * Custom tree provider.
+ *
+ * This provider is used to provide set of headers and is
+ * utilized by the HeadersPanel.
+ * The default ObjectProvider can't be used since it doesn't
+ * allow duplicities by design and so it can't support duplicity
+ * headers (more headers with the same name).
+ */
+var HeadersProvider = {
+ ...ObjectProvider,
+
+ getChildren(object) {
+ if (object && object.value instanceof HeaderList) {
+ return object.value.headers.map(
+ (header, index) => new Header(header.name, header.value, index)
+ );
+ }
+ return ObjectProvider.getChildren(object);
+ },
+
+ hasChildren(object) {
+ if (object.value instanceof HeaderList) {
+ return !!object.value.headers.length;
+ } else if (object instanceof Header) {
+ return false;
+ }
+ return ObjectProvider.hasChildren(object);
+ },
+
+ getLabel(object) {
+ if (object instanceof Header) {
+ return object.name;
+ }
+ return ObjectProvider.getLabel(object);
+ },
+
+ getValue(object) {
+ if (object instanceof Header) {
+ return object.value;
+ }
+ return ObjectProvider.getValue(object);
+ },
+
+ getKey(object) {
+ if (object instanceof Header) {
+ return object.key;
+ }
+ return ObjectProvider.getKey(object);
+ },
+
+ getType(object) {
+ if (object instanceof Header) {
+ return "string";
+ }
+ return ObjectProvider.getType(object);
+ },
+};
+
+/**
+ * Helper data structures for list of headers.
+ */
+function HeaderList(headers) {
+ // Clone, so the sort doesn't affect the original array.
+ this.headers = headers.slice(0);
+ this.headers.sort((a, b) => {
+ return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
+ });
+}
+
+function Header(name, value, key) {
+ this.name = name;
+ this.value = value;
+ this.key = key;
+}
+
+module.exports = {
+ HeadersProvider,
+ HeaderList,
+};