headers-provider.js (2212B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { ObjectProvider } = ChromeUtils.importESModule( 8 "resource://devtools/client/shared/components/tree/ObjectProvider.mjs", 9 { global: "current" } 10 ); 11 12 /** 13 * Custom tree provider. 14 * 15 * This provider is used to provide set of headers and is 16 * utilized by the HeadersPanel. 17 * The default ObjectProvider can't be used since it doesn't 18 * allow duplicities by design and so it can't support duplicity 19 * headers (more headers with the same name). 20 */ 21 var HeadersProvider = { 22 ...ObjectProvider, 23 24 getChildren(object) { 25 if (object && object.value instanceof HeaderList) { 26 return object.value.headers.map( 27 (header, index) => new Header(header.name, header.value, index) 28 ); 29 } 30 return ObjectProvider.getChildren(object); 31 }, 32 33 hasChildren(object) { 34 if (object.value instanceof HeaderList) { 35 return !!object.value.headers.length; 36 } else if (object instanceof Header) { 37 return false; 38 } 39 return ObjectProvider.hasChildren(object); 40 }, 41 42 getLabel(object) { 43 if (object instanceof Header) { 44 return object.name; 45 } 46 return ObjectProvider.getLabel(object); 47 }, 48 49 getValue(object) { 50 if (object instanceof Header) { 51 return object.value; 52 } 53 return ObjectProvider.getValue(object); 54 }, 55 56 getKey(object) { 57 if (object instanceof Header) { 58 return object.key; 59 } 60 return ObjectProvider.getKey(object); 61 }, 62 63 getType(object) { 64 if (object instanceof Header) { 65 return "string"; 66 } 67 return ObjectProvider.getType(object); 68 }, 69 }; 70 71 /** 72 * Helper data structures for list of headers. 73 */ 74 function HeaderList(headers) { 75 // Clone, so the sort doesn't affect the original array. 76 this.headers = headers.slice(0); 77 this.headers.sort((a, b) => { 78 return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); 79 }); 80 } 81 82 function Header(name, value, key) { 83 this.name = name; 84 this.value = value; 85 this.key = key; 86 } 87 88 module.exports = { 89 HeadersProvider, 90 HeaderList, 91 };