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