<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[199700] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/199700">199700</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2016-04-18 18:46:48 -0700 (Mon, 18 Apr 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>New SPI to export a dictionary of runtime features
https://bugs.webkit.org/show_bug.cgi?id=156645
&lt;rdar://problem/23621666&gt;

Reviewed by Darin Adler.

Source/WebKit2:

Add a new type of Preference for experimental features so that we
can dynamically toggle them from a WebKit2 host. These are special
keys that are tied to runtime flags. The host process can ask WebKit
for the list of keys, each with a small description, in order to
display UI.

- Add HumanReadableName and HumanReadableDescription parameters to our
  macros, which are used when building a ExperimentalFeature.
  These are both empty strings for the existing preferences. At some
  point we should probably move all this to code generation rather
  than macros, so that we don't have to carry around unused parameters.

- I've included two sample experimental features: WebGL2 and ShadowDOM.
  They are not actually hooked up to the runtime settings yet, but its
  pretty clear how that will happen. Note that these are new preferences
  that have an &quot;Experimental&quot; prefix. This is so toggling an experimental
  feature to off won't cause the feature to not work once it becomes
  stable enough to enable by default. In other words, when it moves
  out of the experimental stage, the experimental feature flag will be
  removed, and you'll no longer check for values with that key.

- The ExperimentalFeature object is what the host process
  will read in order to show some UI. It contains the human readable info,
  as well as the actual key that can be used to query and toggle the
  experimental feature.

* Shared/API/APIObject.h: Add the ExperimentalFeature.

* Shared/Cocoa/APIObject.mm:
(API::Object::newObject): Exposes a wrapper around a _WKExperimentalFeature ObjC type.

* Shared/WebPreferencesDefinitions.h: Change all the existing macros to take the new
parameters, and add the initial experimental keys.

* Shared/WebPreferencesKeys.cpp: Add new parameters to existing macros.
* Shared/WebPreferencesKeys.h: Ditto.
* Shared/WebPreferencesStore.cpp: Ditto.
(WebKit::defaults):

* UIProcess/API/APIExperimentalFeature.cpp: The API side of the ExperimentalFeature.
(API::ExperimentalFeature::create):
(API::ExperimentalFeature::ExperimentalFeature):
(API::ExperimentalFeature::~ExperimentalFeature):
* UIProcess/API/APIExperimentalFeature.h:

* UIProcess/API/Cocoa/WKPreferences.mm: The actual implementation of the SPI.
(+[WKPreferences _experimentalFeatures]): Create and return a list of feature descriptors.
(-[WKPreferences _isEnabledForFeature:]): Get the value.
(-[WKPreferences _setEnabled:forFeature:]): Set the value.
* UIProcess/API/Cocoa/WKPreferencesPrivate.h:

* UIProcess/API/Cocoa/_WKExperimentalFeature.h: The ObjC version.
* UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
(-[_WKExperimentalFeature dealloc]):
(-[_WKExperimentalFeature description]):
(-[_WKExperimentalFeature name]):
(-[_WKExperimentalFeature key]):
(-[_WKExperimentalFeature details]):
(-[_WKExperimentalFeature _apiObject]):
* UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h: Implementation of the wrapper.
(WebKit::wrapper):

* UIProcess/WebPreferences.cpp: The C++ implementation that provides the data for the ObjC API.
(WebKit::globalExperimentalFeatures):
(WebKit::WebPreferences::ExperimentalFeatures):
(WebKit::WebPreferences::isEnabledForFeature):
(WebKit::WebPreferences::setEnabledForFeature):
* UIProcess/WebPreferences.h:

* UIProcess/mac/WebPreferencesMac.mm: Update some macros.
(WebKit::WebPreferences::platformInitializeStore):
* WebProcess/WebPage/WebPage.cpp: Ditto
(WebKit::WebPage::updatePreferences):

* WebKit2.xcodeproj/project.pbxproj: Add the new files.

Tools:

Test the experimental features SPI on WKPreferences.

* TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIAPIObjecth">trunk/Source/WebKit2/Shared/API/APIObject.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCocoaAPIObjectmm">trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesDefinitionsh">trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesKeyscpp">trunk/Source/WebKit2/Shared/WebPreferencesKeys.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesKeysh">trunk/Source/WebKit2/Shared/WebPreferencesKeys.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebPreferencesStorecpp">trunk/Source/WebKit2/Shared/WebPreferencesStore.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKAPICasth">trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKPreferencesmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferences.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKPreferencesPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferencesPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPreferencescpp">trunk/Source/WebKit2/UIProcess/WebPreferences.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPreferencesh">trunk/Source/WebKit2/UIProcess/WebPreferences.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWebPreferencesMacmm">trunk/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIExperimentalFeaturecpp">trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIExperimentalFeatureh">trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeatureh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeaturemm">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeatureInternalh">trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/ChangeLog        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -1,3 +1,87 @@
</span><ins>+2016-04-18  Dean Jackson  &lt;dino@apple.com&gt;
+
+        New SPI to export a dictionary of runtime features
+        https://bugs.webkit.org/show_bug.cgi?id=156645
+        &lt;rdar://problem/23621666&gt;
+
+        Reviewed by Darin Adler.
+
+        Add a new type of Preference for experimental features so that we
+        can dynamically toggle them from a WebKit2 host. These are special
+        keys that are tied to runtime flags. The host process can ask WebKit
+        for the list of keys, each with a small description, in order to
+        display UI.
+
+        - Add HumanReadableName and HumanReadableDescription parameters to our
+          macros, which are used when building a ExperimentalFeature.
+          These are both empty strings for the existing preferences. At some
+          point we should probably move all this to code generation rather
+          than macros, so that we don't have to carry around unused parameters.
+
+        - I've included two sample experimental features: WebGL2 and ShadowDOM.
+          They are not actually hooked up to the runtime settings yet, but its
+          pretty clear how that will happen. Note that these are new preferences
+          that have an &quot;Experimental&quot; prefix. This is so toggling an experimental
+          feature to off won't cause the feature to not work once it becomes
+          stable enough to enable by default. In other words, when it moves
+          out of the experimental stage, the experimental feature flag will be
+          removed, and you'll no longer check for values with that key.
+
+        - The ExperimentalFeature object is what the host process
+          will read in order to show some UI. It contains the human readable info,
+          as well as the actual key that can be used to query and toggle the
+          experimental feature.
+
+        * Shared/API/APIObject.h: Add the ExperimentalFeature.
+
+        * Shared/Cocoa/APIObject.mm:
+        (API::Object::newObject): Exposes a wrapper around a _WKExperimentalFeature ObjC type.
+
+        * Shared/WebPreferencesDefinitions.h: Change all the existing macros to take the new
+        parameters, and add the initial experimental keys.
+
+        * Shared/WebPreferencesKeys.cpp: Add new parameters to existing macros.
+        * Shared/WebPreferencesKeys.h: Ditto.
+        * Shared/WebPreferencesStore.cpp: Ditto.
+        (WebKit::defaults):
+
+        * UIProcess/API/APIExperimentalFeature.cpp: The API side of the ExperimentalFeature.
+        (API::ExperimentalFeature::create):
+        (API::ExperimentalFeature::ExperimentalFeature):
+        (API::ExperimentalFeature::~ExperimentalFeature):
+        * UIProcess/API/APIExperimentalFeature.h:
+
+        * UIProcess/API/Cocoa/WKPreferences.mm: The actual implementation of the SPI.
+        (+[WKPreferences _experimentalFeatures]): Create and return a list of feature descriptors.
+        (-[WKPreferences _isEnabledForFeature:]): Get the value.
+        (-[WKPreferences _setEnabled:forFeature:]): Set the value.
+        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
+
+        * UIProcess/API/Cocoa/_WKExperimentalFeature.h: The ObjC version.
+        * UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
+        (-[_WKExperimentalFeature dealloc]):
+        (-[_WKExperimentalFeature description]):
+        (-[_WKExperimentalFeature name]):
+        (-[_WKExperimentalFeature key]):
+        (-[_WKExperimentalFeature details]):
+        (-[_WKExperimentalFeature _apiObject]):
+        * UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h: Implementation of the wrapper.
+        (WebKit::wrapper):
+
+        * UIProcess/WebPreferences.cpp: The C++ implementation that provides the data for the ObjC API.
+        (WebKit::globalExperimentalFeatures):
+        (WebKit::WebPreferences::ExperimentalFeatures):
+        (WebKit::WebPreferences::isEnabledForFeature):
+        (WebKit::WebPreferences::setEnabledForFeature):
+        * UIProcess/WebPreferences.h:
+
+        * UIProcess/mac/WebPreferencesMac.mm: Update some macros.
+        (WebKit::WebPreferences::platformInitializeStore):
+        * WebProcess/WebPage/WebPage.cpp: Ditto
+        (WebKit::WebPage::updatePreferences):
+
+        * WebKit2.xcodeproj/project.pbxproj: Add the new files.
+
</ins><span class="cx"> 2016-04-18  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Swipe view gesture should be reversed in right-to-left contexts
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIAPIObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/APIObject.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/APIObject.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/API/APIObject.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -107,6 +107,7 @@
</span><span class="cx">         ColorPickerResultListener,
</span><span class="cx">         CookieManager,
</span><span class="cx">         Download,
</span><ins>+        ExperimentalFeature,
</ins><span class="cx">         FormSubmissionListener,
</span><span class="cx">         Frame,
</span><span class="cx">         FrameInfo,
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCocoaAPIObjectmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/Cocoa/APIObject.mm        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -64,6 +64,7 @@
</span><span class="cx"> #import &quot;WKWindowFeaturesInternal.h&quot;
</span><span class="cx"> #import &quot;_WKAutomationSessionInternal.h&quot;
</span><span class="cx"> #import &quot;_WKDownloadInternal.h&quot;
</span><ins>+#import &quot;_WKExperimentalFeatureInternal.h&quot;
</ins><span class="cx"> #import &quot;_WKFrameHandleInternal.h&quot;
</span><span class="cx"> #import &quot;_WKHitTestResultInternal.h&quot;
</span><span class="cx"> #import &quot;_WKProcessPoolConfigurationInternal.h&quot;
</span><span class="lines">@@ -150,6 +151,10 @@
</span><span class="cx">         wrapper = [_WKDownload alloc];
</span><span class="cx">         break;
</span><span class="cx"> 
</span><ins>+    case Type::ExperimentalFeature:
+        wrapper = [_WKExperimentalFeature alloc];
+        break;
+
</ins><span class="cx">     case Type::Error:
</span><span class="cx">         wrapper = NSAllocateObject([WKNSError self], size, nullptr);
</span><span class="cx">         break;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesDefinitionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -98,184 +98,189 @@
</span><span class="cx"> #define DEFAULT_CANVAS_USES_ACCELERATED_DRAWING true
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-// macro(KeyUpper, KeyLower, TypeNameUpper, TypeName, DefaultValue)
</del><ins>+// macro(KeyUpper, KeyLower, TypeNameUpper, TypeName, DefaultValue, HumanReadableName, HumanReadableDescription)
</ins><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_BOOL_PREFERENCE(macro) \
</span><del>-    macro(JavaScriptEnabled, javaScriptEnabled, Bool, bool, true) \
-    macro(JavaScriptMarkupEnabled, javaScriptMarkupEnabled, Bool, bool, true) \
-    macro(LoadsImagesAutomatically, loadsImagesAutomatically, Bool, bool, true) \
-    macro(LoadsSiteIconsIgnoringImageLoadingPreference, loadsSiteIconsIgnoringImageLoadingPreference, Bool, bool, false) \
-    macro(PluginsEnabled, pluginsEnabled, Bool, bool, false) \
-    macro(JavaEnabled, javaEnabled, Bool, bool, false) \
-    macro(JavaEnabledForLocalFiles, javaEnabledForLocalFiles, Bool, bool, false) \
-    macro(OfflineWebApplicationCacheEnabled, offlineWebApplicationCacheEnabled, Bool, bool, false) \
-    macro(LocalStorageEnabled, localStorageEnabled, Bool, bool, true) \
-    macro(DatabasesEnabled, databasesEnabled, Bool, bool, true) \
-    macro(XSSAuditorEnabled, xssAuditorEnabled, Bool, bool, true) \
-    macro(FrameFlatteningEnabled, frameFlatteningEnabled, Bool, bool, DEFAULT_FRAME_FLATTENING_ENABLED) \
-    macro(PrivateBrowsingEnabled, privateBrowsingEnabled, Bool, bool, false) \
-    macro(TextAreasAreResizable, textAreasAreResizable, Bool, bool, DEFAULT_TEXT_AREAS_ARE_RESIZABLE) \
-    macro(JavaScriptCanOpenWindowsAutomatically, javaScriptCanOpenWindowsAutomatically, Bool, bool, DEFAULT_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY) \
-    macro(HyperlinkAuditingEnabled, hyperlinkAuditingEnabled, Bool, bool, true) \
-    macro(NeedsSiteSpecificQuirks, needsSiteSpecificQuirks, Bool, bool, false) \
-    macro(AcceleratedCompositingEnabled, acceleratedCompositingEnabled, Bool, bool, true) \
-    macro(ForceCompositingMode, forceCompositingMode, Bool, bool, false) \
-    macro(CanvasUsesAcceleratedDrawing, canvasUsesAcceleratedDrawing, Bool, bool, DEFAULT_CANVAS_USES_ACCELERATED_DRAWING) \
-    macro(WebGLEnabled, webGLEnabled, Bool, bool, true) \
-    macro(ForceSoftwareWebGLRendering, forceSoftwareWebGLRendering, Bool, bool, false) \
-    macro(Accelerated2dCanvasEnabled, accelerated2dCanvasEnabled, Bool, bool, false) \
-    macro(CSSAnimationTriggersEnabled, cssAnimationTriggersEnabled, Bool, bool, true) \
-    macro(WebAnimationsEnabled, webAnimationsEnabled, Bool, bool, false) \
-    macro(CSSRegionsEnabled, cssRegionsEnabled, Bool, bool, true) \
-    macro(CSSCompositingEnabled, cssCompositingEnabled, Bool, bool, true) \
-    macro(ForceFTPDirectoryListings, forceFTPDirectoryListings, Bool, bool, false) \
-    macro(TabsToLinks, tabsToLinks, Bool, bool, DEFAULT_WEBKIT_TABSTOLINKS_ENABLED) \
-    macro(DNSPrefetchingEnabled, dnsPrefetchingEnabled, Bool, bool, false) \
-    macro(DOMTimersThrottlingEnabled, domTimersThrottlingEnabled, Bool, bool, true) \
-    macro(WebArchiveDebugModeEnabled, webArchiveDebugModeEnabled, Bool, bool, false) \
-    macro(LocalFileContentSniffingEnabled, localFileContentSniffingEnabled, Bool, bool, false) \
-    macro(UsesPageCache, usesPageCache, Bool, bool, true) \
-    macro(PageCacheSupportsPlugins, pageCacheSupportsPlugins, Bool, bool, true) \
-    macro(AuthorAndUserStylesEnabled, authorAndUserStylesEnabled, Bool, bool, true) \
-    macro(PaginateDuringLayoutEnabled, paginateDuringLayoutEnabled, Bool, bool, false) \
-    macro(DOMPasteAllowed, domPasteAllowed, Bool, bool, false) \
-    macro(JavaScriptCanAccessClipboard, javaScriptCanAccessClipboard, Bool, bool, false) \
-    macro(ShouldPrintBackgrounds, shouldPrintBackgrounds, Bool, bool, DEFAULT_SHOULD_PRINT_BACKGROUNDS) \
-    macro(FullScreenEnabled, fullScreenEnabled, Bool, bool, false) \
-    macro(AsynchronousSpellCheckingEnabled, asynchronousSpellCheckingEnabled, Bool, bool, false) \
-    macro(WebSecurityEnabled, webSecurityEnabled, Bool, bool, true) \
-    macro(AllowUniversalAccessFromFileURLs, allowUniversalAccessFromFileURLs, Bool, bool, false) \
-    macro(AllowFileAccessFromFileURLs, allowFileAccessFromFileURLs, Bool, bool, false) \
-    macro(AVFoundationEnabled, isAVFoundationEnabled, Bool, bool, true) \
-    macro(AVFoundationNSURLSessionEnabled, isAVFoundationNSURLSessionEnabled, Bool, bool, true) \
-    macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK) \
-    macro(RequiresUserGestureForVideoPlayback, requiresUserGestureForVideoPlayback, Bool, bool, false) \
-    macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, false) \
-    macro(MainContentUserGestureOverrideEnabled, mainContentUserGestureOverrideEnabled, Bool, bool, false) \
-    macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK) \
-    macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE) \
-    macro(InvisibleAutoplayNotPermitted, invisibleAutoplayNotPermitted, Bool, bool, DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED) \
-    macro(MediaDataLoadsAutomatically, mediaDataLoadsAutomatically, Bool, bool, DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY) \
-    macro(AllowsPictureInPictureMediaPlayback, allowsPictureInPictureMediaPlayback, Bool, bool, true) \
-    macro(AllowsAirPlayForMediaPlayback, allowsAirPlayForMediaPlayback, Bool, bool, true) \
-    macro(MediaControlsScaleWithPageZoom, mediaControlsScaleWithPageZoom, Bool, bool, DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM) \
-    macro(InspectorStartsAttached, inspectorStartsAttached, Bool, bool, true) \
-    macro(ShowsToolTipOverTruncatedText, showsToolTipOverTruncatedText, Bool, bool, false) \
-    macro(MockScrollbarsEnabled, mockScrollbarsEnabled, Bool, bool, false) \
-    macro(WebAudioEnabled, webAudioEnabled, Bool, bool, true) \
-    macro(AttachmentElementEnabled, attachmentElementEnabled, Bool, bool, false) \
-    macro(SuppressesIncrementalRendering, suppressesIncrementalRendering, Bool, bool, false) \
-    macro(BackspaceKeyNavigationEnabled, backspaceKeyNavigationEnabled, Bool, bool, DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED) \
-    macro(CaretBrowsingEnabled, caretBrowsingEnabled, Bool, bool, false) \
-    macro(ShouldDisplaySubtitles, shouldDisplaySubtitles, Bool, bool, false) \
-    macro(ShouldDisplayCaptions, shouldDisplayCaptions, Bool, bool, false) \
-    macro(ShouldDisplayTextDescriptions, shouldDisplayTextDescriptions, Bool, bool, false) \
-    macro(NotificationsEnabled, notificationsEnabled, Bool, bool, true) \
-    macro(ShouldRespectImageOrientation, shouldRespectImageOrientation, Bool, bool, DEFAULT_SHOULD_RESPECT_IMAGE_ORIENTATION) \
-    macro(WantsBalancedSetDefersLoadingBehavior, wantsBalancedSetDefersLoadingBehavior, Bool, bool, false) \
-    macro(RequestAnimationFrameEnabled, requestAnimationFrameEnabled, Bool, bool, true) \
-    macro(DiagnosticLoggingEnabled, diagnosticLoggingEnabled, Bool, bool, false) \
-    macro(AsynchronousPluginInitializationEnabled, asynchronousPluginInitializationEnabled, Bool, bool, false) \
-    macro(AsynchronousPluginInitializationEnabledForAllPlugins, asynchronousPluginInitializationEnabledForAllPlugins, Bool, bool, false) \
-    macro(ArtificialPluginInitializationDelayEnabled, artificialPluginInitializationDelayEnabled, Bool, bool, false) \
-    macro(TabToLinksEnabled, tabToLinksEnabled, Bool, bool, false) \
-    macro(InteractiveFormValidationEnabled, interactiveFormValidationEnabled, Bool, bool, false) \
-    macro(ScrollingPerformanceLoggingEnabled, scrollingPerformanceLoggingEnabled, Bool, bool, false) \
-    macro(ScrollAnimatorEnabled, scrollAnimatorEnabled, Bool, bool, DEFAULT_WEBKIT_SCROLL_ANIMATOR_ENABLED) \
-    macro(ForceUpdateScrollbarsOnMainThreadForPerformanceTesting, forceUpdateScrollbarsOnMainThreadForPerformanceTesting, Bool, bool, false) \
-    macro(CookieEnabled, cookieEnabled, Bool, bool, true) \
-    macro(PlugInSnapshottingEnabled, plugInSnapshottingEnabled, Bool, bool, false) \
-    macro(SnapshotAllPlugIns, snapshotAllPlugIns, Bool, bool, false) \
-    macro(AutostartOriginPlugInSnapshottingEnabled, autostartOriginPlugInSnapshottingEnabled, Bool, bool, true) \
-    macro(PrimaryPlugInSnapshotDetectionEnabled, primaryPlugInSnapshotDetectionEnabled, Bool, bool, true) \
-    macro(PDFPluginEnabled, pdfPluginEnabled, Bool, bool, DEFAULT_PDFPLUGIN_ENABLED) \
-    macro(UsesEncodingDetector, usesEncodingDetector, Bool, bool, false) \
-    macro(TextAutosizingEnabled, textAutosizingEnabled, Bool, bool, false) \
-    macro(AggressiveTileRetentionEnabled, aggressiveTileRetentionEnabled, Bool, bool, false) \
-    macro(TemporaryTileCohortRetentionEnabled, temporaryTileCohortRetentionEnabled, Bool, bool, DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED) \
-    macro(QTKitEnabled, isQTKitEnabled, Bool, bool, WebCore::Settings::isQTKitEnabled()) \
-    macro(PageVisibilityBasedProcessSuppressionEnabled, pageVisibilityBasedProcessSuppressionEnabled, Bool, bool, true) \
-    macro(SmartInsertDeleteEnabled, smartInsertDeleteEnabled, Bool, bool, true) \
-    macro(SelectTrailingWhitespaceEnabled, selectTrailingWhitespaceEnabled, Bool, bool, false) \
-    macro(ShowsURLsInToolTipsEnabled, showsURLsInToolTipsEnabled, Bool, bool, false) \
-    macro(AcceleratedCompositingForOverflowScrollEnabled, acceleratedCompositingForOverflowScrollEnabled, Bool, bool, false) \
-    macro(HiddenPageDOMTimerThrottlingEnabled, hiddenPageDOMTimerThrottlingEnabled, Bool, bool, DEFAULT_HIDDEN_PAGE_DOM_TIMER_THROTTLING_ENABLED) \
-    macro(HiddenPageDOMTimerThrottlingAutoIncreases, hiddenPageDOMTimerThrottlingAutoIncreases, Bool, bool, false) \
-    macro(HiddenPageCSSAnimationSuspensionEnabled, hiddenPageCSSAnimationSuspensionEnabled, Bool, bool, DEFAULT_HIDDEN_PAGE_CSS_ANIMATION_SUSPENSION_ENABLED) \
-    macro(LowPowerVideoAudioBufferSizeEnabled, lowPowerVideoAudioBufferSizeEnabled, Bool, bool, false) \
-    macro(ThreadedScrollingEnabled, threadedScrollingEnabled, Bool, bool, true) \
-    macro(SimpleLineLayoutEnabled, simpleLineLayoutEnabled, Bool, bool, true) \
-    macro(SubpixelCSSOMElementMetricsEnabled, subpixelCSSOMElementMetricsEnabled, Bool, bool, false) \
-    macro(UseGiantTiles, useGiantTiles, Bool, bool, false) \
-    macro(MediaStreamEnabled, mediaStreamEnabled, Bool, bool, false) \
-    macro(UseLegacyTextAlignPositionedElementBehavior, useLegacyTextAlignPositionedElementBehavior, Bool, bool, false) \
-    macro(SpatialNavigationEnabled, spatialNavigationEnabled, Bool, bool, false) \
-    macro(MediaSourceEnabled, mediaSourceEnabled, Bool, bool, true) \
-    macro(ViewGestureDebuggingEnabled, viewGestureDebuggingEnabled, Bool, bool, false) \
-    macro(ShouldConvertPositionStyleOnCopy, shouldConvertPositionStyleOnCopy, Bool, bool, false) \
-    macro(Standalone, standalone, Bool, bool, false) \
-    macro(TelephoneNumberParsingEnabled, telephoneNumberParsingEnabled, Bool, bool, false) \
-    macro(AllowMultiElementImplicitSubmission, allowMultiElementImplicitSubmission, Bool, bool, false) \
-    macro(AlwaysUseAcceleratedOverflowScroll, alwaysUseAcceleratedOverflowScroll, Bool, bool, false) \
-    macro(PasswordEchoEnabled, passwordEchoEnabled, Bool, bool, DEFAULT_PASSWORD_ECHO_ENABLED) \
-    macro(ImageControlsEnabled, imageControlsEnabled, Bool, bool, false) \
-    macro(EnableInheritURIQueryComponent, enableInheritURIQueryComponent, Bool, bool, false) \
-    macro(ServiceControlsEnabled, serviceControlsEnabled, Bool, bool, false) \
-    macro(GamepadsEnabled, gamepadsEnabled, Bool, bool, false) \
-    macro(NewBlockInsideInlineModelEnabled, newBlockInsideInlineModelEnabled, Bool, bool, false) \
-    macro(HTTPEquivEnabled, httpEquivEnabled, Bool, bool, true) \
-    macro(MockCaptureDevicesEnabled, mockCaptureDevicesEnabled, Bool, bool, false) \
-    macro(ShadowDOMEnabled, shadowDOMEnabled, Bool, bool, true) \
-    macro(CustomElementsEnabled, customElementsEnabled, Bool, bool, false) \
-    macro(FetchAPIEnabled, fetchAPIEnabled, Bool, bool, false) \
-    macro(WebGL2Enabled, webGL2Enabled, Bool, bool, false) \
-    macro(DownloadAttributeEnabled, downloadAttributeEnabled, Bool, bool, false) \
</del><ins>+    macro(JavaScriptEnabled, javaScriptEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(JavaScriptMarkupEnabled, javaScriptMarkupEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(LoadsImagesAutomatically, loadsImagesAutomatically, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(LoadsSiteIconsIgnoringImageLoadingPreference, loadsSiteIconsIgnoringImageLoadingPreference, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(PluginsEnabled, pluginsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(JavaEnabled, javaEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(JavaEnabledForLocalFiles, javaEnabledForLocalFiles, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(OfflineWebApplicationCacheEnabled, offlineWebApplicationCacheEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(LocalStorageEnabled, localStorageEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(DatabasesEnabled, databasesEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(XSSAuditorEnabled, xssAuditorEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(FrameFlatteningEnabled, frameFlatteningEnabled, Bool, bool, DEFAULT_FRAME_FLATTENING_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(PrivateBrowsingEnabled, privateBrowsingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TextAreasAreResizable, textAreasAreResizable, Bool, bool, DEFAULT_TEXT_AREAS_ARE_RESIZABLE, &quot;&quot;, &quot;&quot;) \
+    macro(JavaScriptCanOpenWindowsAutomatically, javaScriptCanOpenWindowsAutomatically, Bool, bool, DEFAULT_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY, &quot;&quot;, &quot;&quot;) \
+    macro(HyperlinkAuditingEnabled, hyperlinkAuditingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(NeedsSiteSpecificQuirks, needsSiteSpecificQuirks, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AcceleratedCompositingEnabled, acceleratedCompositingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ForceCompositingMode, forceCompositingMode, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CanvasUsesAcceleratedDrawing, canvasUsesAcceleratedDrawing, Bool, bool, DEFAULT_CANVAS_USES_ACCELERATED_DRAWING, &quot;&quot;, &quot;&quot;) \
+    macro(WebGLEnabled, webGLEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ForceSoftwareWebGLRendering, forceSoftwareWebGLRendering, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(Accelerated2dCanvasEnabled, accelerated2dCanvasEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CSSAnimationTriggersEnabled, cssAnimationTriggersEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(WebAnimationsEnabled, webAnimationsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CSSRegionsEnabled, cssRegionsEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(CSSCompositingEnabled, cssCompositingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ForceFTPDirectoryListings, forceFTPDirectoryListings, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TabsToLinks, tabsToLinks, Bool, bool, DEFAULT_WEBKIT_TABSTOLINKS_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(DNSPrefetchingEnabled, dnsPrefetchingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(DOMTimersThrottlingEnabled, domTimersThrottlingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(WebArchiveDebugModeEnabled, webArchiveDebugModeEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(LocalFileContentSniffingEnabled, localFileContentSniffingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(UsesPageCache, usesPageCache, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(PageCacheSupportsPlugins, pageCacheSupportsPlugins, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(AuthorAndUserStylesEnabled, authorAndUserStylesEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(PaginateDuringLayoutEnabled, paginateDuringLayoutEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(DOMPasteAllowed, domPasteAllowed, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(JavaScriptCanAccessClipboard, javaScriptCanAccessClipboard, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldPrintBackgrounds, shouldPrintBackgrounds, Bool, bool, DEFAULT_SHOULD_PRINT_BACKGROUNDS, &quot;&quot;, &quot;&quot;) \
+    macro(FullScreenEnabled, fullScreenEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AsynchronousSpellCheckingEnabled, asynchronousSpellCheckingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(WebSecurityEnabled, webSecurityEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(AllowUniversalAccessFromFileURLs, allowUniversalAccessFromFileURLs, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AllowFileAccessFromFileURLs, allowFileAccessFromFileURLs, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AVFoundationEnabled, isAVFoundationEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(AVFoundationNSURLSessionEnabled, isAVFoundationNSURLSessionEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(RequiresUserGestureForMediaPlayback, requiresUserGestureForMediaPlayback, Bool, bool, DEFAULT_REQUIRES_USER_GESTURE_FOR_MEDIA_PLAYBACK, &quot;&quot;, &quot;&quot;) \
+    macro(RequiresUserGestureForVideoPlayback, requiresUserGestureForVideoPlayback, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(RequiresUserGestureForAudioPlayback, requiresUserGestureForAudioPlayback, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(MainContentUserGestureOverrideEnabled, mainContentUserGestureOverrideEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AllowsInlineMediaPlayback, allowsInlineMediaPlayback, Bool, bool, DEFAULT_ALLOWS_INLINE_MEDIA_PLAYBACK, &quot;&quot;, &quot;&quot;) \
+    macro(InlineMediaPlaybackRequiresPlaysInlineAttribute, inlineMediaPlaybackRequiresPlaysInlineAttribute, Bool, bool, DEFAULT_INLINE_MEDIA_PLAYBACK_REQUIRES_PLAYS_INLINE_ATTRIBUTE, &quot;&quot;, &quot;&quot;) \
+    macro(InvisibleAutoplayNotPermitted, invisibleAutoplayNotPermitted, Bool, bool, DEFAULT_INVISIBLE_AUTOPLAY_NOT_PERMITTED, &quot;&quot;, &quot;&quot;) \
+    macro(MediaDataLoadsAutomatically, mediaDataLoadsAutomatically, Bool, bool, DEFAULT_MEDIA_DATA_LOADS_AUTOMATICALLY, &quot;&quot;, &quot;&quot;) \
+    macro(AllowsPictureInPictureMediaPlayback, allowsPictureInPictureMediaPlayback, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(AllowsAirPlayForMediaPlayback, allowsAirPlayForMediaPlayback, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(MediaControlsScaleWithPageZoom, mediaControlsScaleWithPageZoom, Bool, bool, DEFAULT_MEDIA_CONTROLS_SCALE_WITH_PAGE_ZOOM, &quot;&quot;, &quot;&quot;) \
+    macro(InspectorStartsAttached, inspectorStartsAttached, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ShowsToolTipOverTruncatedText, showsToolTipOverTruncatedText, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(MockScrollbarsEnabled, mockScrollbarsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(WebAudioEnabled, webAudioEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(AttachmentElementEnabled, attachmentElementEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(SuppressesIncrementalRendering, suppressesIncrementalRendering, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(BackspaceKeyNavigationEnabled, backspaceKeyNavigationEnabled, Bool, bool, DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(CaretBrowsingEnabled, caretBrowsingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldDisplaySubtitles, shouldDisplaySubtitles, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldDisplayCaptions, shouldDisplayCaptions, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldDisplayTextDescriptions, shouldDisplayTextDescriptions, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(NotificationsEnabled, notificationsEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldRespectImageOrientation, shouldRespectImageOrientation, Bool, bool, DEFAULT_SHOULD_RESPECT_IMAGE_ORIENTATION, &quot;&quot;, &quot;&quot;) \
+    macro(WantsBalancedSetDefersLoadingBehavior, wantsBalancedSetDefersLoadingBehavior, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(RequestAnimationFrameEnabled, requestAnimationFrameEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(DiagnosticLoggingEnabled, diagnosticLoggingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AsynchronousPluginInitializationEnabled, asynchronousPluginInitializationEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AsynchronousPluginInitializationEnabledForAllPlugins, asynchronousPluginInitializationEnabledForAllPlugins, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ArtificialPluginInitializationDelayEnabled, artificialPluginInitializationDelayEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TabToLinksEnabled, tabToLinksEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(InteractiveFormValidationEnabled, interactiveFormValidationEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ScrollingPerformanceLoggingEnabled, scrollingPerformanceLoggingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ScrollAnimatorEnabled, scrollAnimatorEnabled, Bool, bool, DEFAULT_WEBKIT_SCROLL_ANIMATOR_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(ForceUpdateScrollbarsOnMainThreadForPerformanceTesting, forceUpdateScrollbarsOnMainThreadForPerformanceTesting, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CookieEnabled, cookieEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(PlugInSnapshottingEnabled, plugInSnapshottingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(SnapshotAllPlugIns, snapshotAllPlugIns, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AutostartOriginPlugInSnapshottingEnabled, autostartOriginPlugInSnapshottingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(PrimaryPlugInSnapshotDetectionEnabled, primaryPlugInSnapshotDetectionEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(PDFPluginEnabled, pdfPluginEnabled, Bool, bool, DEFAULT_PDFPLUGIN_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(UsesEncodingDetector, usesEncodingDetector, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TextAutosizingEnabled, textAutosizingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AggressiveTileRetentionEnabled, aggressiveTileRetentionEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TemporaryTileCohortRetentionEnabled, temporaryTileCohortRetentionEnabled, Bool, bool, DEFAULT_TEMPORARY_TILE_COHORT_RETENTION_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(QTKitEnabled, isQTKitEnabled, Bool, bool, WebCore::Settings::isQTKitEnabled(), &quot;&quot;, &quot;&quot;) \
+    macro(PageVisibilityBasedProcessSuppressionEnabled, pageVisibilityBasedProcessSuppressionEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(SmartInsertDeleteEnabled, smartInsertDeleteEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(SelectTrailingWhitespaceEnabled, selectTrailingWhitespaceEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShowsURLsInToolTipsEnabled, showsURLsInToolTipsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AcceleratedCompositingForOverflowScrollEnabled, acceleratedCompositingForOverflowScrollEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(HiddenPageDOMTimerThrottlingEnabled, hiddenPageDOMTimerThrottlingEnabled, Bool, bool, DEFAULT_HIDDEN_PAGE_DOM_TIMER_THROTTLING_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(HiddenPageDOMTimerThrottlingAutoIncreases, hiddenPageDOMTimerThrottlingAutoIncreases, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(HiddenPageCSSAnimationSuspensionEnabled, hiddenPageCSSAnimationSuspensionEnabled, Bool, bool, DEFAULT_HIDDEN_PAGE_CSS_ANIMATION_SUSPENSION_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(LowPowerVideoAudioBufferSizeEnabled, lowPowerVideoAudioBufferSizeEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ThreadedScrollingEnabled, threadedScrollingEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(SimpleLineLayoutEnabled, simpleLineLayoutEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(SubpixelCSSOMElementMetricsEnabled, subpixelCSSOMElementMetricsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(UseGiantTiles, useGiantTiles, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(MediaStreamEnabled, mediaStreamEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(UseLegacyTextAlignPositionedElementBehavior, useLegacyTextAlignPositionedElementBehavior, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(SpatialNavigationEnabled, spatialNavigationEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(MediaSourceEnabled, mediaSourceEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ViewGestureDebuggingEnabled, viewGestureDebuggingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShouldConvertPositionStyleOnCopy, shouldConvertPositionStyleOnCopy, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(Standalone, standalone, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TelephoneNumberParsingEnabled, telephoneNumberParsingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AllowMultiElementImplicitSubmission, allowMultiElementImplicitSubmission, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(AlwaysUseAcceleratedOverflowScroll, alwaysUseAcceleratedOverflowScroll, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(PasswordEchoEnabled, passwordEchoEnabled, Bool, bool, DEFAULT_PASSWORD_ECHO_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(ImageControlsEnabled, imageControlsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(EnableInheritURIQueryComponent, enableInheritURIQueryComponent, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ServiceControlsEnabled, serviceControlsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(GamepadsEnabled, gamepadsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(NewBlockInsideInlineModelEnabled, newBlockInsideInlineModelEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(HTTPEquivEnabled, httpEquivEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(MockCaptureDevicesEnabled, mockCaptureDevicesEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ShadowDOMEnabled, shadowDOMEnabled, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(CustomElementsEnabled, customElementsEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(FetchAPIEnabled, fetchAPIEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(WebGL2Enabled, webGL2Enabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(DownloadAttributeEnabled, downloadAttributeEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     FOR_EACH_ADDITIONAL_WEBKIT_BOOL_PREFERENCE(macro) \
</span><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \
</span><del>-    macro(IncrementalRenderingSuppressionTimeout, incrementalRenderingSuppressionTimeout, Double, double, 5) \
-    macro(MinimumFontSize, minimumFontSize, Double, double, 0) \
-    macro(MinimumLogicalFontSize, minimumLogicalFontSize, Double, double, 9) \
-    macro(MinimumZoomFontSize, minimumZoomFontSize, Double, double, DEFAULT_MINIMUM_FONT_ZOOM_SIZE) \
-    macro(DefaultFontSize, defaultFontSize, Double, double, 16) \
-    macro(DefaultFixedFontSize, defaultFixedFontSize, Double, double, 13) \
-    macro(LayoutInterval, layoutInterval, Double, double, -1) \
-    macro(MaxParseDuration, maxParseDuration, Double, double, -1) \
-    macro(PasswordEchoDuration, passwordEchoDuration, Double, double, 2) \
</del><ins>+    macro(IncrementalRenderingSuppressionTimeout, incrementalRenderingSuppressionTimeout, Double, double, 5, &quot;&quot;, &quot;&quot;) \
+    macro(MinimumFontSize, minimumFontSize, Double, double, 0, &quot;&quot;, &quot;&quot;) \
+    macro(MinimumLogicalFontSize, minimumLogicalFontSize, Double, double, 9, &quot;&quot;, &quot;&quot;) \
+    macro(MinimumZoomFontSize, minimumZoomFontSize, Double, double, DEFAULT_MINIMUM_FONT_ZOOM_SIZE, &quot;&quot;, &quot;&quot;) \
+    macro(DefaultFontSize, defaultFontSize, Double, double, 16, &quot;&quot;, &quot;&quot;) \
+    macro(DefaultFixedFontSize, defaultFixedFontSize, Double, double, 13, &quot;&quot;, &quot;&quot;) \
+    macro(LayoutInterval, layoutInterval, Double, double, -1, &quot;&quot;, &quot;&quot;) \
+    macro(MaxParseDuration, maxParseDuration, Double, double, -1, &quot;&quot;, &quot;&quot;) \
+    macro(PasswordEchoDuration, passwordEchoDuration, Double, double, 2, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_UINT32_PREFERENCE(macro) \
</span><del>-    macro(FontSmoothingLevel, fontSmoothingLevel, UInt32, uint32_t, FontSmoothingLevelMedium) \
-    macro(LayoutFallbackWidth, layoutFallbackWidth, UInt32, uint32_t, 980) \
-    macro(DeviceWidth, deviceWidth, UInt32, uint32_t, 0) \
-    macro(DeviceHeight, deviceHeight, UInt32, uint32_t, 0) \
-    macro(EditableLinkBehavior, editableLinkBehavior, UInt32, uint32_t, WebCore::EditableLinkNeverLive) \
-    macro(InspectorAttachedHeight, inspectorAttachedHeight, UInt32, uint32_t, 300) \
-    macro(InspectorAttachedWidth, inspectorAttachedWidth, UInt32, uint32_t, 750) \
-    macro(InspectorAttachmentSide, inspectorAttachmentSide, UInt32, uint32_t, 0) \
-    macro(StorageBlockingPolicy, storageBlockingPolicy, UInt32, uint32_t, WebCore::SecurityOrigin::BlockThirdPartyStorage) \
-    macro(JavaScriptRuntimeFlags, javaScriptRuntimeFlags, UInt32, uint32_t, 0) \
-    macro(DataDetectorTypes, dataDetectorTypes, UInt32, uint32_t, 0) \
</del><ins>+    macro(FontSmoothingLevel, fontSmoothingLevel, UInt32, uint32_t, FontSmoothingLevelMedium, &quot;&quot;, &quot;&quot;) \
+    macro(LayoutFallbackWidth, layoutFallbackWidth, UInt32, uint32_t, 980, &quot;&quot;, &quot;&quot;) \
+    macro(DeviceWidth, deviceWidth, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;) \
+    macro(DeviceHeight, deviceHeight, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;) \
+    macro(EditableLinkBehavior, editableLinkBehavior, UInt32, uint32_t, WebCore::EditableLinkNeverLive, &quot;&quot;, &quot;&quot;) \
+    macro(InspectorAttachedHeight, inspectorAttachedHeight, UInt32, uint32_t, 300, &quot;&quot;, &quot;&quot;) \
+    macro(InspectorAttachedWidth, inspectorAttachedWidth, UInt32, uint32_t, 750, &quot;&quot;, &quot;&quot;) \
+    macro(InspectorAttachmentSide, inspectorAttachmentSide, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;) \
+    macro(StorageBlockingPolicy, storageBlockingPolicy, UInt32, uint32_t, WebCore::SecurityOrigin::BlockThirdPartyStorage, &quot;&quot;, &quot;&quot;) \
+    macro(JavaScriptRuntimeFlags, javaScriptRuntimeFlags, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;) \
+    macro(DataDetectorTypes, dataDetectorTypes, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_DEBUG_BOOL_PREFERENCE(macro) \
</span><del>-    macro(AcceleratedDrawingEnabled, acceleratedDrawingEnabled, Bool, bool, DEFAULT_ACCELERATED_DRAWING_ENABLED) \
-    macro(DisplayListDrawingEnabled, displayListDrawingEnabled, Bool, bool, false) \
-    macro(CompositingBordersVisible, compositingBordersVisible, Bool, bool, false) \
-    macro(CompositingRepaintCountersVisible, compositingRepaintCountersVisible, Bool, bool, false) \
-    macro(TiledScrollingIndicatorVisible, tiledScrollingIndicatorVisible, Bool, bool, false) \
-    macro(SimpleLineLayoutDebugBordersEnabled, simpleLineLayoutDebugBordersEnabled, Bool, bool, false) \
-    macro(DeveloperExtrasEnabled, developerExtrasEnabled, Bool, bool, false) \
-    macro(LogsPageMessagesToSystemConsoleEnabled, logsPageMessagesToSystemConsoleEnabled, Bool, bool, false) \
-    macro(IgnoreViewportScalingConstraints, ignoreViewportScalingConstraints, Bool, bool, true) \
-    macro(ForceAlwaysUserScalable, forceAlwaysUserScalable, Bool, bool, false) \
-    macro(ResourceUsageOverlayVisible, resourceUsageOverlayVisible, Bool, bool, false) \
</del><ins>+    macro(AcceleratedDrawingEnabled, acceleratedDrawingEnabled, Bool, bool, DEFAULT_ACCELERATED_DRAWING_ENABLED, &quot;&quot;, &quot;&quot;) \
+    macro(DisplayListDrawingEnabled, displayListDrawingEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CompositingBordersVisible, compositingBordersVisible, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(CompositingRepaintCountersVisible, compositingRepaintCountersVisible, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(TiledScrollingIndicatorVisible, tiledScrollingIndicatorVisible, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(SimpleLineLayoutDebugBordersEnabled, simpleLineLayoutDebugBordersEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(DeveloperExtrasEnabled, developerExtrasEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(LogsPageMessagesToSystemConsoleEnabled, logsPageMessagesToSystemConsoleEnabled, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(IgnoreViewportScalingConstraints, ignoreViewportScalingConstraints, Bool, bool, true, &quot;&quot;, &quot;&quot;) \
+    macro(ForceAlwaysUserScalable, forceAlwaysUserScalable, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
+    macro(ResourceUsageOverlayVisible, resourceUsageOverlayVisible, Bool, bool, false, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_DEBUG_UINT32_PREFERENCE(macro) \
</span><del>-    macro(VisibleDebugOverlayRegions, visibleDebugOverlayRegions, UInt32, uint32_t, 0)
</del><ins>+    macro(VisibleDebugOverlayRegions, visibleDebugOverlayRegions, UInt32, uint32_t, 0, &quot;&quot;, &quot;&quot;)
</ins><span class="cx"> 
</span><ins>+#define FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(macro) \
+    macro(ExperimentalShadowDOMEnabled, experimentalShadowDOMEnabled, Bool, bool, false, &quot;Shadow DOM&quot;, &quot;Support for the Shadow DOM feature&quot;) \
+    macro(ExperimentalWebGL2Enabled, experimentalWebGL2Enabled, Bool, bool, false, &quot;WebGL 2.0&quot;, &quot;Prototype WebGL 2 Support&quot;) \
+    \
+
</ins><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="lines">@@ -288,37 +293,37 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
</span><del>-    macro(StandardFontFamily, standardFontFamily, String, String, &quot;Times&quot;) \
-    macro(CursiveFontFamily, cursiveFontFamily, String, String, DEFAULT_CURSIVE_FONT_FAMILY) \
-    macro(FantasyFontFamily, fantasyFontFamily, String, String, &quot;Papyrus&quot;) \
-    macro(FixedFontFamily, fixedFontFamily, String, String, &quot;Courier&quot;) \
-    macro(SansSerifFontFamily, sansSerifFontFamily, String, String, &quot;Helvetica&quot;) \
-    macro(SerifFontFamily, serifFontFamily, String, String, &quot;Times&quot;) \
-    macro(PictographFontFamily, pictographFontFamily, String, String, &quot;Apple Color Emoji&quot;) \
</del><ins>+    macro(StandardFontFamily, standardFontFamily, String, String, &quot;Times&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(CursiveFontFamily, cursiveFontFamily, String, String, DEFAULT_CURSIVE_FONT_FAMILY, &quot;&quot;, &quot;&quot;) \
+    macro(FantasyFontFamily, fantasyFontFamily, String, String, &quot;Papyrus&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(FixedFontFamily, fixedFontFamily, String, String, &quot;Courier&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(SansSerifFontFamily, sansSerifFontFamily, String, String, &quot;Helvetica&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(SerifFontFamily, serifFontFamily, String, String, &quot;Times&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(PictographFontFamily, pictographFontFamily, String, String, &quot;Apple Color Emoji&quot;, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #elif PLATFORM(GTK) || PLATFORM(EFL)
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
</span><del>-    macro(StandardFontFamily, standardFontFamily, String, String, &quot;Times&quot;) \
-    macro(CursiveFontFamily, cursiveFontFamily, String, String, &quot;Comic Sans MS&quot;) \
-    macro(FantasyFontFamily, fantasyFontFamily, String, String, &quot;Impact&quot;) \
-    macro(FixedFontFamily, fixedFontFamily, String, String, &quot;Courier New&quot;) \
-    macro(SansSerifFontFamily, sansSerifFontFamily, String, String, &quot;Helvetica&quot;) \
-    macro(SerifFontFamily, serifFontFamily, String, String, &quot;Times&quot;) \
-    macro(PictographFontFamily, pictographFontFamily, String, String, &quot;Times&quot;) \
</del><ins>+    macro(StandardFontFamily, standardFontFamily, String, String, &quot;Times&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(CursiveFontFamily, cursiveFontFamily, String, String, &quot;Comic Sans MS&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(FantasyFontFamily, fantasyFontFamily, String, String, &quot;Impact&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(FixedFontFamily, fixedFontFamily, String, String, &quot;Courier New&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(SansSerifFontFamily, sansSerifFontFamily, String, String, &quot;Helvetica&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(SerifFontFamily, serifFontFamily, String, String, &quot;Times&quot;, &quot;&quot;, &quot;&quot;) \
+    macro(PictographFontFamily, pictographFontFamily, String, String, &quot;Times&quot;, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \
</span><span class="cx">     FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
</span><del>-    macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, defaultTextEncodingNameForSystemLanguage()) \
-    macro(FTPDirectoryTemplatePath, ftpDirectoryTemplatePath, String, String, &quot;&quot;) \
</del><ins>+    macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, defaultTextEncodingNameForSystemLanguage(), &quot;&quot;, &quot;&quot;) \
+    macro(FTPDirectoryTemplatePath, ftpDirectoryTemplatePath, String, String, &quot;&quot;, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_STRING_PREFERENCE_NOT_IN_WEBCORE(macro) \
</span><del>-    macro(InspectorWindowFrame, inspectorWindowFrame, String, String, &quot;&quot;) \
</del><ins>+    macro(InspectorWindowFrame, inspectorWindowFrame, String, String, &quot;&quot;, &quot;&quot;, &quot;&quot;) \
</ins><span class="cx">     \
</span><span class="cx"> 
</span><span class="cx"> #define FOR_EACH_WEBKIT_DEBUG_PREFERENCE(macro) \
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesKeyscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesKeys.cpp (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesKeys.cpp        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/WebPreferencesKeys.cpp        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> namespace WebPreferencesKey {
</span><span class="cx"> 
</span><del>-#define DEFINE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
</del><ins>+#define DEFINE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</ins><span class="cx">         const String&amp; KeyLower##Key() \
</span><span class="cx">         { \
</span><span class="cx">             static NeverDestroyed&lt;String&gt; key(ASCIILiteral(#KeyUpper)); \
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> 
</span><span class="cx"> FOR_EACH_WEBKIT_PREFERENCE(DEFINE_KEY_GETTERS)
</span><span class="cx"> FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DEFINE_KEY_GETTERS)
</span><ins>+FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DEFINE_KEY_GETTERS)
</ins><span class="cx"> 
</span><span class="cx"> #undef DEFINE_KEY_GETTERS
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesKeysh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesKeys.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesKeys.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/WebPreferencesKeys.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -32,10 +32,11 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> namespace WebPreferencesKey {
</span><span class="cx"> 
</span><del>-#define DECLARE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) const String&amp; KeyLower##Key();
</del><ins>+#define DECLARE_KEY_GETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) const String&amp; KeyLower##Key();
</ins><span class="cx"> 
</span><span class="cx"> FOR_EACH_WEBKIT_PREFERENCE(DECLARE_KEY_GETTERS)
</span><span class="cx"> FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DECLARE_KEY_GETTERS)
</span><ins>+FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DECLARE_KEY_GETTERS)
</ins><span class="cx"> 
</span><span class="cx"> #undef DECLARE_KEY_GETTERS
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebPreferencesStorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebPreferencesStore.cpp (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebPreferencesStore.cpp        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/Shared/WebPreferencesStore.cpp        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -160,9 +160,10 @@
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;WebPreferencesStore::ValueMap&gt; defaults;
</span><span class="cx">     if (defaults.get().isEmpty()) {
</span><del>-#define DEFINE_DEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) defaults.get().set(WebPreferencesKey::KeyLower##Key(), WebPreferencesStore::Value((Type)DefaultValue));
</del><ins>+#define DEFINE_DEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) defaults.get().set(WebPreferencesKey::KeyLower##Key(), WebPreferencesStore::Value((Type)DefaultValue));
</ins><span class="cx">         FOR_EACH_WEBKIT_PREFERENCE(DEFINE_DEFAULTS)
</span><span class="cx">         FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DEFINE_DEFAULTS)
</span><ins>+        FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DEFINE_DEFAULTS)
</ins><span class="cx"> #undef DEFINE_DEFAULTS
</span><span class="cx"> #if USE(APPLE_INTERNAL_SDK)
</span><span class="cx"> #include &lt;WebKitAdditions/WebPreferencesStoreDefaultsAdditions.cpp&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIExperimentalFeaturecppfromrev199699trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.cpp (from rev 199699, trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm) (0 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.cpp                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.cpp        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;APIExperimentalFeature.h&quot;
+
+namespace API {
+
+Ref&lt;ExperimentalFeature&gt; ExperimentalFeature::create(const WTF::String&amp; name, const WTF::String&amp; key, const WTF::String&amp; details)
+{
+    return adoptRef(*new ExperimentalFeature(name, key, details));
+}
+
+ExperimentalFeature::ExperimentalFeature(const WTF::String&amp; name, const WTF::String&amp; key, const WTF::String&amp; details)
+    : m_name(name)
+    , m_key(key)
+    , m_details(details)
+{
+}
+
+ExperimentalFeature::~ExperimentalFeature()
+{
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIExperimentalFeaturehfromrev199699trunkSourceWebKit2SharedWebPreferencesKeysh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.h (from rev 199699, trunk/Source/WebKit2/Shared/WebPreferencesKeys.h) (0 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/APIExperimentalFeature.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef APIExperimentalFeature_h
+#define APIExperimentalFeature_h
+
+#include &quot;APIObject.h&quot;
+#include &lt;wtf/text/WTFString.h&gt;
+
+namespace API {
+
+class ExperimentalFeature final : public ObjectImpl&lt;Object::Type::ExperimentalFeature&gt; {
+public:
+    static Ref&lt;ExperimentalFeature&gt; create(const WTF::String&amp; name, const WTF::String&amp; key, const WTF::String&amp; details);
+    virtual ~ExperimentalFeature();
+
+    WTF::String name() const { return m_name; }
+    WTF::String key() const { return m_key; }
+    WTF::String details() const { return m_details; }
+
+private:
+    explicit ExperimentalFeature(const WTF::String&amp; name, const WTF::String&amp; key, const WTF::String&amp; details);
+
+    WTF::String m_name;
+    WTF::String m_key;
+    WTF::String m_details;
+};
+
+}
+
+#endif // APIExperimentalFeature_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKAPICasth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx"> #include &lt;WebCore/Settings.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace API {
</span><ins>+class ExperimentalFeature;
</ins><span class="cx"> class FrameHandle;
</span><span class="cx"> class FrameInfo;
</span><span class="cx"> class HitTestResult;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKPreferencesmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferences.mm (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferences.mm        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferences.mm        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -28,7 +28,11 @@
</span><span class="cx"> 
</span><span class="cx"> #if WK_API_ENABLED
</span><span class="cx"> 
</span><ins>+#import &quot;APIArray.h&quot;
+#import &quot;WKNSArray.h&quot;
</ins><span class="cx"> #import &quot;WebPreferences.h&quot;
</span><ins>+#import &quot;_WKExperimentalFeature.h&quot;
+#import &quot;_WKExperimentalFeatureInternal.h&quot;
</ins><span class="cx"> #import &lt;WebCore/SecurityOrigin.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -419,6 +423,22 @@
</span><span class="cx">     _preferences-&gt;setFixedFontFamily(fixedPitchFontFamily);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>++ (WK_ARRAY(_WKExperimentalFeature *) *)_experimentalFeatures
+{
+    auto features = WebKit::WebPreferences::experimentalFeatures();
+    return [wrapper(API::Array::create(WTFMove(features)).leakRef()) autorelease];
+}
+
+- (BOOL)_isEnabledForFeature:(_WKExperimentalFeature *)feature
+{
+    return _preferences-&gt;isEnabledForFeature(*feature-&gt;_experimentalFeature);
+}
+
+- (void)_setEnabled:(BOOL)value forFeature:(_WKExperimentalFeature *)feature
+{
+    _preferences-&gt;setEnabledForFeature(value, *feature-&gt;_experimentalFeature);
+}
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif // WK_API_ENABLED
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKPreferencesPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferencesPrivate.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferencesPrivate.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKPreferencesPrivate.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -46,6 +46,8 @@
</span><span class="cx">     _WKJavaScriptRuntimeFlagsAllEnabled = 0
</span><span class="cx"> } WK_ENUM_AVAILABLE(10_11, 9_0);
</span><span class="cx"> 
</span><ins>+@class _WKExperimentalFeature;
+
</ins><span class="cx"> @interface WKPreferences (WKPrivate)
</span><span class="cx"> 
</span><span class="cx"> // FIXME: This property should not have the verb &quot;is&quot; in it.
</span><span class="lines">@@ -85,6 +87,10 @@
</span><span class="cx"> @property (nonatomic, setter=_setOfflineApplicationCacheIsEnabled:) BOOL _offlineApplicationCacheIsEnabled;
</span><span class="cx"> @property (nonatomic, setter=_setFullScreenEnabled:) BOOL _fullScreenEnabled WK_AVAILABLE(10_11, 9_0);
</span><span class="cx"> 
</span><ins>++ (WK_ARRAY(_WKExperimentalFeature *) *)_experimentalFeatures;
+- (BOOL)_isEnabledForFeature:(_WKExperimentalFeature *)feature;
+- (void)_setEnabled:(BOOL)value forFeature:(_WKExperimentalFeature *)feature;
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeaturehfromrev199699trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.h (from rev 199699, trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm) (0 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &lt;WebKit/WKFoundation.h&gt;
+
+#if WK_API_ENABLED
+
+#import &lt;Foundation/Foundation.h&gt;
+
+WK_CLASS_AVAILABLE(10_11, 9_0)
+@interface _WKExperimentalFeature : NSObject
+
+@property (nonatomic, readonly, copy) NSString *key;
+@property (nonatomic, readonly, copy) NSString *name;
+@property (nonatomic, readonly, copy) NSString *details;
+
+@end
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeaturemmfromrev199699trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.mm (from rev 199699, trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm) (0 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.mm                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeature.mm        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;_WKExperimentalFeatureInternal.h&quot;
+
+#if WK_API_ENABLED
+
+@implementation _WKExperimentalFeature
+
+- (void)dealloc
+{
+    _experimentalFeature-&gt;API::ExperimentalFeature::~ExperimentalFeature();
+
+    [super dealloc];
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@&quot;&lt;%@: %p; name = %@; key = { %@ }&gt;&quot;, NSStringFromClass(self.class), self, self.name, self.key];
+}
+
+- (NSString *)name
+{
+    return _experimentalFeature-&gt;name();
+}
+
+- (NSString *)key
+{
+    return _experimentalFeature-&gt;key();
+}
+
+- (NSString *)details
+{
+    return _experimentalFeature-&gt;details();
+}
+
+#pragma mark WKObject protocol implementation
+
+- (API::Object&amp;)_apiObject
+{
+    return *_experimentalFeature;
+}
+
+@end
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoa_WKExperimentalFeatureInternalhfromrev199699trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h (from rev 199699, trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm) (0 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import &quot;_WKExperimentalFeature.h&quot;
+
+#if WK_API_ENABLED
+
+#import &quot;APIExperimentalFeature.h&quot;
+#import &quot;WKObject.h&quot;
+
+namespace WebKit {
+
+inline _WKExperimentalFeature *wrapper(API::ExperimentalFeature&amp; experimentalFeature)
+{
+    ASSERT([experimentalFeature.wrapper() isKindOfClass:[_WKExperimentalFeature class]]);
+    return (_WKExperimentalFeature *)experimentalFeature.wrapper();
+}
+
+}
+
+@interface _WKExperimentalFeature () &lt;WKObject&gt; {
+@package
+    API::ObjectStorage&lt;API::ExperimentalFeature&gt; _experimentalFeature;
+}
+@end
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPreferencescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPreferences.cpp (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPreferences.cpp        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/WebPreferences.cpp        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;WebPageGroup.h&quot;
</span><span class="cx"> #include &quot;WebPreferencesKeys.h&quot;
</span><span class="cx"> #include &quot;WebProcessPool.h&quot;
</span><ins>+#include &lt;wtf/NeverDestroyed.h&gt;
</ins><span class="cx"> #include &lt;wtf/ThreadingPrimitives.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -170,7 +171,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#define DEFINE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
</del><ins>+#define DEFINE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</ins><span class="cx">     void WebPreferences::set##KeyUpper(const Type&amp; value) \
</span><span class="cx">     { \
</span><span class="cx">         if (!m_store.set##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key(), value)) \
</span><span class="lines">@@ -186,9 +187,58 @@
</span><span class="cx"> 
</span><span class="cx"> FOR_EACH_WEBKIT_PREFERENCE(DEFINE_PREFERENCE_GETTER_AND_SETTERS)
</span><span class="cx"> FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DEFINE_PREFERENCE_GETTER_AND_SETTERS)
</span><ins>+FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DEFINE_PREFERENCE_GETTER_AND_SETTERS)
</ins><span class="cx"> 
</span><span class="cx"> #undef DEFINE_PREFERENCE_GETTER_AND_SETTERS
</span><span class="cx"> 
</span><ins>+static Vector&lt;RefPtr&lt;API::Object&gt;&gt; createExperimentalFeaturesVector()
+{
+    Vector&lt;RefPtr&lt;API::Object&gt;&gt; features;
+
+#define ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
+    features.append(API::ExperimentalFeature::create(HumanReadableName, #KeyUpper, HumanReadableDescription)); \
+
+    FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION)
+
+#undef ADD_EXPERIMENTAL_PREFERENCE_DESCRIPTION
+
+    return features;
+}
+
+const Vector&lt;RefPtr&lt;API::Object&gt;&gt;&amp; WebPreferences::experimentalFeatures()
+{
+    static NeverDestroyed&lt;Vector&lt;RefPtr&lt;API::Object&gt;&gt;&gt; features = createExperimentalFeaturesVector();
+    return features;
+}
+
+bool WebPreferences::isEnabledForFeature(const API::ExperimentalFeature&amp; feature) const
+{
+    const String&amp; key = feature.key();
+
+#define CALL_EXPERIMENTAL_GETTER(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
+    if (key == #KeyUpper) \
+        return KeyLower(); \
+
+    FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(CALL_EXPERIMENTAL_GETTER)
+
+#undef CALL_EXPERIMENTAL_GETTER
+
+    return false;
+}
+
+void WebPreferences::setEnabledForFeature(bool value, const API::ExperimentalFeature&amp; feature)
+{
+    const String&amp; key = feature.key();
+
+#define CALL_EXPERIMENTAL_SETTER(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
+    if (key == #KeyUpper) \
+        set##KeyUpper(value); \
+
+    FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(CALL_EXPERIMENTAL_SETTER)
+    
+#undef CALL_EXPERIMENTAL_SETTER
+}
+
</ins><span class="cx"> bool WebPreferences::anyPagesAreUsingPrivateBrowsing()
</span><span class="cx"> {
</span><span class="cx">     return privateBrowsingPageCount;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPreferencesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPreferences.h (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPreferences.h        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/WebPreferences.h        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #ifndef WebPreferences_h
</span><span class="cx"> #define WebPreferences_h
</span><span class="cx"> 
</span><ins>+#include &quot;APIExperimentalFeature.h&quot;
</ins><span class="cx"> #include &quot;APIObject.h&quot;
</span><span class="cx"> #include &quot;FontSmoothingLevel.h&quot;
</span><span class="cx"> #include &quot;WebPreferencesDefinitions.h&quot;
</span><span class="lines">@@ -34,7 +35,7 @@
</span><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> 
</span><del>-#define DECLARE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
</del><ins>+#define DECLARE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</ins><span class="cx">     void set##KeyUpper(const Type&amp; value); \
</span><span class="cx">     Type KeyLower() const;
</span><span class="cx"> 
</span><span class="lines">@@ -59,14 +60,13 @@
</span><span class="cx"> 
</span><span class="cx">     const WebPreferencesStore&amp; store() const { return m_store; }
</span><span class="cx"> 
</span><del>-#define DECLARE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
-    void set##KeyUpper(const Type&amp; value); \
-    Type KeyLower() const; \
-
</del><span class="cx">     FOR_EACH_WEBKIT_PREFERENCE(DECLARE_PREFERENCE_GETTER_AND_SETTERS)
</span><span class="cx">     FOR_EACH_WEBKIT_DEBUG_PREFERENCE(DECLARE_PREFERENCE_GETTER_AND_SETTERS)
</span><ins>+    FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(DECLARE_PREFERENCE_GETTER_AND_SETTERS)
</ins><span class="cx"> 
</span><del>-#undef DECLARE_PREFERENCE_GETTER_AND_SETTERS
</del><ins>+    static const Vector&lt;RefPtr&lt;API::Object&gt;&gt;&amp; experimentalFeatures();
+    bool isEnabledForFeature(const API::ExperimentalFeature&amp;) const;
+    void setEnabledForFeature(bool, const API::ExperimentalFeature&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // Exposed for WebKitTestRunner use only.
</span><span class="cx">     void forceUpdate() { update(); }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWebPreferencesMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/UIProcess/mac/WebPreferencesMac.mm        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -144,9 +144,10 @@
</span><span class="cx"> 
</span><span class="cx"> void WebPreferences::platformInitializeStore()
</span><span class="cx"> {
</span><del>-#define INITIALIZE_DEBUG_PREFERENCE_FROM_NSUSERDEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
</del><ins>+#define INITIALIZE_DEBUG_PREFERENCE_FROM_NSUSERDEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</ins><span class="cx">     setDebug##TypeName##ValueIfInUserDefaults(m_identifier, m_keyPrefix, m_globalDebugKeyPrefix, WebPreferencesKey::KeyLower##Key(), m_store);
</span><span class="cx"> 
</span><ins>+    FOR_EACH_WEBKIT_EXPERIMENTAL_FEATURE_PREFERENCE(INITIALIZE_DEBUG_PREFERENCE_FROM_NSUSERDEFAULTS)
</ins><span class="cx">     FOR_EACH_WEBKIT_DEBUG_PREFERENCE(INITIALIZE_DEBUG_PREFERENCE_FROM_NSUSERDEFAULTS)
</span><span class="cx"> 
</span><span class="cx"> #undef INITIALIZE_DEBUG_PREFERENCE_FROM_NSUSERDEFAULTS
</span><span class="lines">@@ -154,7 +155,7 @@
</span><span class="cx">     if (!m_identifier)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-#define INITIALIZE_PREFERENCE_FROM_NSUSERDEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) \
</del><ins>+#define INITIALIZE_PREFERENCE_FROM_NSUSERDEFAULTS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) \
</ins><span class="cx">     Type user##KeyUpper##Value; \
</span><span class="cx">     if (platformGet##TypeName##UserValueForKey(WebPreferencesKey::KeyLower##Key(), user##KeyUpper##Value)) \
</span><span class="cx">         m_store.set##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key(), user##KeyUpper##Value);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -712,6 +712,11 @@
</span><span class="cx">                 3131261F148FF82C00BA2A39 /* NotificationPermissionRequestManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3131261A148FF82B00BA2A39 /* NotificationPermissionRequestManager.h */; };
</span><span class="cx">                 31312620148FF82C00BA2A39 /* WebNotificationManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3131261B148FF82B00BA2A39 /* WebNotificationManager.cpp */; };
</span><span class="cx">                 31312621148FF82C00BA2A39 /* WebNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3131261C148FF82B00BA2A39 /* WebNotificationManager.h */; };
</span><ins>+                317FE7C51C487A6C00A0CA89 /* APIExperimentalFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 317FE7C21C487A6600A0CA89 /* APIExperimentalFeature.h */; };
+                317FE7C61C487A7100A0CA89 /* APIExperimentalFeature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 317FE7C11C487A6600A0CA89 /* APIExperimentalFeature.cpp */; };
+                317FE7CD1C487DAE00A0CA89 /* _WKExperimentalFeatureInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 317FE7C91C487D9D00A0CA89 /* _WKExperimentalFeatureInternal.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                317FE7CE1C487DB800A0CA89 /* _WKExperimentalFeature.mm in Sources */ = {isa = PBXBuildFile; fileRef = 317FE7C81C487D9D00A0CA89 /* _WKExperimentalFeature.mm */; };
+                317FE7CF1C487DBD00A0CA89 /* _WKExperimentalFeature.h in Headers */ = {isa = PBXBuildFile; fileRef = 317FE7C71C487D9D00A0CA89 /* _WKExperimentalFeature.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 318BE17114743DB100A8FBB2 /* WKNotificationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 318BE17014743DB100A8FBB2 /* WKNotificationManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 318BE17514743DD700A8FBB2 /* WKNotificationManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 318BE17414743DD600A8FBB2 /* WKNotificationManager.cpp */; };
</span><span class="cx">                 318BE17714743E6000A8FBB2 /* WKNotification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 318BE17614743E6000A8FBB2 /* WKNotification.cpp */; };
</span><span class="lines">@@ -2717,6 +2722,11 @@
</span><span class="cx">                 3131261C148FF82B00BA2A39 /* WebNotificationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNotificationManager.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 3131261D148FF82C00BA2A39 /* WebNotificationManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebNotificationManager.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 31607F3819627002009B87DA /* LegacySessionStateCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacySessionStateCoding.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                317FE7C11C487A6600A0CA89 /* APIExperimentalFeature.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APIExperimentalFeature.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                317FE7C21C487A6600A0CA89 /* APIExperimentalFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIExperimentalFeature.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                317FE7C71C487D9D00A0CA89 /* _WKExperimentalFeature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKExperimentalFeature.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                317FE7C81C487D9D00A0CA89 /* _WKExperimentalFeature.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKExperimentalFeature.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
+                317FE7C91C487D9D00A0CA89 /* _WKExperimentalFeatureInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKExperimentalFeatureInternal.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 318BE17014743DB100A8FBB2 /* WKNotificationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNotificationManager.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 318BE17414743DD600A8FBB2 /* WKNotificationManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKNotificationManager.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 318BE17614743E6000A8FBB2 /* WKNotification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKNotification.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -5034,6 +5044,9 @@
</span><span class="cx">                                 379A873B18BBFF0700588AF2 /* _WKElementActionInternal.h */,
</span><span class="cx">                                 1AD01BC71905D37E00C9C45F /* _WKErrorRecoveryAttempting.h */,
</span><span class="cx">                                 1AD01BC61905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm */,
</span><ins>+                                317FE7C71C487D9D00A0CA89 /* _WKExperimentalFeature.h */,
+                                317FE7C81C487D9D00A0CA89 /* _WKExperimentalFeature.mm */,
+                                317FE7C91C487D9D00A0CA89 /* _WKExperimentalFeatureInternal.h */,
</ins><span class="cx">                                 005D158E18E4C4EB00734619 /* _WKFindDelegate.h */,
</span><span class="cx">                                 2DEAC5CE1AC368BB00A195D8 /* _WKFindOptions.h */,
</span><span class="cx">                                 2E7A94491BBD95C600945547 /* _WKFocusedElementInfo.h */,
</span><span class="lines">@@ -6018,6 +6031,8 @@
</span><span class="cx">                                 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */,
</span><span class="cx">                                 83891B621A68B3420030F386 /* APIDiagnosticLoggingClient.h */,
</span><span class="cx">                                 1F7D36C018DA513F00D9D659 /* APIDownloadClient.h */,
</span><ins>+                                317FE7C11C487A6600A0CA89 /* APIExperimentalFeature.cpp */,
+                                317FE7C21C487A6600A0CA89 /* APIExperimentalFeature.h */,
</ins><span class="cx">                                 00B9661518E24CBA00CE1F88 /* APIFindClient.h */,
</span><span class="cx">                                 2DD67A2D1BD819730053B251 /* APIFindMatchesClient.h */,
</span><span class="cx">                                 37E25D6D18FDE5D6005D3A00 /* APIFormClient.h */,
</span><span class="lines">@@ -7614,6 +7629,7 @@
</span><span class="cx">                                 2DE6943E18BD2A68005C15E5 /* SmartMagnificationControllerMessages.h in Headers */,
</span><span class="cx">                                 5272B28B1406985D0096A5D0 /* StatisticsData.h in Headers */,
</span><span class="cx">                                 514BDED316C98EDD00E4E25E /* StatisticsRequest.h in Headers */,
</span><ins>+                                317FE7CD1C487DAE00A0CA89 /* _WKExperimentalFeatureInternal.h in Headers */,
</ins><span class="cx">                                 1AD3306F16B1D991004F60E7 /* StorageAreaImpl.h in Headers */,
</span><span class="cx">                                 1ACECD2517162DB1001FC9EF /* StorageAreaMap.h in Headers */,
</span><span class="cx">                                 1A334DEE16DE8F88006A8E38 /* StorageAreaMapMessages.h in Headers */,
</span><span class="lines">@@ -7796,6 +7812,7 @@
</span><span class="cx">                                 51F060E01654317F00F3281B /* WebResourceLoaderMessages.h in Headers */,
</span><span class="cx">                                 7C361D731927FA360036A59D /* WebScriptMessageHandler.h in Headers */,
</span><span class="cx">                                 D3B9484911FF4B6500032B39 /* WebSearchPopupMenu.h in Headers */,
</span><ins>+                                317FE7C51C487A6C00A0CA89 /* APIExperimentalFeature.h in Headers */,
</ins><span class="cx">                                 1A4832D71A9CDF96008B4DFE /* WebsiteData.h in Headers */,
</span><span class="cx">                                 1A4832D11A9BDC2F008B4DFE /* WebsiteDataRecord.h in Headers */,
</span><span class="cx">                                 1A53C2AA1A325730004E8C70 /* WebsiteDataStore.h in Headers */,
</span><span class="lines">@@ -8142,6 +8159,7 @@
</span><span class="cx">                                 26F9A83B18A3468100AEB88A /* WKWebViewPrivate.h in Headers */,
</span><span class="cx">                                 1AD60F5E18E20F4C0020C034 /* WKWindowFeatures.h in Headers */,
</span><span class="cx">                                 1AD60F6018E20F740020C034 /* WKWindowFeaturesInternal.h in Headers */,
</span><ins>+                                317FE7CF1C487DBD00A0CA89 /* _WKExperimentalFeature.h in Headers */,
</ins><span class="cx">                                 1A7C0DF71B7D1F1000A9B848 /* WKWindowFeaturesRef.h in Headers */,
</span><span class="cx">                                 BCBECDE816B6416800047A1A /* XPCServiceEntryPoint.h in Headers */,
</span><span class="cx">                         );
</span><span class="lines">@@ -9080,6 +9098,7 @@
</span><span class="cx">                                 1A002D48196B345D00B9AD44 /* SessionStateCoding.mm in Sources */,
</span><span class="cx">                                 1A7284481959F8040007BCE5 /* SessionStateConversion.cpp in Sources */,
</span><span class="cx">                                 753E3E0D1887398500188496 /* SessionTracker.cpp in Sources */,
</span><ins>+                                317FE7C61C487A7100A0CA89 /* APIExperimentalFeature.cpp in Sources */,
</ins><span class="cx">                                 1A6420E412DCE2FF00CAAE2C /* ShareableBitmap.cpp in Sources */,
</span><span class="cx">                                 C01A260112662F2100C9ED55 /* ShareableBitmapCG.cpp in Sources */,
</span><span class="cx">                                 1ACC50F11CBC381D003C7D03 /* WKOpenPanelParameters.mm in Sources */,
</span><span class="lines">@@ -9296,6 +9315,7 @@
</span><span class="cx">                                 BCEE7AD012817988009827DA /* WebProcessProxyMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 1A1E093318861D3800D2DC49 /* WebProgressTrackerClient.cpp in Sources */,
</span><span class="cx">                                 512F589C12A8838800629530 /* WebProtectionSpace.cpp in Sources */,
</span><ins>+                                317FE7CE1C487DB800A0CA89 /* _WKExperimentalFeature.mm in Sources */,
</ins><span class="cx">                                 A1C512C8190656E500448914 /* WebQuickLookHandleClient.cpp in Sources */,
</span><span class="cx">                                 37948403150C350600E52CE9 /* WebRenderLayer.cpp in Sources */,
</span><span class="cx">                                 3760881E150413E900FC82C7 /* WebRenderObject.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -2844,7 +2844,7 @@
</span><span class="cx">     // but we currently don't match the naming of WebCore exactly so we are
</span><span class="cx">     // handrolling the boolean and integer preferences until that is fixed.
</span><span class="cx"> 
</span><del>-#define INITIALIZE_SETTINGS(KeyUpper, KeyLower, TypeName, Type, DefaultValue) settings.set##KeyUpper(store.get##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key()));
</del><ins>+#define INITIALIZE_SETTINGS(KeyUpper, KeyLower, TypeName, Type, DefaultValue, HumanReadableName, HumanReadableDescription) settings.set##KeyUpper(store.get##TypeName##ValueForKey(WebPreferencesKey::KeyLower##Key()));
</ins><span class="cx"> 
</span><span class="cx">     FOR_EACH_WEBKIT_STRING_PREFERENCE(INITIALIZE_SETTINGS)
</span><span class="cx"> 
</span><span class="lines">@@ -3108,7 +3108,7 @@
</span><span class="cx"> #if ENABLE(DOWNLOAD_ATTRIBUTE)
</span><span class="cx">     RuntimeEnabledFeatures::sharedFeatures().setDownloadAttributeEnabled(store.getBoolValueForKey(WebPreferencesKey::downloadAttributeEnabledKey()));
</span><span class="cx"> #endif
</span><del>-    
</del><ins>+
</ins><span class="cx">     bool processSuppressionEnabled = store.getBoolValueForKey(WebPreferencesKey::pageVisibilityBasedProcessSuppressionEnabledKey());
</span><span class="cx">     if (m_processSuppressionEnabled != processSuppressionEnabled) {
</span><span class="cx">         m_processSuppressionEnabled = processSuppressionEnabled;
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Tools/ChangeLog        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-04-18  Dean Jackson  &lt;dino@apple.com&gt;
+
+        New SPI to export a dictionary of runtime features
+        https://bugs.webkit.org/show_bug.cgi?id=156645
+        &lt;rdar://problem/23621666&gt;
+
+        Reviewed by Darin Adler.
+
+        Test the experimental features SPI on WKPreferences.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:
+
</ins><span class="cx"> 2016-04-18  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSCOnly] Implement RunLoop and remove glib dependency
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaPreferencesmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm (199699 => 199700)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm        2016-04-19 01:38:30 UTC (rev 199699)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm        2016-04-19 01:46:48 UTC (rev 199700)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #import &quot;Test.h&quot;
</span><span class="cx"> #import &lt;WebKit/WKFoundation.h&gt;
</span><span class="cx"> #import &lt;WebKit/WKPreferencesPrivate.h&gt;
</span><ins>+#import &lt;WebKit/_WKExperimentalFeature.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> TEST(WebKit2, DefaultWKPreferences)
</span><span class="lines">@@ -41,4 +42,17 @@
</span><span class="cx">     EXPECT_TRUE([preferences _isStandalone]);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TEST(WebKit2, ExperimentalFeatures)
+{
+    NSArray&lt;_WKExperimentalFeature *&gt; *features = [WKPreferences _experimentalFeatures];
+    EXPECT_NOT_NULL(features);
+
+    RetainPtr&lt;WKPreferences&gt; preferences = adoptNS([[WKPreferences alloc] init]);
+
+    for (_WKExperimentalFeature *feature in features) {
+        BOOL value = [preferences _isEnabledForFeature:feature];
+        [preferences _setEnabled:value forFeature:feature];
+    }
+}
+
</ins><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>