<div dir="ltr">On Sat, Nov 5, 2016 at 3:52 PM, Michael Catanzaro <span dir="ltr">&lt;<a href="mailto:mcatanzaro@igalia.com" target="_blank">mcatanzaro@igalia.com</a>&gt;</span> wrote:<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi Brady!<br>
<span class="gmail-"><br>
On Sat, 2016-11-05 at 11:04 -0700, Brady Eidson wrote:<br>
&gt; This has come up in Apple, where some people assume that the fact<br>
&gt; they&#39;re called &quot;Experimental&quot; features means they are still under<br>
&gt; heavy development or in some way unstable or potentially harmful.<br>
&gt;<br>
&gt; I don&#39;t believe that is actually the case.<br>
<br>
</span>Surely if the feature is stable, then it should be moved to the non-<br>
experimental section of WebPreferencesDefinitions.<wbr>h. Stable features<br>
shouldn&#39;t be touched<br>
by FOR_EACH_WEBKIT_<wbr>EXPERIMENTAL_FEATURE_<wbr>PREFERENCE.<br>
<span class="gmail-"><br>
&gt; Ignoring the name for a moment, the _WKExperimentalFeature API really<br>
&gt; does precisely two things:<br>
&gt; 1 - Exposes an enumerable set of runtime-enablable features.<br>
&gt; 2 - Exposes an API to turn each of them on or off.<br>
&gt;<br>
&gt; That&#39;s it.<br>
&gt;<br>
&gt; For a long time we&#39;ve had &quot;runtime enabled features&quot; in the project<br>
&gt; with no way to expose them as an enumerable set to the API client.<br>
&gt; The API was named &quot;Experimental&quot; feature, I think, because at first<br>
&gt; only &quot;under heavy development&quot; features that were not ready to be<br>
&gt; enabled at runtime adopted the mechanism.<br>
<br>
</span>This is surprising to me! We&#39;ve had API for this in WebKitGTK+ for a<br>
long time (WebKitSettings.h), and there&#39;s extensive cross-platform<br>
infrastructure to support it (WebPreferencesDefinitions.h). Of course I<br>
agree it makes sense to have non-experimental settings that can be<br>
enabled or disabled at runtime. It sounds like Cocoa API changes are<br>
required to support this?<br>
<span class="gmail-"><br>
&gt; &gt; They should be enabled by Safari if they&#39;re desired there.<br>
&gt;<br>
&gt; The ones that have been deemed fit to be &quot;enabled by default&quot; for<br>
&gt; testing should be on by default for testing in places other than<br>
&gt; Safari, such as MiniBrowser and 3rd party WebKit apps.<br>
<br>
</span>Good point.<br>
<span class="gmail-"><br>
&gt; I strongly object to reverting all _WKExperimentalFeatures to &quot;off by<br>
&gt; default&quot;<br>
&gt;<br>
&gt; I strong support adding port-specific defaults.<br>
&gt;<br>
&gt; As a different conversation, I also support renaming the API to<br>
&gt; something that doesn&#39;t impart the baggage of an &quot;under development&quot;<br>
&gt; or &quot;unstable&quot; feature.<br>
<br>
</span>Well we already have GTK+-specific defaults for runtime settings in<br>
WebKitSettings.cpp, but only for the subset of the settings that are<br>
exposed in our API. We can&#39;t use it for all settings, though, because<br>
we don&#39;t want every setting to become API forever, and we don&#39;t want<br>
non-GTK+ developers to have to remember to add GTK+ API for every new<br>
runtime feature.<br>
<br>
I&#39;m not actually sure that we do need port-specific defaults for<br>
runtime settings. I think that in general, we really want to use the<br>
same defaults as Apple. You know better than we what the settings do<br>
and how stable they are. The exception would be when settings need<br>
platform-specific implementation, but in that case I&#39;d expect the<br>
options would have to be guarded by build flags, and we already have<br>
port-specific defaults for build flags.<br>
<br>
But we surely don&#39;t want anything labeled experimental to be enabled by<br>
default for end users. I really doubt you would want such features<br>
enabled in stable versions of Safari either, right?<br></blockquote><div><br></div><div>I DO want to enable experimental features to be enabled in Safari Technology Preview and WebKit nightly builds by default because that&#39;s sort of the whole point of having those versions of Safari in the first place.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Maybe what we really need is one set of defaults that are appropriate<br>
for development (our bots, ENABLE(DEVELOPER_MODE), Safari Tech Preview,<br>
etc.) and a different set of defaults that are appropriate for stable<br>
releases and end users.</blockquote><div><br></div><div>That makes sense.  Ideally, FOR_EACH_WEBKIT_<wbr>EXPERIMENTAL_FEATURE_<wbr>PREFERENCE is only used for features that need to be enabled in those &quot;beta&quot; or &quot;developer&quot; versions of each port&#39;s browser.</div><div><br></div><div>- R. Niwa</div><div><br></div></div></div></div>