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

Side by Side Diff: third_party/WebKit/Source/core/dom/ModulePendingScript.cpp

Issue 2815453006: Introduce ModulePendingScript (Closed)
Patch Set: Rebase 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 #include "core/dom/ModulePendingScript.h"
6
7 #include "core/dom/ScriptLoader.h"
8 #include "core/frame/LocalFrame.h"
9
10 namespace blink {
11
12 ModulePendingScriptTreeClient::ModulePendingScriptTreeClient()
13 : module_script_(nullptr), pending_script_(nullptr) {}
14
15 void ModulePendingScriptTreeClient::SetPendingScript(
16 ModulePendingScript* pending_script) {
17 DCHECK(!pending_script_);
18 pending_script_ = pending_script;
19
20 if (finished_) {
21 pending_script_->NotifyModuleTreeLoadFinished();
22 }
23 }
24
25 void ModulePendingScriptTreeClient::NotifyModuleTreeLoadFinished(
26 ModuleScript* module_script) {
27 DCHECK(!(module_script && module_script->InstantiationState() ==
28 ModuleInstantiationState::kUninstantiated));
29 DCHECK(!finished_);
30 finished_ = true;
31 module_script_ = module_script;
32
33 if (pending_script_)
34 pending_script_->NotifyModuleTreeLoadFinished();
35 }
36
37 DEFINE_TRACE(ModulePendingScriptTreeClient) {
38 visitor->Trace(module_script_);
39 visitor->Trace(pending_script_);
40 ModuleTreeClient::Trace(visitor);
41 }
42
43 ModulePendingScript::ModulePendingScript(ScriptElementBase* element,
44 ModulePendingScriptTreeClient* client)
45 : PendingScript(element, TextPosition()), module_tree_client_(client) {
46 CHECK(this->GetElement());
47 DCHECK(module_tree_client_);
48 client->SetPendingScript(this);
49 }
50
51 ModulePendingScript::~ModulePendingScript() {}
52
53 void ModulePendingScript::DisposeInternal() {
54 module_tree_client_ = nullptr;
55 }
56
57 DEFINE_TRACE(ModulePendingScript) {
58 visitor->Trace(module_tree_client_);
59 PendingScript::Trace(visitor);
60 }
61
62 void ModulePendingScript::NotifyModuleTreeLoadFinished() {
63 CHECK(!IsReady());
64 ready_ = true;
65
66 if (Client())
67 Client()->PendingScriptFinished(this);
68 }
69
70 Script* ModulePendingScript::GetSource(const KURL& document_url,
71 bool& error_occurred) const {
72 CHECK(IsReady());
73 error_occurred = ErrorOccurred();
74 return GetModuleScript();
75 }
76
77 bool ModulePendingScript::ErrorOccurred() const {
78 CHECK(IsReady());
79 return !GetModuleScript();
80 }
81
82 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698