Name Description Size
CacheLoadHandler.cpp force trusted origin 21184
CacheLoadHandler.h [DOMDOC] CacheLoadHandler for Workers A LoadHandler is a ScriptLoader helper class that reacts to an nsIStreamLoader's events for loading JS scripts. It is primarily responsible for decoding the stream into UTF8 or UTF16. Additionally, it takes care of any work that needs to follow the completion of a stream. Every LoadHandler also manages additional tasks for the type of load that it is doing. CacheLoadHandler is a specialized LoadHandler used by ServiceWorkers to implement the installation model used by ServiceWorkers to support running offline. When a ServiceWorker is installed, its main script is evaluated and all script resources that are loaded are saved. The spec does not specify the storage mechanism for this, but we chose to reuse the Cache API[1] mechanism that we expose to content to also store the script and its dependencies. We store the script resources in a special chrome namespace CacheStorage that is not visible to content. Each distinct ServiceWorker installation gets its own Cache keyed by a randomly-generated UUID. In terms of specification, this class implements step 4 of https://w3c.github.io/ServiceWorker/#importscripts Relationship to NetworkLoadHandler During ServiceWorker installation, the CacheLoadHandler falls back on the NetworkLoadHandler by calling `mLoader->LoadScript(...)`. If a script has not been seen before, then we will fall back on loading from the network. However, if the ServiceWorker is already installed, an error will be generated and the ServiceWorker will fail to load, per spec. CacheLoadHandler does not persist some pieces of information, such as the sourceMapUrl. Also, the DOM Cache API storage does not yet support alternate data streams for JS Bytecode or WASM caching; this is tracked by Bug 1336199. [1]: https://developer.mozilla.org/en-US/docs/Web/API/caches 7874
moz.build 862
NetworkLoadHandler.cpp 14797
NetworkLoadHandler.h [DOMDOC] NetworkLoadHandler for Workers A LoadHandler is a ScriptLoader helper class that reacts to an nsIStreamLoader's events for loading JS scripts. It is primarily responsible for decoding the stream into UTF8 or UTF16. Additionally, it takes care of any work that needs to follow the completion of a stream. Every LoadHandler also manages additional tasks for the type of load that it is doing. As part of worker loading we have an number of tasks that we need to take care of after a successfully completed stream, including setting a final URI on the WorkerPrivate if we have loaded a main script, or handling CSP issues. These are handled in DataReceivedFromNetwork, and implement roughly the same set of tasks as you will find in the CacheLoadhandler, which has a companion method DataReceivedFromcache. In the worker context, the LoadHandler is run on the main thread, and all work in this file ultimately is done by the main thread, including decoding. 2890
ScriptResponseHeaderProcessor.cpp 2909
ScriptResponseHeaderProcessor.h ScriptResponseHeaderProcessor This class handles Policy headers. It can be used as a RequestObserver in a Tee, as it is for NetworkLoadHandler in WorkerScriptLoader, or the static method can be called directly, as it is in CacheLoadHandler. 3156
WorkerLoadContext.cpp 2864
WorkerLoadContext.h WorkerLoadContext (for all workers) LoadContexts augment the loading of a ScriptLoadRequest. They describe how a ScriptLoadRequests loading and evaluation needs to be augmented, based on the information provided by the loading context. The WorkerLoadContext has the following generic fields applied to all worker ScriptLoadRequests (and primarily used for error handling): * mMutedErrorFlag Set when we finish loading a script, and used to determine whether a given error is thrown or muted. * mLoadResult In order to report errors correctly in the worker thread, we need to move them from the main thread to the worker. This field records the load error, for throwing when we return to the worker thread. * mKind See documentation of WorkerLoadContext::Kind. * mClientInfo A snapshot of a global living in the system (see documentation for ClientInfo). In worker loading, this field is important for CSP information and knowing what to intercept for Service Worker interception. * mChannel The channel used by this request for it's load. Used for cancellation, in order to cancel the stream. The rest of the fields on this class focus on enabling the ServiceWorker usecase, in particular -- using the Cache API to store the worker so that in the case of (for example) a page refresh, the service worker itself is persisted so that it can do other work. For more details see the CacheLoadHandler.h file. 7514
WorkerModuleLoader.cpp is top level 10574
WorkerModuleLoader.h 3717