| Index: Source/core/scripts/make_runtime_features.py
 | 
| diff --git a/Source/core/scripts/make_runtime_features.py b/Source/core/scripts/make_runtime_features.py
 | 
| index 13e1f9b7610d2bae1c8c19ca0a791e5ceba827be..dd49157b932620bd7277807908503c2c8eb98920 100755
 | 
| --- a/Source/core/scripts/make_runtime_features.py
 | 
| +++ b/Source/core/scripts/make_runtime_features.py
 | 
| @@ -33,41 +33,9 @@ import sys
 | 
|  from in_file import InFile
 | 
|  import in_generator
 | 
|  import license
 | 
| +import template_expander
 | 
|  
 | 
|  
 | 
| -HEADER_TEMPLATE = """%(license)s
 | 
| -#ifndef %(class_name)s_h
 | 
| -#define %(class_name)s_h
 | 
| -
 | 
| -namespace WebCore {
 | 
| -
 | 
| -// A class that stores static enablers for all experimental features.
 | 
| -
 | 
| -class %(class_name)s {
 | 
| -public:
 | 
| -%(method_declarations)s
 | 
| -private:
 | 
| -    %(class_name)s() { }
 | 
| -
 | 
| -%(storage_declarations)s
 | 
| -};
 | 
| -
 | 
| -} // namespace WebCore
 | 
| -
 | 
| -#endif // %(class_name)s_h
 | 
| -"""
 | 
| -
 | 
| -IMPLEMENTATION_TEMPLATE = """%(license)s
 | 
| -#include "config.h"
 | 
| -#include "%(class_name)s.h"
 | 
| -
 | 
| -namespace WebCore {
 | 
| -
 | 
| -%(storage_definitions)s
 | 
| -
 | 
| -} // namespace WebCore
 | 
| -"""
 | 
| -
 | 
|  class RuntimeFeatureWriter(in_generator.Writer):
 | 
|      class_name = "RuntimeEnabledFeatures"
 | 
|      defaults = {
 | 
| @@ -79,9 +47,9 @@ class RuntimeFeatureWriter(in_generator.Writer):
 | 
|  
 | 
|      def __init__(self, in_file_path):
 | 
|          super(RuntimeFeatureWriter, self).__init__(in_file_path)
 | 
| -        self._all_features = self.in_file.name_dictionaries
 | 
| +        self._features = self.in_file.name_dictionaries
 | 
|          # Make sure the resulting dictionaries have all the keys we expect.
 | 
| -        for feature in self._all_features:
 | 
| +        for feature in self._features:
 | 
|              feature['first_lowered_name'] = self._lower_first(feature['name'])
 | 
|              # Most features just check their isFooEnabled bool
 | 
|              # but some depend on more than one bool.
 | 
| @@ -89,7 +57,6 @@ class RuntimeFeatureWriter(in_generator.Writer):
 | 
|              for dependant_name in feature['depends_on']:
 | 
|                  enabled_condition += " && is%sEnabled" % dependant_name
 | 
|              feature['enabled_condition'] = enabled_condition
 | 
| -        self._non_custom_features = filter(lambda feature: not feature['custom'], self._all_features)
 | 
|  
 | 
|      def _lower_first(self, string):
 | 
|          lowered = string[0].lower() + string[1:]
 | 
| @@ -97,42 +64,19 @@ class RuntimeFeatureWriter(in_generator.Writer):
 | 
|          lowered = lowered.replace("iME", "ime")
 | 
|          return lowered
 | 
|  
 | 
| -    def _method_declaration(self, feature):
 | 
| -        if feature['custom']:
 | 
| -            return "    static bool %(first_lowered_name)sEnabled();\n" % feature
 | 
| -        unconditional = """    static void set%(name)sEnabled(bool isEnabled) { is%(name)sEnabled = isEnabled; }
 | 
| -    static bool %(first_lowered_name)sEnabled() { return %(enabled_condition)s; }
 | 
| -"""
 | 
| -        conditional = "#if ENABLE(%(condition)s)\n" + unconditional + """#else
 | 
| -    static void set%(name)sEnabled(bool) { }
 | 
| -    static bool %(first_lowered_name)sEnabled() { return false; }
 | 
| -#endif
 | 
| -"""
 | 
| -        template = conditional if feature['condition'] else unconditional
 | 
| -        return template % feature
 | 
| -
 | 
| -    def _storage_declarations(self, feature):
 | 
| -        declaration = "    static bool is%(name)sEnabled;" % feature
 | 
| -        return self.wrap_with_condition(declaration, feature['condition'])
 | 
| -
 | 
|      def generate_header(self):
 | 
| -        return HEADER_TEMPLATE % {
 | 
| -            'class_name' : self.class_name,
 | 
| +        params = {
 | 
|              'license' : license.license_for_generated_cpp(),
 | 
| -            'method_declarations' : "\n".join(map(self._method_declaration, self._all_features)),
 | 
| -            'storage_declarations' : "\n".join(map(self._storage_declarations, self._non_custom_features)),
 | 
| +            'features' : self._features
 | 
|          }
 | 
| -
 | 
| -    def _storage_definition(self, feature):
 | 
| -        definition = "bool RuntimeEnabledFeatures::is%(name)sEnabled = %(default)s;" % feature
 | 
| -        return self.wrap_with_condition(definition, feature['condition'])
 | 
| +        return template_expander.applytemplate("../page/RuntimeEnabledFeatures.h.tmpl", params)
 | 
|  
 | 
|      def generate_implementation(self):
 | 
| -        return IMPLEMENTATION_TEMPLATE % {
 | 
| -            'class_name' : self.class_name,
 | 
| +        params = {
 | 
|              'license' : license.license_for_generated_cpp(),
 | 
| -            'storage_definitions' : "\n".join(map(self._storage_definition, self._non_custom_features)),
 | 
| +            'features' : self._features
 | 
|          }
 | 
| +        return template_expander.applytemplate("../page/RuntimeEnabledFeatures.cpp.tmpl", params)
 | 
|  
 | 
|  
 | 
|  if __name__ == "__main__":
 | 
| 
 |