Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Unified Diff: Source/bindings/core/v8/V8DOMConfiguration.h

Issue 922233002: bindings: Makes runtime-enabled attributes on prototype chains compilable. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Addressed review comments. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/bindings/core/v8/V8DOMConfiguration.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/core/v8/V8DOMConfiguration.h
diff --git a/Source/bindings/core/v8/V8DOMConfiguration.h b/Source/bindings/core/v8/V8DOMConfiguration.h
index 42d85dcbecd53d7934f031b9d48289849b73708d..d54bde35354be0f41c3185080e08752528d0c051 100644
--- a/Source/bindings/core/v8/V8DOMConfiguration.h
+++ b/Source/bindings/core/v8/V8DOMConfiguration.h
@@ -68,6 +68,12 @@ public:
InstanceOrPrototypeConfiguration instanceOrPrototypeConfiguration;
};
+ static void installAttributes(v8::Isolate*, v8::Handle<v8::ObjectTemplate> instanceTemplate, v8::Handle<v8::ObjectTemplate> prototype, const AttributeConfiguration*, size_t attributeCount);
+
+ static void installAttribute(v8::Isolate*, v8::Handle<v8::ObjectTemplate> instanceTemplate, v8::Handle<v8::ObjectTemplate> prototype, const AttributeConfiguration&);
+
+ static void installAttribute(v8::Isolate*, v8::Handle<v8::Object> instanceTemplate, v8::Handle<v8::Object> prototype, const AttributeConfiguration&);
+
// AccessorConfiguration translates into calls to SetAccessorProperty()
// on prototype ObjectTemplate.
struct AccessorConfiguration {
@@ -82,30 +88,9 @@ public:
ExposeConfiguration exposeConfiguration;
};
- static void installAttributes(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v8::Handle<v8::ObjectTemplate>, const AttributeConfiguration*, size_t attributeCount);
-
- template<class ObjectOrTemplate>
- static inline void installAttribute(v8::Handle<ObjectOrTemplate> instanceTemplate, v8::Handle<ObjectOrTemplate> prototype, const AttributeConfiguration& attribute, v8::Isolate* isolate)
- {
- DOMWrapperWorld& world = DOMWrapperWorld::current(isolate);
- if (attribute.exposeConfiguration == OnlyExposedToPrivateScript && !world.isPrivateScriptIsolatedWorld())
- return;
-
- v8::AccessorGetterCallback getter = attribute.getter;
- v8::AccessorSetterCallback setter = attribute.setter;
- if (world.isMainWorld()) {
- if (attribute.getterForMainWorld)
- getter = attribute.getterForMainWorld;
- if (attribute.setterForMainWorld)
- setter = attribute.setterForMainWorld;
- }
- (attribute.instanceOrPrototypeConfiguration == OnPrototype ? prototype : instanceTemplate)->SetAccessor(v8AtomicString(isolate, attribute.name),
- getter,
- setter,
- v8::External::New(isolate, const_cast<WrapperTypeInfo*>(attribute.data)),
- attribute.settings,
- attribute.attribute);
- }
+ static void installAccessors(v8::Isolate*, v8::Handle<v8::ObjectTemplate> prototype, v8::Handle<v8::Signature>, const AccessorConfiguration*, size_t accessorCount);
+
+ static void installAccessor(v8::Isolate*, v8::Handle<v8::ObjectTemplate> prototype, v8::Handle<v8::Signature>, const AccessorConfiguration&);
enum ConstantType {
ConstantTypeShort,
@@ -128,8 +113,19 @@ public:
ConstantType type;
};
- static void installConstants(v8::Isolate*, v8::Handle<v8::FunctionTemplate>, v8::Handle<v8::ObjectTemplate>, const ConstantConfiguration*, size_t constantCount);
- static void installConstant(v8::Isolate*, v8::Handle<v8::FunctionTemplate>, v8::Handle<v8::ObjectTemplate>, const char* name, v8::AccessorGetterCallback);
+ // Constant installation
+ //
+ // installConstants and installConstant are used for simple constants. They
+ // install constants using v8::Template::Set(), which results in a property
+ // that is much faster to access from scripts.
+ // installConstantWithGetter is used when some C++ code needs to be executed
+ // when the constant is accessed, e.g. to handle deprecation or measuring
+ // usage. The property appears the same to scripts, but is slower to access.
+ static void installConstants(v8::Isolate*, v8::Handle<v8::FunctionTemplate> functionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const ConstantConfiguration*, size_t constantCount);
+
+ static void installConstant(v8::Isolate*, v8::Handle<v8::FunctionTemplate> functionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const ConstantConfiguration&);
+
+ static void installConstantWithGetter(v8::Isolate*, v8::Handle<v8::FunctionTemplate> functionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const char* name, v8::AccessorGetterCallback);
// MethodConfiguration translates into calls to Set() for setting up an
// object's callbacks. It sets the method on both the FunctionTemplate or
@@ -162,20 +158,13 @@ public:
ExposeConfiguration exposeConfiguration;
};
- static void installMethods(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v8::Handle<v8::Signature>, v8::PropertyAttribute, const MethodConfiguration*, size_t callbackCount);
+ static void installMethods(v8::Isolate*, v8::Handle<v8::ObjectTemplate> prototype, v8::Handle<v8::Signature>, v8::PropertyAttribute, const MethodConfiguration*, size_t callbackCount);
- template <class ObjectOrTemplate, class Configuration>
- static void installMethod(v8::Handle<ObjectOrTemplate> objectOrTemplate, v8::Handle<v8::Signature> signature, v8::PropertyAttribute attribute, const Configuration& callback, v8::Isolate* isolate)
- {
- DOMWrapperWorld& world = DOMWrapperWorld::current(isolate);
- if (callback.exposeConfiguration == OnlyExposedToPrivateScript && !world.isPrivateScriptIsolatedWorld())
- return;
+ static void installMethod(v8::Isolate*, v8::Handle<v8::FunctionTemplate>, v8::Handle<v8::Signature>, v8::PropertyAttribute, const MethodConfiguration&);
- v8::Local<v8::FunctionTemplate> functionTemplate = functionTemplateForCallback(isolate, signature, callback.callbackForWorld(world), callback.length);
- setMethod(objectOrTemplate, callback.methodName(isolate), functionTemplate, attribute);
- }
+ static void installMethod(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v8::Handle<v8::Signature>, v8::PropertyAttribute, const MethodConfiguration&);
- static void installAccessors(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v8::Handle<v8::Signature>, const AccessorConfiguration*, size_t accessorCount);
+ static void installMethod(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v8::Handle<v8::Signature>, v8::PropertyAttribute, const SymbolKeyedMethodConfiguration&);
static v8::Local<v8::Signature> installDOMClassTemplate(v8::Isolate*, v8::Local<v8::FunctionTemplate>, const char* interfaceName, v8::Handle<v8::FunctionTemplate> parentClass, size_t fieldCount,
const AttributeConfiguration*, size_t attributeCount,
@@ -183,22 +172,6 @@ public:
const MethodConfiguration*, size_t callbackCount);
static v8::Handle<v8::FunctionTemplate> domClassTemplate(v8::Isolate*, WrapperTypeInfo*, void (*)(v8::Local<v8::FunctionTemplate>, v8::Isolate*));
-
-private:
- static void setMethod(v8::Handle<v8::Object> target, v8::Handle<v8::Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttribute attribute)
- {
- target->Set(name, functionTemplate->GetFunction());
- }
- static void setMethod(v8::Handle<v8::FunctionTemplate> target, v8::Handle<v8::Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttribute attribute)
- {
- target->Set(name, functionTemplate, attribute);
- }
- static void setMethod(v8::Handle<v8::ObjectTemplate> target, v8::Handle<v8::Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttribute attribute)
- {
- target->Set(name, functionTemplate, attribute);
- }
-
- static v8::Handle<v8::FunctionTemplate> functionTemplateForCallback(v8::Isolate*, v8::Handle<v8::Signature>, v8::FunctionCallback, int length);
};
} // namespace blink
« no previous file with comments | « no previous file | Source/bindings/core/v8/V8DOMConfiguration.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698