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 #ifndef GIN_MODULES_MODULE_RUNNER_DELEGATE_H_ 6 #define GIN_MODULES_MODULE_RUNNER_DELEGATE_H_ 7 8 #include <map> 9 10 #include "base/compiler_specific.h" 11 #include "gin/gin_export.h" 12 #include "gin/modules/file_module_provider.h" 13 #include "gin/shell_runner.h" 14 15 namespace gin { 16 17 typedef v8::Local<v8::Value> (*ModuleGetter)(v8::Isolate* isolate); 18 19 // Emebedders that use AMD modules will probably want to use a RunnerDelegate 20 // that inherits from ModuleRunnerDelegate. ModuleRunnerDelegate lets embedders 21 // register built-in modules and routes module requests to FileModuleProvider. 22 class GIN_EXPORT ModuleRunnerDelegate : public ShellRunnerDelegate { 23 public: 24 explicit ModuleRunnerDelegate( 25 const std::vector<base::FilePath>& search_paths); 26 virtual ~ModuleRunnerDelegate(); 27 28 void AddBuiltinModule(const std::string& id, ModuleGetter getter); 29 30 protected: 31 void AttemptToLoadMoreModules(Runner* runner); 32 33 private: 34 typedef std::map<std::string, ModuleGetter> BuiltinModuleMap; 35 36 // From ShellRunnerDelegate: 37 virtual v8::Handle<v8::ObjectTemplate> GetGlobalTemplate( 38 ShellRunner* runner, 39 v8::Isolate* isolate) OVERRIDE; 40 virtual void DidCreateContext(ShellRunner* runner) OVERRIDE; 41 virtual void DidRunScript(ShellRunner* runner) OVERRIDE; 42 43 BuiltinModuleMap builtin_modules_; 44 FileModuleProvider module_provider_; 45 46 DISALLOW_COPY_AND_ASSIGN(ModuleRunnerDelegate); 47 }; 48 49 } // namespace gin 50 51 #endif // GIN_MODULES_MODULE_RUNNER_DELEGATE_H_ 52