Chromium Code Reviews| Index: gin/modules/module_registry.h |
| diff --git a/gin/modules/module_registry.h b/gin/modules/module_registry.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7b3f34db5c419268d0d13ff9b4e7ee0025f5c816 |
| --- /dev/null |
| +++ b/gin/modules/module_registry.h |
| @@ -0,0 +1,67 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef GIN_MODULES_MODULE_REGISTRY_H_ |
| +#define GIN_MODULES_MODULE_REGISTRY_H_ |
| + |
| +#include <list> |
| +#include <string> |
| +#include "base/compiler_specific.h" |
| +#include "gin/per_context_data.h" |
| + |
| +namespace gin { |
| + |
| +struct PendingModule; |
| + |
| +// This class implements the Asynchronous Module Definition (AMD) API. |
| +// https://github.com/amdjs/amdjs-api/wiki/AMD |
| +// |
| +// Our implementation isn't complete yet. Missing features: |
| +// 1) Built-in support for require, exports, and module. |
| +// 2) Path resoltuion in module names. |
| +// |
| +// For these reasons, we don't have an "amd" property on the "define" |
| +// function. The spec says we should only add that property once our |
| +// implementation complies with the specification. |
| +// |
| +class ModuleRegistry : public ContextSupplement { |
| + public: |
| + 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::ObjectTemplate> templ); |
| + |
| + // Takes ownership of |pending|. The caller must have already entered |
| + // our context. |
| + void AddPendingModule(v8::Isolate* isolate, PendingModule* pending); |
|
Aaron Boodman
2013/11/15 18:56:06
What is the rationale for not relying upon base? I
abarth-chromium
2013/11/15 19:13:37
Yeah, I agree that it's awkward not to have base.
Aaron Boodman
2013/11/15 19:54:30
In the bravo case, at least, the developer provide
|
| + |
| + private: |
| + typedef std::list<PendingModule*> PendingModuleList; // Owning reference. |
| + |
| + explicit ModuleRegistry(v8::Isolate* isolate); |
| + virtual ~ModuleRegistry(); |
| + |
| + static v8::Handle<v8::String> Key(v8::Isolate* isolate); |
| + |
| + // From ContextSupplement: |
| + virtual void Detach(v8::Handle<v8::Context> context) OVERRIDE; |
| + |
| + // Takes ownership of |pending|. |
| + bool AttemptToLoad(v8::Isolate* isolate, PendingModule* pending); |
| + void AttemptToLoadPendingModules(v8::Isolate* isolate); |
| + |
| + v8::Persistent<v8::Object> modules_; |
| + PendingModuleList pending_modules_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ModuleRegistry); |
| +}; |
| + |
| +} // namespace gin |
| + |
| +#endif // GIN_MODULES_MODULE_REGISTRY_H_ |