module_runner_delegate.h revision 116680a4aac90f2aa7413d9095a592090648e557
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
15namespace gin {
16
17typedef 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.
22class 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