• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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