| Index: third_party/WebKit/Source/core/dom/ModulePendingScript.h
|
| diff --git a/third_party/WebKit/Source/core/dom/ModulePendingScript.h b/third_party/WebKit/Source/core/dom/ModulePendingScript.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..62ecccbbcfbac8682a2bb6da632754e4810ed829
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/dom/ModulePendingScript.h
|
| @@ -0,0 +1,98 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef ModulePendingScript_h
|
| +#define ModulePendingScript_h
|
| +
|
| +#include "core/dom/Modulator.h"
|
| +#include "core/dom/ModuleScript.h"
|
| +#include "core/dom/PendingScript.h"
|
| +
|
| +namespace blink {
|
| +
|
| +class ModulePendingScript;
|
| +
|
| +// ModulePendingScriptTreeClient is used to connect from Modulator::FetchTree()
|
| +// to ModulePendingScript. Because ModulePendingScript is created after
|
| +// Modulator::FetchTree() is called, ModulePendingScriptTreeClient is
|
| +// registered as ModuleTreeClient to FetchTree() first, and later
|
| +// ModulePendingScript is supplied to ModulePendingScriptTreeClient via
|
| +// SetPendingScript() and is notified of module tree load finish.
|
| +class ModulePendingScriptTreeClient final
|
| + : public GarbageCollectedFinalized<ModulePendingScriptTreeClient>,
|
| + public ModuleTreeClient {
|
| + USING_GARBAGE_COLLECTED_MIXIN(ModulePendingScriptTreeClient);
|
| +
|
| + public:
|
| + static ModulePendingScriptTreeClient* Create() {
|
| + return new ModulePendingScriptTreeClient();
|
| + }
|
| + virtual ~ModulePendingScriptTreeClient() = default;
|
| +
|
| + void SetPendingScript(ModulePendingScript* client);
|
| +
|
| + ModuleScript* GetModuleScript() const { return module_script_; }
|
| +
|
| + DECLARE_TRACE();
|
| +
|
| + private:
|
| + ModulePendingScriptTreeClient();
|
| +
|
| + // Implements ModuleTreeClient
|
| + void NotifyModuleTreeLoadFinished(ModuleScript*) override;
|
| +
|
| + bool finished_ = false;
|
| + Member<ModuleScript> module_script_;
|
| + Member<ModulePendingScript> pending_script_;
|
| +};
|
| +
|
| +// PendingScript for a module script
|
| +// https://html.spec.whatwg.org/#module-script.
|
| +class CORE_EXPORT ModulePendingScript : public PendingScript {
|
| + public:
|
| + static ModulePendingScript* Create(ScriptElementBase* element,
|
| + ModulePendingScriptTreeClient* client) {
|
| + return new ModulePendingScript(element, client);
|
| + }
|
| +
|
| + ~ModulePendingScript() override;
|
| +
|
| + void NotifyModuleTreeLoadFinished();
|
| +
|
| + ModuleScript* GetModuleScript() const {
|
| + return module_tree_client_->GetModuleScript();
|
| + }
|
| +
|
| + DECLARE_TRACE();
|
| +
|
| + private:
|
| + ModulePendingScript(ScriptElementBase*, ModulePendingScriptTreeClient*);
|
| +
|
| + // PendingScript
|
| + ScriptType GetScriptType() const override { return ScriptType::kModule; }
|
| + Script* GetSource(const KURL& document_url,
|
| + bool& error_occurred) const override;
|
| + bool IsReady() const override { return ready_; }
|
| + bool IsExternal() const override { return true; }
|
| + bool ErrorOccurred() const override;
|
| + bool WasCanceled() const override { return false; }
|
| +
|
| + void StartStreamingIfPossible(Document*, ScriptStreamer::Type) override {}
|
| + KURL UrlForClassicScript() const override {
|
| + NOTREACHED();
|
| + return KURL();
|
| + }
|
| + void RemoveFromMemoryCache() override { NOTREACHED(); }
|
| +
|
| + void DisposeInternal() override;
|
| +
|
| + void CheckState() const override {}
|
| +
|
| + Member<ModulePendingScriptTreeClient> module_tree_client_;
|
| + bool ready_ = false;
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +#endif // ModulePendingScript_h
|
|
|