Index: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.h |
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.h b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c2c4a10af68e5968ecd9b151d053d4f9a9eaef72 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.h |
@@ -0,0 +1,77 @@ |
+// 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 ModuleTreeLinker_h |
+#define ModuleTreeLinker_h |
+ |
+#include "core/dom/Modulator.h" |
+#include "wtf/HashSet.h" |
+ |
+namespace blink { |
+ |
+class ModuleTreeLinkerRegistry; |
+ |
+// A ModuleTreeLinker is esponsible for running and keeping intermediate states |
yhirano
2017/01/06 07:27:01
responsible
kouhei (in TOK)
2017/01/11 01:41:58
Done.
|
+// for "internal module script graph fetching procedure" for a module graph tree |
+// node. |
+// https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-script-graph-fetching-procedure |
+class ModuleTreeLinker final |
+ : public GarbageCollectedFinalized<ModuleTreeLinker>, |
+ public SingleModuleClient { |
+ USING_GARBAGE_COLLECTED_MIXIN(ModuleTreeLinker); |
+ |
+ public: |
+ static ModuleTreeLinker* fetch(const KURL&, |
+ const KURL& baseURL, |
+ Modulator*, |
+ ModuleTreeLinkerRegistry*, |
+ ModuleTreeClient*); |
+ virtual ~ModuleTreeLinker() = default; |
+ DECLARE_TRACE(); |
+ |
+ bool isFetching() const { |
+ return State::FetchingSelf <= m_state && m_state < State::Finished; |
+ } |
+ bool hasFinished() const { return m_state == State::Finished; } |
+ |
+ private: |
+ ModuleTreeLinker(Modulator*, ModuleTreeLinkerRegistry*, ModuleTreeClient*); |
+ |
+ enum class State { |
+ Initial, |
+ // Running fetch of the module script corresponding to the target node. |
+ FetchingSelf, |
+ // Running fetch of descendants of the target node. |
+ FetchingDependencies, |
+ // Instantiating m_moduleScript and the node descendants. |
+ Instantiating, |
yhirano
2017/01/06 07:27:01
Not used
kouhei (in TOK)
2017/01/11 01:41:58
Fixed.
|
+ Finished, |
+ }; |
+ void advanceState(State); |
+ |
+ void fetchSelf(const KURL&, const KURL& baseURL); |
+ // Implements SingleModuleClient |
+ void notifyFinishedSingleModule(ModuleScript*) override; |
+ |
+ void fetchDescendants(); |
+ void notifyOneDescendantFinished(bool wasSuccess); |
+ |
+ void instantiate(); |
+ HeapHashSet<Member<ModuleScript>> uninstantiatedInclusiveDescendants(); |
+ |
+ class DependencyModuleClient; |
+ friend class DependencyModuleClient; |
+ |
+ Member<Modulator> m_modulator; |
+ Member<ModuleTreeLinkerRegistry> m_registry; |
+ Member<ModuleTreeClient> m_client; |
+ State m_state = State::Initial; |
+ Member<ModuleScript> m_moduleScript; |
+ size_t m_numIncompleteDescendants = 0; |
+ HeapHashSet<Member<DependencyModuleClient>> m_dependencyClients; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif |