Skip to content
This repository was archived by the owner on Jul 18, 2018. It is now read-only.

Commit e5bb9a3

Browse files
GeorgNeisCommit Bot
authored andcommitted
Don't expect errors in ResolveModuleCallback.
This CL updates ResolveModuleCallback to reflect the HTML specification changes at whatwg/html#2674. Concretely, it replaces certain error handling cases with assertions that these errors can (no longer) happen. Bug: Change-Id: I66490625652c556b0e26218d9fc1015b694c680f Reviewed-on: https://chromium-review.googlesource.com/595973 Commit-Queue: Georg Neis <neis@chromium.org> Reviewed-by: Kouhei Ueno <kouhei@chromium.org> Cr-Commit-Position: refs/heads/master@{#492286}
1 parent 86ad189 commit e5bb9a3

File tree

3 files changed

+21
-115
lines changed

3 files changed

+21
-115
lines changed

third_party/WebKit/Source/bindings/core/v8/ScriptModule.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const char* ScriptModuleStateToString(ScriptModuleState state) {
1717
case ScriptModuleState::kUninstantiated:
1818
return "uninstantiated";
1919
case ScriptModuleState::kInstantiating:
20-
return "instatinating";
20+
return "instantinating";
2121
case ScriptModuleState::kInstantiated:
2222
return "instantiated";
2323
case ScriptModuleState::kEvaluating:
@@ -202,13 +202,9 @@ v8::MaybeLocal<v8::Module> ScriptModule::ResolveModuleCallback(
202202
"ScriptModule", "resolveModuleCallback");
203203
ScriptModule resolved = modulator->GetScriptModuleResolver()->Resolve(
204204
ToCoreStringWithNullCheck(specifier), referrer_record, exception_state);
205-
if (resolved.IsNull()) {
206-
DCHECK(exception_state.HadException());
207-
return v8::MaybeLocal<v8::Module>();
208-
}
209-
205+
DCHECK(!resolved.IsNull());
210206
DCHECK(!exception_state.HadException());
211-
return v8::MaybeLocal<v8::Module>(resolved.module_->NewLocal(isolate));
207+
return resolved.module_->NewLocal(isolate);
212208
}
213209

214210
} // namespace blink

third_party/WebKit/Source/core/dom/ScriptModuleResolverImpl.cpp

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ScriptModule ScriptModuleResolverImpl::Resolve(
4444
const String& specifier,
4545
const ScriptModule& referrer,
4646
ExceptionState& exception_state) {
47-
// https://html.spec.whatwg.org/commit-snapshots/f8e75a974ed9185e5b462bc5b2dfb32034bd1145#hostresolveimportedmodule(referencingmodule,-specifier)
47+
// https://html.spec.whatwg.org/multipage/webappapis.html#hostresolveimportedmodule(referencingmodule,-specifier)
4848
DVLOG(1) << "ScriptModuleResolverImpl::resolve(specifier=\"" << specifier
4949
<< ", referrer.hash=" << ScriptModuleHash::GetHash(referrer) << ")";
5050

@@ -59,42 +59,26 @@ ScriptModule ScriptModuleResolverImpl::Resolve(
5959
// (Modulator) from context where HostResolveImportedModule was called.
6060

6161
// Step 3. Let url be the result of resolving a module specifier given
62-
// referencing module script and specifier. If the result is failure, then
63-
// throw a TypeError exception and abort these steps.
62+
// referencing module script and specifier.
6463
KURL url =
6564
Modulator::ResolveModuleSpecifier(specifier, referrer_module->BaseURL());
66-
if (!url.IsValid()) {
67-
exception_state.ThrowTypeError("Failed to resolve module specifier '" +
68-
specifier + "'");
69-
return ScriptModule();
70-
}
71-
72-
// Step 4. Let resolved module script be moduleMap[url]. If no such entry
73-
// exists, or if resolved module script is null or "fetching", then throw a
74-
// TypeError exception and abort these steps.
65+
66+
// Step 4. Assert: url is never failure, because resolving a module specifier
67+
// must have been previously successful with these same two arguments.
68+
DCHECK(url.IsValid());
69+
70+
// Step 5. Let resolved module script be moduleMap[url]. (This entry must
71+
// exist for us to have gotten to this point.)
7572
ModuleScript* module_script = modulator_->GetFetchedModuleScript(url);
76-
if (!module_script) {
77-
exception_state.ThrowTypeError(
78-
"Failed to load module script for module specifier '" + specifier +
79-
"'");
80-
return ScriptModule();
81-
}
82-
83-
// Step 5. If resolved module script's instantiation state is "errored", then
84-
// throw resolved module script's instantiation error.
85-
// TODO(kouhei): Update spec references.
86-
if (module_script->IsErrored()) {
87-
ScriptValue error = modulator_->GetError(module_script);
88-
exception_state.RethrowV8Exception(error.V8Value());
89-
return ScriptModule();
90-
}
91-
92-
// Step 6. Assert: resolved module script's module record is not null.
93-
ScriptModule record = module_script->Record();
94-
CHECK(!record.IsNull());
95-
96-
// Step 7. Return resolved module script's module record.
97-
return record;
73+
74+
// Step 6. Assert: resolved module script is a module script (i.e., is not
75+
// null or "fetching").
76+
// Step 7. Assert: resolved module script is not errored.
77+
DCHECK(module_script);
78+
CHECK(!module_script->IsErrored());
79+
80+
// Step 8. Return resolved module script's module record.
81+
return module_script->Record();
9882
}
9983

10084
void ScriptModuleResolverImpl::ContextDestroyed(ExecutionContext*) {

third_party/WebKit/Source/core/dom/ScriptModuleResolverImplTest.cpp

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -153,78 +153,4 @@ TEST_F(ScriptModuleResolverImplTest, RegisterResolveSuccess) {
153153
<< "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString();
154154
}
155155

156-
TEST_F(ScriptModuleResolverImplTest, ResolveInvalidModuleSpecifier) {
157-
V8TestingScope scope;
158-
ScriptModuleResolver* resolver = ScriptModuleResolverImpl::Create(
159-
Modulator(), scope.GetExecutionContext());
160-
Modulator()->SetScriptState(scope.GetScriptState());
161-
162-
ModuleScript* referrer_module_script =
163-
CreateReferrerModuleScript(modulator_, scope);
164-
resolver->RegisterModuleScript(referrer_module_script);
165-
166-
ModuleScript* target_module_script =
167-
CreateTargetModuleScript(modulator_, scope);
168-
Modulator()->SetModuleScript(target_module_script);
169-
170-
ScriptModule resolved = resolver->Resolve(
171-
"invalid", referrer_module_script->Record(), scope.GetExceptionState());
172-
EXPECT_TRUE(scope.GetExceptionState().HadException());
173-
EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code());
174-
EXPECT_TRUE(resolved.IsNull());
175-
EXPECT_EQ(0, modulator_->GetFetchedModuleScriptCalled());
176-
}
177-
178-
TEST_F(ScriptModuleResolverImplTest, ResolveLoadFailedModule) {
179-
V8TestingScope scope;
180-
ScriptModuleResolver* resolver = ScriptModuleResolverImpl::Create(
181-
Modulator(), scope.GetExecutionContext());
182-
Modulator()->SetScriptState(scope.GetScriptState());
183-
184-
ModuleScript* referrer_module_script =
185-
CreateReferrerModuleScript(modulator_, scope);
186-
resolver->RegisterModuleScript(referrer_module_script);
187-
188-
ModuleScript* target_module_script =
189-
CreateTargetModuleScript(modulator_, scope);
190-
// Set Modulator::getFetchedModuleScript to return nullptr, which represents
191-
// that the target module failed to load.
192-
Modulator()->SetModuleScript(nullptr);
193-
194-
ScriptModule resolved =
195-
resolver->Resolve("./target.js", referrer_module_script->Record(),
196-
scope.GetExceptionState());
197-
EXPECT_TRUE(scope.GetExceptionState().HadException());
198-
EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code());
199-
EXPECT_TRUE(resolved.IsNull());
200-
EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled());
201-
EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL())
202-
<< "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString();
203-
}
204-
205-
TEST_F(ScriptModuleResolverImplTest, ResolveInstantiationFailedModule) {
206-
V8TestingScope scope;
207-
ScriptModuleResolver* resolver = ScriptModuleResolverImpl::Create(
208-
Modulator(), scope.GetExecutionContext());
209-
Modulator()->SetScriptState(scope.GetScriptState());
210-
211-
ModuleScript* referrer_module_script =
212-
CreateReferrerModuleScript(modulator_, scope);
213-
resolver->RegisterModuleScript(referrer_module_script);
214-
215-
ModuleScript* target_module_script =
216-
CreateTargetModuleScript(modulator_, scope, ScriptModuleState::kErrored);
217-
Modulator()->SetModuleScript(target_module_script);
218-
219-
ScriptModule resolved =
220-
resolver->Resolve("./target.js", referrer_module_script->Record(),
221-
scope.GetExceptionState());
222-
EXPECT_TRUE(scope.GetExceptionState().HadException());
223-
EXPECT_EQ(kUnknownError, scope.GetExceptionState().Code());
224-
EXPECT_TRUE(resolved.IsNull());
225-
EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled());
226-
EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL())
227-
<< "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString();
228-
}
229-
230156
} // namespace blink

0 commit comments

Comments
 (0)