mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This CL adds the beginning of a new module loading system that matches the conceptual module in the spec. I've writed it up to the import API on AbstractModule. In a future CL, I'll replace the old module loading system with this one. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/720903002
48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "config.h"
|
|
#include "core/app/AbstractModule.h"
|
|
|
|
#include "core/app/Module.h"
|
|
|
|
namespace blink {
|
|
|
|
AbstractModule::AbstractModule(ExecutionContext* context,
|
|
PassRefPtr<Document> document,
|
|
const String& url)
|
|
: ContextLifecycleObserver(context),
|
|
document_(document),
|
|
url_(url) {
|
|
document_->setModule(this);
|
|
}
|
|
|
|
AbstractModule::~AbstractModule() {
|
|
document_->setModule(nullptr);
|
|
}
|
|
|
|
ExecutionContext* AbstractModule::executionContext() const {
|
|
return ContextLifecycleObserver::executionContext();
|
|
}
|
|
|
|
ScriptPromise AbstractModule::import(ScriptState* script_state,
|
|
const String& url_string) {
|
|
KURL url = document()->completeURL(url_string);
|
|
RefPtr<ScriptPromiseResolver> resolver =
|
|
ScriptPromiseResolver::create(script_state);
|
|
OwnPtr<ModuleLoader> loader =
|
|
adoptPtr(new ModuleLoader(this, GetApplication(), url));
|
|
loaders_.set(loader.release(), resolver);
|
|
return resolver->promise();
|
|
}
|
|
|
|
void AbstractModule::OnModuleLoadComplete(ModuleLoader* loader,
|
|
Module* module) {
|
|
RefPtr<ScriptPromiseResolver> resolver = loaders_.take(loader);
|
|
ScriptState::Scope scope(resolver->scriptState());
|
|
resolver->resolve(module->exports().v8Value());
|
|
}
|
|
|
|
} // namespace blink
|