Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.h

Issue 2823803003: [ES6 modules] Introduce ModuleTreeLinker (Closed)
Patch Set: yhirano2 Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698