tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ModuleLoader.h (3425B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_dom_ModuleLoader_h
      8 #define mozilla_dom_ModuleLoader_h
      9 
     10 #include "ScriptLoader.h"
     11 #include "js/loader/ModuleLoaderBase.h"
     12 #include "mozilla/dom/ScriptLoadRequestType.h"
     13 
     14 class nsIURI;
     15 
     16 namespace JS {
     17 
     18 class CompileOptions;
     19 
     20 namespace loader {
     21 
     22 class ModuleLoadRequest;
     23 
     24 }  // namespace loader
     25 }  // namespace JS
     26 
     27 namespace mozilla::dom {
     28 
     29 class ScriptLoader;
     30 class ScriptLoadContext;
     31 class SRIMetadata;
     32 
     33 //////////////////////////////////////////////////////////////
     34 // DOM Module loader implementation
     35 //////////////////////////////////////////////////////////////
     36 
     37 class ModuleLoader final : public JS::loader::ModuleLoaderBase {
     38 private:
     39  virtual ~ModuleLoader();
     40 
     41 public:
     42  enum Kind { Normal, WebExtension };
     43 
     44  ModuleLoader(ScriptLoader* aLoader, nsIGlobalObject* aGlobalObject,
     45               Kind aKind);
     46 
     47  Kind GetKind() const { return mKind; }
     48 
     49  ScriptLoader* GetScriptLoader();
     50 
     51  bool CanStartLoad(ModuleLoadRequest* aRequest, nsresult* aRvOut) override;
     52 
     53  nsresult StartFetch(ModuleLoadRequest* aRequest) override;
     54 
     55  void OnModuleLoadComplete(ModuleLoadRequest* aRequest) override;
     56 
     57  nsresult CompileFetchedModule(
     58      JSContext* aCx, JS::Handle<JSObject*> aGlobal,
     59      JS::CompileOptions& aOptions, ModuleLoadRequest* aRequest,
     60      JS::MutableHandle<JSObject*> aModuleScript) override;
     61 
     62  // Create a top-level module load request.
     63  already_AddRefed<ModuleLoadRequest> CreateTopLevel(
     64      nsIURI* aURI, nsIScriptElement* aElement, ReferrerPolicy aReferrerPolicy,
     65      ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity,
     66      nsIURI* aReferrer, ScriptLoadContext* aContext,
     67      ScriptLoadRequestType aRequestType);
     68 
     69  nsIURI* GetClientReferrerURI() override;
     70 
     71  already_AddRefed<ScriptFetchOptions> CreateDefaultScriptFetchOptions()
     72      override;
     73 
     74  already_AddRefed<ModuleLoadRequest> CreateRequest(
     75      JSContext* aCx, nsIURI* aURI, JS::Handle<JSObject*> aModuleRequest,
     76      JS::Handle<JS::Value> aHostDefined, JS::Handle<JS::Value> aPayload,
     77      bool aIsDynamicImport, ScriptFetchOptions* aOptions,
     78      ReferrerPolicy aReferrerPolicy, nsIURI* aBaseURL,
     79      const SRIMetadata& aSriMetadata) override;
     80 
     81  static ModuleLoader* From(ModuleLoaderBase* aLoader) {
     82    return static_cast<ModuleLoader*>(aLoader);
     83  }
     84 
     85  void AsyncExecuteInlineModule(ModuleLoadRequest* aRequest);
     86  void ExecuteInlineModule(ModuleLoadRequest* aRequest);
     87 
     88 private:
     89  nsresult CompileJavaScriptOrWasmModule(
     90      JSContext* aCx, JS::CompileOptions& aOptions, ModuleLoadRequest* aRequest,
     91      JS::MutableHandle<JSObject*> aModuleOut);
     92  nsresult CompileJsonModule(JSContext* aCx, JS::CompileOptions& aOptions,
     93                             ModuleLoadRequest* aRequest,
     94                             JS::MutableHandle<JSObject*> aModuleOut);
     95  nsresult CompileCssModule(JSContext* aCx, JS::CompileOptions& aOptions,
     96                            ModuleLoadRequest* aRequest,
     97                            JS::MutableHandle<JSObject*> aModuleOut);
     98 
     99 private:
    100  const Kind mKind;
    101 };
    102 
    103 }  // namespace mozilla::dom
    104 
    105 #endif  // mozilla_dom_ModuleLoader_h