1 // Copyright (c) 2012 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.
5 #ifndef CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_
6 #define CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_
12 #include "base/basictypes.h"
13 #include "chrome/renderer/extensions/scoped_persistent.h"
14 #include "v8/include/v8.h"
16 namespace extensions
{
18 // A registry for the v8::Value representations of extension API schemas.
19 // In a way, the v8 counterpart to ExtensionAPI.
20 class V8SchemaRegistry
{
25 // Returns a v8::Array with all the schemas for the APIs in |apis|.
26 v8::Handle
<v8::Array
> GetSchemas(const std::set
<std::string
>& apis
);
28 // Returns a v8::Object for the schema for |api|, possibly from the cache.
29 v8::Handle
<v8::Object
> GetSchema(const std::string
& api
);
32 // Gets the separate context that backs the registry, creating a new one if
34 v8::Handle
<v8::Context
> GetOrCreateContext();
37 typedef std::map
<std::string
, v8::Persistent
<v8::Object
> > SchemaCache
;
38 SchemaCache schema_cache_
;
40 // Single per-instance v8::Context to create v8::Values.
41 // Created lazily via GetOrCreateContext.
42 ScopedPersistent
<v8::Context
> context_
;
44 DISALLOW_COPY_AND_ASSIGN(V8SchemaRegistry
);
47 } // namespace extensions
49 #endif // CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_