Changeset 224191 in webkit


Ignore:
Timestamp:
Oct 30, 2017 11:16:11 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

[Settings] Replace macro driven experimental features code with generated code
https://bugs.webkit.org/show_bug.cgi?id=178994

Patch by Sam Weinig <sam@webkit.org> on 2017-10-30
Reviewed by Simon Fraser.

As a first step toward allowing experimental features to vary based on compile
time flags, replace the macro driven implementation of the WebPreferences part
of experimental features, with one generated from a template file.

  • CMakeLists.txt:
  • DerivedSources.make:
  • Scripts/GeneratePreferences.rb:
  • WebKit.xcodeproj/project.pbxproj:

Generate the new template.

  • Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb: Added.
  • UIProcess/WebPreferences.cpp:

(WebKit::createExperimentalFeaturesVector): Deleted.
(WebKit::WebPreferences::experimentalFeatures): Deleted.
(WebKit::WebPreferences::isEnabledForFeature const): Deleted.
(WebKit::WebPreferences::setEnabledForFeature): Deleted.
(WebKit::WebPreferences::enableAllExperimentalFeatures): Deleted.

Replace macro implementation with template generated one.

Location:
trunk/Source/WebKit
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/CMakeLists.txt

    r224154 r224191  
    909909    ${WEBKIT_DIR}/Scripts/PreferencesTemplates/WebPageUpdatePreferences.cpp.erb
    910910    ${WEBKIT_DIR}/Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb
     911    ${WEBKIT_DIR}/Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb
    911912    ${WEBKIT_DIR}/Scripts/PreferencesTemplates/WebPreferencesKeys.cpp.erb
    912913    ${WEBKIT_DIR}/Scripts/PreferencesTemplates/WebPreferencesKeys.h.erb
     
    915916
    916917add_custom_command(
    917     OUTPUT ${DERIVED_SOURCES_WEBKIT_DIR}/WebPageUpdatePreferences.cpp ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesDefinitions.h ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesKeys.cpp ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesKeys.h ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesStoreDefaultsMap.cpp
     918    OUTPUT ${DERIVED_SOURCES_WEBKIT_DIR}/WebPageUpdatePreferences.cpp ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesDefinitions.h ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesExperimentalFeatures.cpp ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesKeys.cpp ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesKeys.h ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesStoreDefaultsMap.cpp
    918919    MAIN_DEPENDENCY ${WEBKIT_DIR}/Shared/WebPreferences.yaml
    919920    DEPENDS ${WebKit_WEB_PREFERENCES_TEMPLATES}
     
    928929list(APPEND WebKit_SOURCES
    929930    ${DERIVED_SOURCES_WEBKIT_DIR}/WebPageUpdatePreferences.cpp
     931    ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesExperimentalFeatures.cpp
    930932    ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesKeys.cpp
    931933    ${DERIVED_SOURCES_WEBKIT_DIR}/WebPreferencesStoreDefaultsMap.cpp
  • trunk/Source/WebKit/ChangeLog

    r224189 r224191  
     12017-10-30  Sam Weinig  <sam@webkit.org>
     2
     3        [Settings] Replace macro driven experimental features code with generated code
     4        https://bugs.webkit.org/show_bug.cgi?id=178994
     5
     6        Reviewed by Simon Fraser.
     7
     8        As a first step toward allowing experimental features to vary based on compile
     9        time flags, replace the macro driven implementation of the WebPreferences part
     10        of experimental features, with one generated from a template file.
     11
     12        * CMakeLists.txt:
     13        * DerivedSources.make:
     14        * Scripts/GeneratePreferences.rb:
     15        * WebKit.xcodeproj/project.pbxproj:
     16
     17            Generate the new template.
     18       
     19        * Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb: Added.
     20        * UIProcess/WebPreferences.cpp:
     21        (WebKit::createExperimentalFeaturesVector): Deleted.
     22        (WebKit::WebPreferences::experimentalFeatures): Deleted.
     23        (WebKit::WebPreferences::isEnabledForFeature const): Deleted.
     24        (WebKit::WebPreferences::setEnabledForFeature): Deleted.
     25        (WebKit::WebPreferences::enableAllExperimentalFeatures): Deleted.
     26       
     27            Replace macro implementation with template generated one.
     28
    1292017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>
    230
  • trunk/Source/WebKit/DerivedSources.make

    r224154 r224191  
    291291    $(WebKit2)/Scripts/PreferencesTemplates/WebPageUpdatePreferences.cpp.erb \
    292292    $(WebKit2)/Scripts/PreferencesTemplates/WebPreferencesDefinitions.h.erb \
     293    $(WebKit2)/Scripts/PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb \
    293294    $(WebKit2)/Scripts/PreferencesTemplates/WebPreferencesKeys.h.erb \
    294295    $(WebKit2)/Scripts/PreferencesTemplates/WebPreferencesKeys.cpp.erb \
     
    297298#
    298299
    299 all : WebPreferencesDefinitions.h WebPageUpdatePreferences.cpp WebPreferencesKeys.h WebPreferencesKeys.cpp WebPreferencesStoreDefaultsMap.cpp
    300 
    301 WebPreferencesDefinitions%h WebPageUpdatePreferences%cpp WebPreferencesKeys%h WebPreferencesKeys%cpp WebPreferencesStoreDefaultsMap%cpp : $(WebKit2)/Scripts/GeneratePreferences.rb $(WEB_PREFERENCES_TEMPLATES) $(WebKit2)/Shared/WebPreferences.yaml
     300all : WebPageUpdatePreferences.cpp WebPreferencesDefinitions.h WebPreferencesExperimentalFeatures.cpp WebPreferencesKeys.h WebPreferencesKeys.cpp WebPreferencesStoreDefaultsMap.cpp
     301
     302WebPageUpdatePreferences%cpp WebPreferencesDefinitions%h WebPreferencesExperimentalFeatures%cpp WebPreferencesKeys%h WebPreferencesKeys%cpp WebPreferencesStoreDefaultsMap%cpp : $(WebKit2)/Scripts/GeneratePreferences.rb $(WEB_PREFERENCES_TEMPLATES) $(WebKit2)/Shared/WebPreferences.yaml
    302303        $(RUBY) $< --input $(WebKit2)/Shared/WebPreferences.yaml
    303304
  • trunk/Source/WebKit/Scripts/GeneratePreferences.rb

    r224154 r224191  
    160160preferences.renderToFile("PreferencesTemplates/WebPreferencesKeys.cpp.erb", File.join(options[:outputDirectory], "WebPreferencesKeys.cpp"))
    161161preferences.renderToFile("PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb", File.join(options[:outputDirectory], "WebPreferencesStoreDefaultsMap.cpp"))
     162preferences.renderToFile("PreferencesTemplates/WebPreferencesExperimentalFeatures.cpp.erb", File.join(options[:outputDirectory], "WebPreferencesExperimentalFeatures.cpp"))
  • trunk/Source/WebKit/UIProcess/WebPreferences.cpp

    r220270 r224191  
    197197#undef DEFINE_PREFERENCE_GETTER_AND_SETTERS
    198198
    199 #define DEFINE_EXPERIMENTAL_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
    200     void WebPreferences::set##KeyUpper(const Type& value) \
    201     { \
    202         if (!m_store.set##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key(), value)) \
    203             return; \
    204         update##TypeName##ValueForExperimentalFeatureKey(WebPreferencesKey::KeyLower##Key(), value); \
    205     \
    206     } \
    207     \
    208     Type WebPreferences::KeyLower() const \
    209     { \
    210         return m_store.get##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key()); \
    211     } \
    212 
    213 FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DEFINE_EXPERIMENTAL_PREFERENCE_GETTER_AND_SETTERS)
    214 
    215 #undef DEFINE_EXPERIMENTAL_PREFERENCE_GETTER_AND_SETTERS
    216 
    217 static Vector<RefPtr<API::Object>> createExperimentalFeaturesVector()
    218 {
    219     Vector<RefPtr<API::Object>> features;
    220 
    221 #define ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
    222     features.append(API::ExperimentalFeature::create(HumanReadableName, #KeyUpper, HumanReadableDescription, DefaultValue)); \
    223 
    224     FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION)
    225 
    226 #undef ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION
    227 
    228     return features;
    229 }
    230 
    231 const Vector<RefPtr<API::Object>>& WebPreferences::experimentalFeatures()
    232 {
    233     static NeverDestroyed<Vector<RefPtr<API::Object>>> features = createExperimentalFeaturesVector();
    234     return features;
    235 }
    236 
    237 bool WebPreferences::isEnabledForFeature(const API::ExperimentalFeature& feature) const
    238 {
    239     struct FeatureGetterMapping {
    240         const char* name;
    241         bool (WebPreferences::*function) () const;
    242     };
    243 
    244 #define MAKE_FEATURE_GETTER(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
    245     { #KeyUpper, &WebPreferences::KeyLower }, \
    246 
    247     static FeatureGetterMapping getters[] = {
    248         FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(MAKE_FEATURE_GETTER)
    249     };
    250 
    251 #undef MAKE_FEATURE_GETTER
    252 
    253     const String& key = feature.key();
    254 
    255     for (auto& getter : getters) {
    256         if (key == getter.name)
    257             return (this->*getter.function)();
    258     }
    259 
    260     return false;
    261 }
    262 
    263 void WebPreferences::setEnabledForFeature(bool value, const API::ExperimentalFeature& feature)
    264 {
    265     struct FeatureSetterMapping {
    266         const char* name;
    267         void (WebPreferences::*function) (const bool&);
    268     };
    269 
    270 #define MAKE_FEATURE_SETTER(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
    271     { #KeyUpper, &WebPreferences::set##KeyUpper }, \
    272 
    273     static FeatureSetterMapping setters[] = {
    274         FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(MAKE_FEATURE_SETTER)
    275     };
    276 
    277 #undef MAKE_FEATURE_SETTER
    278 
    279     const String& key = feature.key();
    280    
    281     for (auto& setter : setters) {
    282         if (key == setter.name) {
    283             (this->*setter.function)(value);
    284             return;
    285         }
    286     }
    287 }
    288 
    289 void WebPreferences::enableAllExperimentalFeatures()
    290 {
    291 #define SET_FEATURE_ENABLED(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
    292     set##KeyUpper(true); \
    293 
    294     FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(SET_FEATURE_ENABLED)
    295 
    296 #undef SET_FEATURE_ENABLED
    297 }
    298199
    299200bool WebPreferences::anyPagesAreUsingPrivateBrowsing()
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r224154 r224191  
    13571357                7CE4D2281A4916C200C7F152 /* WebProcessPoolMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE4D2261A4916C200C7F152 /* WebProcessPoolMessages.h */; };
    13581358                7CE9CE101FA0767A000177DE /* WebPageUpdatePreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE9CE0F1FA0764D000177DE /* WebPageUpdatePreferences.cpp */; };
     1359                7CEB00DD1FA69ABE0065473B /* WebPreferencesExperimentalFeatures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CEB00DC1FA69A890065473B /* WebPreferencesExperimentalFeatures.cpp */; };
    13591360                7CEFA9621AC0999300B910FD /* APIContentRuleListStoreCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7CEFA9601AC0999300B910FD /* APIContentRuleListStoreCocoa.mm */; };
    13601361                7CF47FF617275B71008ACB91 /* WKBundlePageBanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CF47FF417275B71008ACB91 /* WKBundlePageBanner.cpp */; };
     
    37453746                7CE4D2261A4916C200C7F152 /* WebProcessPoolMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProcessPoolMessages.h; sourceTree = "<group>"; };
    37463747                7CE9CE0F1FA0764D000177DE /* WebPageUpdatePreferences.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebPageUpdatePreferences.cpp; sourceTree = "<group>"; };
     3748                7CEB00DC1FA69A890065473B /* WebPreferencesExperimentalFeatures.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebPreferencesExperimentalFeatures.cpp; sourceTree = "<group>"; };
    37473749                7CEFA9601AC0999300B910FD /* APIContentRuleListStoreCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = APIContentRuleListStoreCocoa.mm; sourceTree = "<group>"; };
    37483750                7CF47FF417275B71008ACB91 /* WKBundlePageBanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKBundlePageBanner.cpp; sourceTree = "<group>"; };
     
    81478149                                1AB1F7951D1B3613007C9BD1 /* WebPaymentCoordinatorProxyMessages.h */,
    81488150                                7CDE73A31F9DAB6500390312 /* WebPreferencesDefinitions.h */,
     8151                                7CEB00DC1FA69A890065473B /* WebPreferencesExperimentalFeatures.cpp */,
    81498152                                7CB100EE1FA2D74A001729EE /* WebPreferencesKeys.cpp */,
    81508153                                7CB100EF1FA2D74B001729EE /* WebPreferencesKeys.h */,
     
    1069410697                                BC5750981268F3C6006F0F12 /* WebPopupMenuProxyMac.mm in Sources */,
    1069510698                                BCD59800112B57BE00EC8C23 /* WebPreferences.cpp in Sources */,
     10699                                7CEB00DD1FA69ABE0065473B /* WebPreferencesExperimentalFeatures.cpp in Sources */,
    1069610700                                7CB100F11FA3858A001729EE /* WebPreferencesKeys.cpp in Sources */,
    1069710701                                BC84EB1812A7100C0083F2DA /* WebPreferencesMac.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.