| Index: Source/bindings/templates/interface.cpp
 | 
| diff --git a/Source/bindings/templates/interface.cpp b/Source/bindings/templates/interface.cpp
 | 
| index 62c37431b8d3a9e6cc57675e240da1f630d20448..40089b02e866b3c1ba0af05cb8fc74b19b4fe479 100644
 | 
| --- a/Source/bindings/templates/interface.cpp
 | 
| +++ b/Source/bindings/templates/interface.cpp
 | 
| @@ -18,6 +18,8 @@
 | 
|      Boston, MA 02111-1307, USA.
 | 
|  */
 | 
|  
 | 
| +{% from 'attributes.cpp' import attribute_getter, attribute_getter_callback, class_attributes with context %}
 | 
| +{% from 'constants.cpp' import class_constants, install_constants with context %}
 | 
|  #include "config.h"
 | 
|  {% if conditional_string %}
 | 
|  #if {{conditional_string}}
 | 
| @@ -25,7 +27,7 @@
 | 
|  #include "{{v8_class_name}}.h"
 | 
|  
 | 
|  {% for filename in cpp_includes %}
 | 
| -#include "{{ filename }}"
 | 
| +#include "{{filename}}"
 | 
|  {% endfor %}
 | 
|  
 | 
|  namespace WebCore {
 | 
| @@ -57,36 +59,17 @@ namespace {{cpp_class_name}}V8Internal {
 | 
|  template <typename T> void V8_USE(T) { }
 | 
|  
 | 
|  {% for attribute in attributes %}
 | 
| -static void {{attribute.name}}AttributeGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
 | 
| -{
 | 
| -    {{cpp_class_name}}* imp = {{v8_class_name}}::toNative(info.Holder());
 | 
| -    {{attribute.cpp_type}} result = imp->{{attribute.cpp_method_name}}();
 | 
| -    if (result.get() && DOMDataStore::setReturnValueFromWrapper<{{attribute.v8_type}}>(info.GetReturnValue(), result.get()))
 | 
| -        return;
 | 
| -    v8::Handle<v8::Value> wrapper = toV8(result.get(), info.Holder(), info.GetIsolate());
 | 
| -    if (!wrapper.IsEmpty()) {
 | 
| -        V8HiddenPropertyName::setNamedHiddenReference(info.Holder(), "{{attribute.name}}", wrapper);
 | 
| -        v8SetReturnValue(info, wrapper);
 | 
| -    }
 | 
| -}
 | 
| -
 | 
| -static void {{attribute.name}}AttributeGetterCallback(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
 | 
| -{
 | 
| -    TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter");
 | 
| -    {{cpp_class_name}}V8Internal::{{attribute.name}}AttributeGetter(name, info);
 | 
| -    TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution");
 | 
| -}
 | 
| -
 | 
| +{{attribute_getter(attribute)}}
 | 
| +{{attribute_getter_callback(attribute)}}
 | 
|  {% endfor %}
 | 
|  } // namespace {{cpp_class_name}}V8Internal
 | 
|  
 | 
|  {% if attributes %}
 | 
| -static const V8DOMConfiguration::AttributeConfiguration {{v8_class_name}}Attributes[] = {
 | 
| -{% for attribute in attributes %}
 | 
| -    {"{{attribute.name}}", {{cpp_class_name}}V8Internal::{{attribute.name}}AttributeGetterCallback, 0, 0, 0, 0, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
 | 
| -{% endfor %}
 | 
| -};
 | 
| -
 | 
| +{{class_attributes()}}
 | 
| +{% endif %}
 | 
| +{# FIXME: Move down and merge with install constants #}
 | 
| +{% if constants %}
 | 
| +{{class_constants()}}
 | 
|  {% endif %}
 | 
|  static v8::Handle<v8::FunctionTemplate> Configure{{v8_class_name}}Template(v8::Handle<v8::FunctionTemplate> desc, v8::Isolate* isolate, WrapperWorldType currentWorldType)
 | 
|  {
 | 
| @@ -96,7 +79,16 @@ static v8::Handle<v8::FunctionTemplate> Configure{{v8_class_name}}Template(v8::H
 | 
|      defaultSignature = V8DOMConfiguration::installDOMClassTemplate(desc, "{{interface_name}}", v8::Local<v8::FunctionTemplate>(), {{v8_class_name}}::internalFieldCount,
 | 
|          {{attribute_templates}}, {{number_of_attributes}},
 | 
|          0, 0, isolate, currentWorldType);
 | 
| -    UNUSED_PARAM(defaultSignature); // In some cases, it will not be used.
 | 
| +    UNUSED_PARAM(defaultSignature);
 | 
| +{% if constants %}{# In general more checks than just constants #}
 | 
| +    v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate();
 | 
| +    v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
 | 
| +    UNUSED_PARAM(instance);
 | 
| +    UNUSED_PARAM(proto);
 | 
| +{% endif %}
 | 
| +{% if constants %}
 | 
| +{{install_constants()}}
 | 
| +{% endif %}
 | 
|  
 | 
|      // Custom toString template
 | 
|      desc->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::current()->toStringTemplate());
 | 
| 
 |