Index: gin/modules/module_registry.h |
diff --git a/gin/modules/module_registry.h b/gin/modules/module_registry.h |
index 755875c3539dc9290d456b42bcb51553febe08b8..6eac9b03a8f4e38d440699c5989b34f01fd480f6 100644 |
--- a/gin/modules/module_registry.h |
+++ b/gin/modules/module_registry.h |
@@ -9,6 +9,7 @@ |
#include <map> |
#include <set> |
#include <string> |
+#include <vector> |
#include "base/callback.h" |
#include "base/compiler_specific.h" |
@@ -18,7 +19,46 @@ |
namespace gin { |
-struct PendingModule; |
+struct GIN_EXPORT PendingModule { |
+ PendingModule(); |
+ ~PendingModule(); |
+ |
+ std::string id; |
+ std::vector<std::string> dependencies; |
+ v8::Persistent<v8::Value> factory; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(PendingModule); |
+}; |
+ |
+// ModuleLoader is responsible for registering the necessary bindings for |
+// modules with v8 as well as responding to the bindings (by way of |
+// Load()). Subclasses should invoke the appropriate RegisterGlobals |
+// function. ModuleLoader is owned by the context. |
+class GIN_EXPORT ModuleLoader : public ContextSupplement { |
+ public: |
+ static ModuleLoader* From(v8::Handle<v8::Context> context); |
+ |
+ // Loads the specified module. Loading need not be synchronous, and often is |
+ // not. |
+ virtual void Load(v8::Handle<v8::Context> context, |
+ scoped_ptr<PendingModule> pending) = 0; |
+ |
+ protected: |
+ explicit ModuleLoader(v8::Handle<v8::Context> context); |
+ virtual ~ModuleLoader(); |
+ |
+ static void RegisterGlobals(v8::Isolate* isolate, |
+ v8::Handle<v8::ObjectTemplate> templ); |
+ static void RegisterGlobalsObject(v8::Isolate* isolate, |
+ v8::Handle<v8::Object> obj); |
+ |
+ private: |
+ // From ContextSupplement: |
+ virtual void Detach(v8::Handle<v8::Context> context) OVERRIDE; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ModuleLoader); |
+}; |
// This class implements the Asynchronous Module Definition (AMD) API. |
// https://github.com/amdjs/amdjs-api/wiki/AMD |
@@ -39,9 +79,6 @@ class GIN_EXPORT ModuleRegistry : public ContextSupplement { |
static ModuleRegistry* From(v8::Handle<v8::Context> context); |
- static void RegisterGlobals(v8::Isolate* isolate, |
- v8::Handle<v8::ObjectTemplate> templ); |
- |
// The caller must have already entered our context. |
void AddBuiltinModule(v8::Isolate* isolate, const std::string& id, |
v8::Handle<v8::Value> module); |