[webkit-dev] Runtime setting for incomplete features

Maciej Stachowiak mjs at apple.com
Mon Sep 21 13:22:49 PDT 2009


On Sep 21, 2009, at 12:31 PM, Jeremy Orlow wrote:

> On Mon, Sep 21, 2009 at 12:17 PM, Maciej Stachowiak <mjs at apple.com>  
> wrote:
>
> On Sep 18, 2009, at 1:30 PM, Jeremy Orlow wrote:
>
>> On Fri, Sep 18, 2009 at 12:59 PM, Alexey Proskuryakov  
>> <ap at webkit.org> wrote:
>>
>> 18.09.2009, в 12:24, Jeremy Orlow написал(а):
>>
>>
>> I'm not sure if we've hit any compatibility issues with this yet,  
>> but it seems quite plausible that someone would compare  
>> window.localStorage (or sessionStorage or database) to undefined  
>> and, since it's null (vs. undefined), their script would assume  
>> it's available.
>>
>> Note that they can also do '"localStorage" in window', which we  
>> can't easily prevent from returning true.
>>
>> That's true.  And unfortunate.
>>
>> What would be involved in making it not return true?
>
> It would be pretty complicated to do that based on a runtime  
> setting. You would need a custom getter for any object that has  
> properties which may appear or disappear based on settings.
>
> Some of these already have a custom getter.  Maybe it makes sense to  
> go ahead and do it for them?
>
> This is probably too complicated to be worth it. Or at least, if we  
> added that level of code complexity I would begin to doubt the  
> merits of supporting runtime enabling of Web platform features.
>
> I think it depends on why it's enabled at run time.  If it's a  
> feature that some users might want to completely turn off, then I  
> think there's some merit to going the extra mile to disable it in  
> run time.  But if it's something that's disabled because it's  
> experimental, then I'd lean towards your point of view.

Fair enough. But I would be against user-level preferences that add or  
remove entire APIs. Rather, the preference should affect the behavior  
of the API (possibly making it do nothing). So far the only actual  
user-level preference I'm aware of that effectively disables APIs is  
private browsing. And I think the way it works (in both Safari and  
Chrome, even though it is different) is better than it would be to  
make storage-related APIs disappear completely.

>
> Which is a shame, because if ("localStorage" in window) is a  
> generally a better way to feature test than if  
> (window.localStorage). The latter idiom is problematic for  
> attributes where a possible valid value is something that evaluates  
> to false, or where computing the value can be expensive. For  
> example, if (document.body.outerHTML) would be an awful way to test  
> whether outerHTML is available.
>
> Agreed.  In practice, I can't think of anything we'd disable in run  
> time like that, but it's obviously more difficult for the web  
> developer to know this.

Even though this style of feature test is better, it's tragically much  
less common than if (window.fooBar), so it's likely not a problem in  
practice.

>
> Even if we can't make the property not show up, would you agree that  
> returning undefined is better than returning null?

Slightly better. The only real difference it would make is if someone  
tests using a === comparison to undefined (as opposed to == or just a  
plain boolean test).

Regards,
Maciej

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090921/7c5aae14/attachment.html>


More information about the webkit-dev mailing list