Home | History | Annotate | Download | only in modules
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "gin/modules/module_runner_delegate.h"
      6 
      7 #include "gin/modules/module_registry.h"
      8 
      9 namespace gin {
     10 
     11 ModuleRunnerDelegate::ModuleRunnerDelegate(
     12   const std::vector<base::FilePath>& search_paths)
     13     : module_provider_(search_paths) {
     14 }
     15 
     16 ModuleRunnerDelegate::~ModuleRunnerDelegate() {
     17 }
     18 
     19 void ModuleRunnerDelegate::AddBuiltinModule(const std::string& id,
     20                                             ModuleTemplateGetter templ) {
     21   builtin_modules_[id] = templ;
     22 }
     23 
     24 void ModuleRunnerDelegate::AttemptToLoadMoreModules(Runner* runner) {
     25   ModuleRegistry* registry = ModuleRegistry::From(runner->context());
     26   registry->AttemptToLoadMoreModules(runner->isolate());
     27   module_provider_.AttempToLoadModules(
     28       runner, registry->unsatisfied_dependencies());
     29 }
     30 
     31 v8::Handle<v8::ObjectTemplate> ModuleRunnerDelegate::GetGlobalTemplate(
     32     Runner* runner) {
     33   v8::Handle<v8::ObjectTemplate> templ = v8::ObjectTemplate::New();
     34   ModuleRegistry::RegisterGlobals(runner->isolate(), templ);
     35   return templ;
     36 }
     37 
     38 void ModuleRunnerDelegate::DidCreateContext(Runner* runner) {
     39   RunnerDelegate::DidCreateContext(runner);
     40 
     41   v8::Handle<v8::Context> context = runner->context();
     42   ModuleRegistry* registry = ModuleRegistry::From(context);
     43 
     44   for (BuiltinModuleMap::const_iterator it = builtin_modules_.begin();
     45        it != builtin_modules_.end(); ++it) {
     46     registry->AddBuiltinModule(runner->isolate(), it->first,
     47                                it->second(runner->isolate()));
     48   }
     49 }
     50 
     51 void ModuleRunnerDelegate::DidRunScript(Runner* runner) {
     52   AttemptToLoadMoreModules(runner);
     53 }
     54 
     55 }  // namespace gin
     56