Backed out changeset 181cde5d267e (bug 1949932) Backed out changeset 44fd656c40de (bug 1949932) Backed out changeset b4d93df0edb1 (bug 1949932) Backed out changeset 7c20db67f688 (bug 1949932) Backed out changeset ac742d9dc3aa (bug 1949932) Backed out changeset 102e0dc46dff (bug 1949932) Backed out changeset 80d1b3331844 (bug 1949932) Backed out changeset cc1834c3ea2a (bug 1949932)
101 lines
3.2 KiB
C++
101 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_ModuleLoader_h
|
|
#define mozilla_dom_ModuleLoader_h
|
|
|
|
#include "mozilla/dom/ScriptLoadContext.h"
|
|
#include "js/loader/ModuleLoaderBase.h"
|
|
#include "js/loader/ScriptLoadRequest.h"
|
|
#include "ScriptLoader.h"
|
|
|
|
class nsIURI;
|
|
|
|
namespace JS {
|
|
|
|
class CompileOptions;
|
|
|
|
namespace loader {
|
|
|
|
class ModuleLoadRequest;
|
|
|
|
} // namespace loader
|
|
} // namespace JS
|
|
|
|
namespace mozilla::dom {
|
|
|
|
class ScriptLoader;
|
|
class SRIMetadata;
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
// DOM Module loader implementation
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
class ModuleLoader final : public JS::loader::ModuleLoaderBase {
|
|
private:
|
|
virtual ~ModuleLoader();
|
|
|
|
public:
|
|
enum Kind { Normal, WebExtension };
|
|
|
|
ModuleLoader(ScriptLoader* aLoader, nsIGlobalObject* aGlobalObject,
|
|
Kind aKind);
|
|
|
|
Kind GetKind() const { return mKind; }
|
|
|
|
ScriptLoader* GetScriptLoader();
|
|
|
|
bool CanStartLoad(ModuleLoadRequest* aRequest, nsresult* aRvOut) override;
|
|
|
|
nsresult StartFetch(ModuleLoadRequest* aRequest) override;
|
|
|
|
void OnModuleLoadComplete(ModuleLoadRequest* aRequest) override;
|
|
|
|
nsresult CompileFetchedModule(
|
|
JSContext* aCx, JS::Handle<JSObject*> aGlobal,
|
|
JS::CompileOptions& aOptions, ModuleLoadRequest* aRequest,
|
|
JS::MutableHandle<JSObject*> aModuleScript) override;
|
|
|
|
// Create a top-level module load request.
|
|
already_AddRefed<ModuleLoadRequest> CreateTopLevel(
|
|
nsIURI* aURI, ReferrerPolicy aReferrerPolicy,
|
|
ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity,
|
|
nsIURI* aReferrer, ScriptLoadContext* aContext);
|
|
|
|
// Create a module load request for a static module import.
|
|
already_AddRefed<ModuleLoadRequest> CreateStaticImport(
|
|
nsIURI* aURI, JS::ModuleType aModuleType, ModuleLoadRequest* aParent,
|
|
const mozilla::dom::SRIMetadata& aSriMetadata) override;
|
|
|
|
// Create a module load request for a dynamic module import.
|
|
already_AddRefed<ModuleLoadRequest> CreateDynamicImport(
|
|
JSContext* aCx, nsIURI* aURI, JS::ModuleType aModuleType,
|
|
LoadedScript* aMaybeActiveScript, JS::Handle<JSString*> aSpecifier,
|
|
JS::Handle<JSObject*> aPromise) override;
|
|
|
|
static ModuleLoader* From(ModuleLoaderBase* aLoader) {
|
|
return static_cast<ModuleLoader*>(aLoader);
|
|
}
|
|
|
|
void AsyncExecuteInlineModule(ModuleLoadRequest* aRequest);
|
|
void ExecuteInlineModule(ModuleLoadRequest* aRequest);
|
|
|
|
private:
|
|
nsresult CompileJavaScriptModule(JSContext* aCx, JS::CompileOptions& aOptions,
|
|
ModuleLoadRequest* aRequest,
|
|
JS::MutableHandle<JSObject*> aModuleOut);
|
|
nsresult CompileJsonModule(JSContext* aCx, JS::CompileOptions& aOptions,
|
|
ModuleLoadRequest* aRequest,
|
|
JS::MutableHandle<JSObject*> aModuleOut);
|
|
|
|
private:
|
|
const Kind mKind;
|
|
};
|
|
|
|
} // namespace mozilla::dom
|
|
|
|
#endif // mozilla_dom_ModuleLoader_h
|