[Preferences] Adopt shared preferences configuration and script in WebKit
[WebKit-https.git] / Source / WebKit / Scripts / PreferencesTemplates / WebPreferencesInternalDebugFeatures.cpp.erb
1 /*
2 * <%= @warning %>
3 *
4 * Copyright (C) 2018 Apple Inc. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #include "config.h"
29 #include "WebPreferences.h"
30
31 #include "WebPreferencesDefinitions.h"
32 #include "WebPreferencesKeys.h"
33
34 namespace WebKit {
35
36 <%- for @pref in @internalFeatures do -%>
37 void WebPreferences::set<%= @pref.name %>(const bool& value)
38 {
39     if (!m_store.setBoolValueForKey(WebPreferencesKey::<%= @pref.nameLower %>Key(), value))
40         return;
41     updateBoolValueForInternalDebugFeatureKey(WebPreferencesKey::<%= @pref.nameLower %>Key(), value);
42 }
43
44 bool WebPreferences::<%= @pref.nameLower %>() const
45 {
46     return m_store.getBoolValueForKey(WebPreferencesKey::<%= @pref.nameLower %>Key());
47 }
48
49 <%- end -%>
50 const Vector<RefPtr<API::Object>>& WebPreferences::internalDebugFeatures()
51 {
52     static NeverDestroyed<Vector<RefPtr<API::Object>>> features(std::initializer_list<RefPtr<API::Object>> {
53 <%- for @pref in @internalFeatures do -%>
54 <%- if @pref.condition -%>
55 #if <%= @pref.condition %>
56 <%- end -%>
57         API::InternalDebugFeature::create(<%= @pref.humanReadableName %>, "<%= @pref.name %>", <%= @pref.humanReadableDescription %>, DEFAULT_VALUE_FOR_<%= @pref.name %>, <%= @pref.hidden %>),
58 <%- if @pref.condition -%>
59 #endif
60 <%- end -%>
61 <%- end -%>
62     });
63
64     return features;
65 }
66
67 bool WebPreferences::isFeatureEnabled(const API::InternalDebugFeature& feature) const
68 {
69     struct FeatureGetterMapping {
70         const char* name;
71         bool (WebPreferences::*function) () const;
72     };
73
74     static FeatureGetterMapping getters[] = {
75 <%- for @pref in @internalFeatures do -%>
76 <%- if @pref.condition -%>
77 #if <%= @pref.condition %>
78 <%- end -%>
79         { "<%= @pref.name %>", &WebPreferences::<%= @pref.nameLower %> },
80 <%- if @pref.condition -%>
81 #endif
82 <%- end -%>
83 <%- end -%>
84     };
85
86     const String& key = feature.key();
87
88     for (auto& getter : getters) {
89         if (key == getter.name)
90             return (this->*getter.function)();
91     }
92
93     return false;
94 }
95
96 void WebPreferences::setFeatureEnabled(const API::InternalDebugFeature& feature, bool value)
97 {
98     setInternalDebugFeatureEnabledForKey(feature.key(), value);
99 }
100
101 void WebPreferences::setInternalDebugFeatureEnabledForKey(const String& key, bool value)
102 {
103     struct FeatureSetterMapping {
104         const char* name;
105         void (WebPreferences::*function) (const bool&);
106     };
107
108     static FeatureSetterMapping setters[] = {
109 <%- for @pref in @internalFeatures do -%>
110 <%- if @pref.condition -%>
111 #if <%= @pref.condition %>
112 <%- end -%>
113         { "<%= @pref.name %>", &WebPreferences::set<%= @pref.name %> },
114 <%- if @pref.condition -%>
115 #endif
116 <%- end -%>
117 <%- end -%>
118     };
119
120     for (auto& setter : setters) {
121         if (key == setter.name) {
122             (this->*setter.function)(value);
123             return;
124         }
125     }
126 }
127
128 void WebPreferences::resetAllInternalDebugFeatures()
129 {
130 <%- for @pref in @internalFeatures do -%>
131 <%- if @pref.condition -%>
132 #if <%= @pref.condition %>
133 <%- end -%>
134     set<%= @pref.name %>(DEFAULT_VALUE_FOR_<%= @pref.name %>);
135 <%- if @pref.condition -%>
136 #endif
137 <%- end -%>
138 <%- end -%>
139 }
140
141 }