flutter_flutter/engine/core/app/AbstractModule.h
Adam Barth 5192329f25 Script-based imports should basically work
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
2014-11-12 13:29:14 -08:00

51 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.
#ifndef SKY_ENGINE_CORE_APP_ABSTRACT_MODULE_H_
#define SKY_ENGINE_CORE_APP_ABSTRACT_MODULE_H_
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "core/app/ModuleLoader.h"
#include "core/dom/ContextLifecycleObserver.h"
#include "core/dom/Document.h"
#include "core/events/EventTarget.h"
#include "wtf/RefCounted.h"
namespace blink {
class Application;
class AbstractModule : public RefCounted<AbstractModule>,
public EventTargetWithInlineData,
public ContextLifecycleObserver,
public ModuleLoader::Client {
DEFINE_WRAPPERTYPEINFO();
REFCOUNTED_EVENT_TARGET(AbstractModule);
public:
virtual ~AbstractModule();
Document* document() const { return document_.get(); }
const String& url() const { return url_; }
ScriptPromise import(ScriptState*, const String& url);
protected:
AbstractModule(ExecutionContext*, PassRefPtr<Document>, const String& url);
virtual Application* GetApplication() = 0;
private:
ExecutionContext* executionContext() const override;
void OnModuleLoadComplete(ModuleLoader*, Module*) override;
RefPtr<Document> document_;
String url_;
HashMap<OwnPtr<ModuleLoader>, RefPtr<ScriptPromiseResolver>> loaders_;
};
} // namespace blink
#endif // SKY_ENGINE_CORE_APP_ABSTRACT_MODULE_H_