Bug 1931425 - Limit how often moz-label's #setStyles runs r=reusable-components-revie...
[gecko.git] / remote / shared / NetworkDecodedBodySizeMap.sys.mjs
blob917327817f40a32be5b48ba4fdc50dc62de915e4
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/. */
5 export class NetworkDecodedBodySizeMap {
6   #channelIdToBodySizePromiseMap;
8   constructor() {
9     this.#channelIdToBodySizePromiseMap = new Map();
10   }
12   destroy() {
13     this.#channelIdToBodySizePromiseMap = null;
14   }
16   async getDecodedBodySize(channelId) {
17     if (!this.#channelIdToBodySizePromiseMap.has(channelId)) {
18       const { promise, resolve } = Promise.withResolvers();
19       this.#channelIdToBodySizePromiseMap.set(channelId, {
20         promise,
21         resolve,
22       });
24       await promise;
25     }
26     const mapEntry = this.#channelIdToBodySizePromiseMap.get(channelId);
27     return mapEntry.decodedBodySize;
28   }
30   setDecodedBodySize(channelId, decodedBodySize) {
31     if (!this.#channelIdToBodySizePromiseMap.has(channelId)) {
32       const { promise, resolve } = Promise.withResolvers();
33       this.#channelIdToBodySizePromiseMap.set(channelId, {
34         decodedBodySize,
35         promise,
36         resolve,
37       });
38     }
39     const mapEntry = this.#channelIdToBodySizePromiseMap.get(channelId);
41     mapEntry.decodedBodySize = decodedBodySize;
42     mapEntry.resolve(decodedBodySize);
43   }
45   delete(channelId) {
46     this.#channelIdToBodySizePromiseMap.delete(channelId);
47   }