service_worker.sys.mjs (1893B)
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 import { WorkerTargetWatcherClass } from "resource://devtools/server/connectors/js-process-actor/target-watchers/worker.sys.mjs"; 6 import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; 7 8 const lazy = {}; 9 XPCOMUtils.defineLazyServiceGetter( 10 lazy, 11 "wdm", 12 "@mozilla.org/dom/workers/workerdebuggermanager;1", 13 Ci.nsIWorkerDebuggerManager 14 ); 15 16 class ServiceWorkerTargetWatcherClass extends WorkerTargetWatcherClass { 17 constructor() { 18 super("service_worker"); 19 } 20 // replicate WorkerTargetWatcherClass private attribute 21 #workerTargetType = "service_worker"; 22 23 /** 24 * Called whenever the debugged browser element navigates to a new page 25 * and the URL's host changes. 26 * This is used to maintain the list of active Service Worker targets 27 * based on that host name. 28 * 29 * @param {object} watcherDataObject 30 * See ContentProcessWatcherRegistry 31 */ 32 async updateBrowserElementHost(watcherDataObject) { 33 const { sessionData } = watcherDataObject; 34 35 // Create target actor matching this new host. 36 // Note that we may be navigating to the same host name and the target will already exist. 37 const promises = []; 38 for (const dbg of lazy.wdm.getWorkerDebuggerEnumerator()) { 39 const alreadyCreated = watcherDataObject.workers[ 40 this.#workerTargetType 41 ].some(info => info.dbg === dbg); 42 if ( 43 this.shouldHandleWorker(sessionData, dbg, "service_worker") && 44 !alreadyCreated 45 ) { 46 promises.push(this.createWorkerTargetActor(watcherDataObject, dbg)); 47 } 48 } 49 await Promise.all(promises); 50 } 51 } 52 53 export const ServiceWorkerTargetWatcher = new ServiceWorkerTargetWatcherClass();