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 "base/bind.h"
      8 #include "base/bind_helpers.h"
      9 #include "gin/modules/module_registry.h"
     10 #include "gin/object_template_builder.h"
     11 #include "gin/public/context_holder.h"
     12 
     13 namespace gin {
     14 
     15 ModuleRunnerDelegate::ModuleRunnerDelegate(
     16   const std::vector<base::FilePath>& search_paths)
     17     : module_provider_(search_paths) {
     18 }
     19 
     20 ModuleRunnerDelegate::~ModuleRunnerDelegate() {
     21 }
     22 
     23 void ModuleRunnerDelegate::AddBuiltinModule(const std::string& id,
     24                                             ModuleGetter getter) {
     25   builtin_modules_[id] = base::Bind(getter);
     26 }
     27 
     28 void ModuleRunnerDelegate::AddBuiltinModule(const std::string& id,
     29     const ModuleGetterCallback& getter) {
     30   builtin_modules_[id] = getter;
     31 }
     32 
     33 void ModuleRunnerDelegate::AttemptToLoadMoreModules(Runner* runner) {
     34   ModuleRegistry* registry = ModuleRegistry::From(
     35       runner->GetContextHolder()->context());
     36   registry->AttemptToLoadMoreModules(runner->GetContextHolder()->isolate());
     37   module_provider_.AttempToLoadModules(
     38       runner, registry->unsatisfied_dependencies());
     39 }
     40 
     41 v8::Handle<v8::ObjectTemplate> ModuleRunnerDelegate::GetGlobalTemplate(
     42     ShellRunner* runner,
     43     v8::Isolate* isolate) {
     44   v8::Handle<v8::ObjectTemplate> templ = ObjectTemplateBuilder(isolate).Build();
     45   ModuleRegistry::RegisterGlobals(isolate, templ);
     46   return templ;
     47 }
     48 
     49 void ModuleRunnerDelegate::DidCreateContext(ShellRunner* runner) {
     50   ShellRunnerDelegate::DidCreateContext(runner);
     51 
     52   v8::Handle<v8::Context> context = runner->GetContextHolder()->context();
     53   ModuleRegistry* registry = ModuleRegistry::From(context);
     54 
     55   v8::Isolate* isolate = runner->GetContextHolder()->isolate();
     56 
     57   for (BuiltinModuleMap::const_iterator it = builtin_modules_.begin();
     58        it != builtin_modules_.end(); ++it) {
     59     registry->AddBuiltinModule(isolate, it->first, it->second.Run(isolate));
     60   }
     61 }
     62 
     63 void ModuleRunnerDelegate::DidRunScript(ShellRunner* runner) {
     64   AttemptToLoadMoreModules(runner);
     65 }
     66 
     67 }  // namespace gin
     68