| Index: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp | 
| diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp | 
| index e032e1043e7083354420fdd0d8f10eeabe6c255d..baceb7eedd23f10e52a9ea52e7ffd19e0cf300e0 100644 | 
| --- a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp | 
| +++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp | 
| @@ -233,20 +233,15 @@ void ModuleTreeLinker::FetchDescendants() { | 
|  | 
| // Step 2. If record.[[RequestedModules]] is empty, asynchronously complete | 
| // this algorithm with module script. | 
| -  Vector<String> module_requests = | 
| -      modulator_->ModuleRequestsFromScriptModule(record); | 
| -  if (module_requests.IsEmpty()) { | 
| -    // Continue to Instantiate() to process "internal module script graph | 
| -    // fetching procedure" Step 5-. | 
| -    descendants_module_script_ = module_script_; | 
| -    Instantiate(); | 
| -    return; | 
| -  } | 
| +  // Note: We defer this bail-out until Step 5. Step 4 will be no-op anyway if | 
| +  //       record.[[RequestedModules]] is empty. | 
|  | 
| // Step 3. Let urls be a new empty list. | 
| Vector<KURL> urls; | 
|  | 
| // Step 4. For each string requested of record.[[RequestedModules]], | 
| +  Vector<String> module_requests = | 
| +      modulator_->ModuleRequestsFromScriptModule(record); | 
| for (const auto& module_request : module_requests) { | 
| // Step 4.1. Let url be the result of resolving a module specifier given | 
| // module script and requested. | 
| @@ -288,8 +283,22 @@ void ModuleTreeLinker::FetchDescendants() { | 
| // unset. If the caller of this algorithm specified custom perform the fetch | 
| // steps, pass those along while performing the internal module script graph | 
| // fetching procedure. | 
| -  // TODO(kouhei): handle "destination". | 
| -  DCHECK(!urls.IsEmpty()); | 
| + | 
| +  if (urls.IsEmpty()) { | 
| +    // Step 2. If record.[[RequestedModules]] is empty, asynchronously | 
| +    // complete this algorithm with module script. [spec text] | 
| +    // Also, if record.[[RequestedModules]] is not empty but |urls| is | 
| +    // empty here, we can immediately complete this algorithm, as | 
| +    // we don't have to process or wait for anything in Step 5. [non-spec text] | 
| + | 
| +    // Proceed to Instantiate() to continue | 
| +    // "internal module script graph fetching procedure". | 
| +    descendants_module_script_ = module_script_; | 
| +    Instantiate(); | 
| +    return; | 
| +  } | 
| + | 
| +  // Step 5, when "urls" is non-empty. | 
| CHECK_EQ(num_incomplete_descendants_, 0u); | 
| num_incomplete_descendants_ = urls.size(); | 
| for (const KURL& url : urls) { | 
|  |