OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef ModuleTreeLinker_h | |
6 #define ModuleTreeLinker_h | |
7 | |
8 #include "core/CoreExport.h" | |
9 #include "core/dom/AncestorList.h" | |
10 #include "core/dom/Modulator.h" | |
11 | |
12 namespace blink { | |
13 | |
14 class ModuleScriptFetchRequest; | |
15 enum class ModuleGraphLevel; | |
16 class ModuleTreeLinkerRegistry; | |
17 | |
18 // A ModuleTreeLinker is responsible for running and keeping intermediate states | |
19 // for "internal module script graph fetching procedure" for a module graph tree | |
20 // node. | |
21 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-script -graph-fetching-procedure | |
22 class CORE_EXPORT ModuleTreeLinker final | |
23 : public GarbageCollectedFinalized<ModuleTreeLinker>, | |
24 public SingleModuleClient { | |
25 USING_GARBAGE_COLLECTED_MIXIN(ModuleTreeLinker); | |
26 | |
27 public: | |
28 static ModuleTreeLinker* Fetch(const ModuleScriptFetchRequest&, | |
29 const AncestorList&, | |
30 ModuleGraphLevel, | |
31 Modulator*, | |
32 ModuleTreeLinkerRegistry*, | |
33 ModuleTreeClient*); | |
34 virtual ~ModuleTreeLinker() = default; | |
35 DECLARE_TRACE(); | |
36 | |
37 bool IsFetching() const { | |
38 return State::kFetchingSelf <= state_ && state_ < State::kFinished; | |
39 } | |
40 bool HasFinished() const { return state_ == State::kFinished; } | |
41 | |
42 private: | |
43 ModuleTreeLinker(const AncestorList& ancestor_list_with_url, | |
44 Modulator*, | |
45 ModuleTreeLinkerRegistry*, | |
46 ModuleTreeClient*); | |
47 | |
48 enum class State { | |
49 kInitial, | |
50 // Running fetch of the module script corresponding to the target node. | |
51 kFetchingSelf, | |
52 // Running fetch of descendants of the target node. | |
53 kFetchingDependencies, | |
54 // Instantiating m_moduleScript and the node descendants. | |
hiroshige
2017/04/19 22:24:08
nit: /m_moduleScript/module_script_/
kouhei (in TOK)
2017/04/24 01:06:22
Done.
| |
55 kInstantiating, | |
56 kFinished, | |
57 }; | |
58 #if DCHECK_IS_ON() | |
59 static const char* StateToString(State); | |
60 #endif | |
61 void AdvanceState(State); | |
62 | |
63 void FetchSelf(const ModuleScriptFetchRequest&, ModuleGraphLevel); | |
64 // Implements SingleModuleClient | |
65 void NotifyModuleLoadFinished(ModuleScript*) override; | |
66 | |
67 void FetchDescendants(); | |
68 enum class DescendantLoad { kFailed, kSuccess }; | |
69 void NotifyOneDescendantFinished(DescendantLoad was_success); | |
70 | |
71 void Instantiate(); | |
72 HeapHashSet<Member<ModuleScript>> UninstantiatedInclusiveDescendants(); | |
73 | |
74 class DependencyModuleClient; | |
75 friend class DependencyModuleClient; | |
76 | |
77 Member<Modulator> modulator_; | |
78 Member<ModuleTreeLinkerRegistry> registry_; | |
79 Member<ModuleTreeClient> client_; | |
80 HashSet<KURL> ancestor_list_with_url_; | |
81 State state_ = State::kInitial; | |
82 // Correspond to _result_ in | |
83 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri pt-graph-fetching-procedure | |
84 Member<ModuleScript> module_script_; | |
85 // Correspond to _descendants result_ in | |
86 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri pt-graph-fetching-procedure | |
87 Member<ModuleScript> descendants_module_script_; | |
88 size_t num_incomplete_descendants_ = 0; | |
89 HeapHashSet<Member<DependencyModuleClient>> dependency_clients_; | |
90 }; | |
91 | |
92 } // namespace blink | |
93 | |
94 #endif | |
OLD | NEW |