// Copyright 2013 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 "gin/modules/module_runner_delegate.h"
#include "gin/modules/module_registry.h"
namespace gin {
ModuleRunnerDelegate::ModuleRunnerDelegate(
const std::vector<base::FilePath>& search_paths)
: module_provider_(search_paths) {
}
ModuleRunnerDelegate::~ModuleRunnerDelegate() {
}
void ModuleRunnerDelegate::AddBuiltinModule(const std::string& id,
ModuleTemplateGetter templ) {
builtin_modules_[id] = templ;
}
void ModuleRunnerDelegate::AttemptToLoadMoreModules(Runner* runner) {
ModuleRegistry* registry = ModuleRegistry::From(runner->context());
registry->AttemptToLoadMoreModules(runner->isolate());
module_provider_.AttempToLoadModules(
runner, registry->unsatisfied_dependencies());
}
v8::Handle<v8::ObjectTemplate> ModuleRunnerDelegate::GetGlobalTemplate(
Runner* runner) {
v8::Handle<v8::ObjectTemplate> templ = v8::ObjectTemplate::New();
ModuleRegistry::RegisterGlobals(runner->isolate(), templ);
return templ;
}
void ModuleRunnerDelegate::DidCreateContext(Runner* runner) {
RunnerDelegate::DidCreateContext(runner);
v8::Handle<v8::Context> context = runner->context();
ModuleRegistry* registry = ModuleRegistry::From(context);
for (BuiltinModuleMap::const_iterator it = builtin_modules_.begin();
it != builtin_modules_.end(); ++it) {
registry->AddBuiltinModule(runner->isolate(), it->first,
it->second(runner->isolate()));
}
}
void ModuleRunnerDelegate::DidRunScript(Runner* runner) {
AttemptToLoadMoreModules(runner);
}
} // namespace gin