Index: extensions/renderer/api_binding.h |
diff --git a/extensions/renderer/api_binding.h b/extensions/renderer/api_binding.h |
index 5c50ed90066981353f69a020ea883bd97a6b93b7..acb4c43eee86c35cd9a371fd3b540da47c7ba696 100644 |
--- a/extensions/renderer/api_binding.h |
+++ b/extensions/renderer/api_binding.h |
@@ -41,6 +41,11 @@ class APITypeReferenceMap; |
// contexts. |
class APIBinding { |
public: |
+ using CreateCustomType = |
+ base::Callback<v8::Local<v8::Object>(v8::Local<v8::Context> context, |
+ const std::string& type_name, |
+ const std::string& property_name)>; |
+ |
// The callback for determining if a given API method (specified by |name|) |
// is available. |
using AvailabilityCallback = base::Callback<bool(const std::string& name)>; |
@@ -56,6 +61,7 @@ class APIBinding { |
const base::ListValue* type_definitions, |
const base::ListValue* event_definitions, |
const base::DictionaryValue* property_definitions, |
+ const CreateCustomType& create_custom_type, |
std::unique_ptr<APIBindingHooks> binding_hooks, |
APITypeReferenceMap* type_refs, |
APIRequestHandler* request_handler, |
@@ -77,10 +83,22 @@ class APIBinding { |
// first instance is created. |
void InitializeTemplate(v8::Isolate* isolate); |
+ // Decorates |object_template| with the properties specified by |properties|. |
+ void DecorateTemplateWithProperties( |
+ v8::Isolate* isolate, |
+ v8::Local<v8::ObjectTemplate> object_template, |
+ const base::DictionaryValue& properties); |
+ |
// Handler for getting the v8::Object associated with an event on the API. |
static void GetEventObject(v8::Local<v8::Name>, |
const v8::PropertyCallbackInfo<v8::Value>& info); |
+ // Handler for getting the v8::Object associated with a custom property on the |
+ // API. |
+ static void GetCustomPropertyObject( |
+ v8::Local<v8::Name> property, |
+ const v8::PropertyCallbackInfo<v8::Value>& info); |
+ |
// Handles a call an API method with the given |name| and matches the |
// arguments against |signature|. |
void HandleCall(const std::string& name, |
@@ -98,6 +116,10 @@ class APIBinding { |
struct EventData; |
std::vector<std::unique_ptr<EventData>> events_; |
+ // The custom properties on the API; these are rare. |
+ struct CustomPropertyData; |
+ std::vector<std::unique_ptr<CustomPropertyData>> custom_properties_; |
+ |
// The pair for enum entry is <original, js-ified>. JS enum entries use |
// SCREAMING_STYLE (whereas our API enums are just inconsistent). |
using EnumEntry = std::pair<std::string, std::string>; |
@@ -107,6 +129,9 @@ class APIBinding { |
// The associated properties of the API, if any. |
const base::DictionaryValue* property_definitions_; |
+ // The callback for constructing a custom type. |
+ CreateCustomType create_custom_type_; |
+ |
// The registered hooks for this API. |
std::unique_ptr<APIBindingHooks> binding_hooks_; |