On Sep 26, 2012, at 4:13 PM, Brady Eidson <beid...@apple.com> wrote:

> 
> On Sep 26, 2012, at 2:46 PM, Tony Chang <t...@chromium.org> wrote:
> 
>> On Wed, Sep 26, 2012 at 2:35 PM, Brady Eidson <beid...@apple.com> wrote:
>> On Sep 26, 2012, at 2:05 PM, Adam Barth <aba...@webkit.org> wrote:
>>> [re-sent from the proper address]
>>> 
>>> On Wed, Sep 26, 2012 at 2:00 PM, Adam Barth <abarth@nowhere> wrote:
>>> On Wed, Sep 26, 2012 at 1:53 PM, Brady Eidson <beid...@apple.com> wrote:
>>> On Sep 26, 2012, at 1:48 PM, Ryosuke Niwa <rn...@webkit.org> wrote:
>>>> On Wed, Sep 26, 2012 at 1:44 PM, Simon Fraser <simon.fra...@apple.com> 
>>>> wrote:
>>>> 
>>>>  First, direct calls on testRunner that just set preferences should be 
>>>> migrated to internals.settings or testRunner.overridePreference calls, I 
>>>> think (I don't know if either is preferred).
>>>> 
>>>> I support the idea of unifying the approaches and just use 
>>>> internals.settings. However, the last time I checked, Alexey had some 
>>>> concerns about using internals due to settings may not be properly 
>>>> propagated to WebKit2 layer. Has this concern been addressed?
>>> 
>>> In general I prefer the overridePreference() calls whenever they exist.
>>> 
>>> internals.settings are not exposed in any real-world product whereas 
>>> preferences exist in each platform's WebKit-layer API that they expose to 
>>> their embedders in some form.
>>> 
>>> The main downside of overridePreference is that it requires that you expose 
>>> an API for twiddling the preference on every port.  That can lead to us 
>>> exposing unneeded APIs (making them harder to remove) and to a bunch of 
>>> port-specific code in an otherwise port-independent patch.
>>> 
>>> IMHO, we should prefer InternalSettings unless we need to test the 
>>> WebKit-layer code.
>> 
>> I suppose we're biased in Mac-land where the mechanism originated, but the 
>> "API" is simply a single string based API that only had to be implemented 
>> once.
>> 
>> Your comment leads me to understand that at least one other port doesn't 
>> have simple string based preferences.
>> 
>> Of course to add *any* new internal setting new code must be added 
>> specifically for that setting...
>> 
>> Of course that code only has to be added once for all platforms…
>> 
>> I think for all the major ports, they are simple string based preferences.  
>> However, adding a new overridePreference call means updating 5 WebKit API 
>> interfaces (Mac, Win, Chromium, GTK+, QT),  and updating 5 DRTs and 1 WTR.  
>> Compared to updating a single internal.settings implementation, this is a 
>> lot of work.
> 
> I think you misunderstand what I meant.
> 
> The Mac DRT implementation of overridePreference has the following 
> implementation:
> 
> void TestRunner::overridePreference(JSStringRef key, JSStringRef value)
> {
>     RetainPtr<CFStringRef> keyCF(AdoptCF, 
> JSStringCopyCFString(kCFAllocatorDefault, key));
>     NSString *keyNS = (NSString *)keyCF.get();
> 
>     RetainPtr<CFStringRef> valueCF(AdoptCF, 
> JSStringCopyCFString(kCFAllocatorDefault, value));
>     NSString *valueNS = (NSString *)valueCF.get();
> 
>     [[WebPreferences standardPreferences] 
> _setPreferenceForTestWithValue:valueNS forKey:keyNS];
> }
> 
> This works for any preference;  Even a new one that has never been twiddled 
> in a regression test before.
> 
> For example in http://trac.webkit.org/changeset/127956 we added a new test 
> that twiddled the "WebKitStorageBlockingPolicy" preference and we didn't need 
> to change any DRT Mac code to accomplish this.
> 
> Compared to adding a single implementation to internal.settings, this was 
> *NO* additional work.

But is there code to undo this pref change for subsequent tests?

Simon


_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to