- From: David Singer <singer@apple.com>
- Date: Wed, 21 Dec 2011 16:40:02 -0800
- To: Justin Lebar <jlebar@mozilla.com>
- Cc: Richard Barnes <richard.barnes@gmail.com>, public-privacy@w3.org, Sid Stamm <sid@mozilla.com>, Jonas Sicking <jonas@sicking.cc>
Indeed, we might be trying to save bytes on the wire by using 1 and 0, but maybe in an API and code clarity is better.
On Dec 21, 2011, at 13:00 , Justin Lebar wrote:
>> If you want to make that fail, then maybe you should make it a string.
>
> Yes, that's precisely my proposal with "yes", "no", and "unspecified".
> I prefer this to an enum.
>
> On Wed, Dec 21, 2011 at 3:57 PM, Richard Barnes
> <richard.barnes@gmail.com> wrote:
>> It seems wrong to be conditioning an if statement on a ternary value
>> anyway. If you want to make that fail, then maybe you should make it
>> a string. You could use the values used informally in the draft spec,
>> "OPT-IN", "OPT-OUT", and "NO-EXPRESSED-PREFERENCE" [1]. Maybe via an
>> enum.
>>
>> if (navigator.doNotTrack == DNT.optIn) { /* track */ }
>> else if (navigator.doNotTrack == DNT.optOut) { /* don't track */ }
>> else if (navigator.doNotTrack == DNT.noExpressedPreference) { /*
>> probably track anyway */ }
>> else { /* there is no else */ }
>>
>> --Richard
>>
>> [1] <http://tools.ietf.org/html/draft-mayer-do-not-track-00#section-6.1>
>>
>>
>>
>> On Wed, Dec 21, 2011 at 3:47 PM, Justin Lebar <jlebar@mozilla.com> wrote:
>>> On Wed, Dec 21, 2011 at 3:28 PM, Richard Barnes
>>> <richard.barnes@gmail.com> wrote:
>>>> How about just using NaN? That would be consistent with just calling
>>>> parseInt() on the content of the header ("0", "1", or "").
>>>
>>> If we made navigator.doNotTrack a number (0, 1, NaN), then
>>>
>>> if (navigator.doNotTrack)
>>>
>>> would work correctly. But then the negation,
>>>
>>> if (!navigator.doNotTrack)
>>>
>>> is not right. :)
>>>
>>>> On Wed, Dec 21, 2011 at 2:00 PM, Justin Lebar <jlebar@mozilla.com> wrote:
>>>>> In Firefox, we implemented navigator.doNotTrack to return either
>>>>>
>>>>> "unspecified", if the user has not opted in to DNT, or
>>>>> "yes", if the user has opted in to DNT.
>>>>>
>>>>> The proposed DNT spec has us return "1" if the user has opted in to
>>>>> DNT and doesn't seem to specify what we should return otherwise.
>>>>>
>>>>> I propose the spec be modified to explicitly state what UAs should
>>>>> return if the user has not opted in to DNT, and to use unspecified/yes
>>>>> instead of ??/1.
>>>>>
>>>>> DNT is a tri-state, not a boolean. The DNT http header may be 1, 0,
>>>>> or not present. 0 indicates that the user has explicitly opted in to
>>>>> tracking. Although Firefox doesn't support this option at the moment,
>>>>> we'd like to spec DNT in such a way as to allow users to explicitly
>>>>> opt in to tracking. We propose that navigator.doNotTrack == "no"
>>>>> correspond to DNT: 0.
>>>>>
>>>>> It's confusing that navigator.doNotTrack's value doesn't correspond to
>>>>> the value of the HTTP header, but we did this because we wanted to
>>>>> protect against buggy JS which assumes navigator.doNotTrack is a
>>>>> boolean. If we were to use navigator.doNotTrack == '' for users who
>>>>> have neither oped in nor out of DNT, then sites could do |if
>>>>> (navigator.doNotTrack) { // don't track me }|. This would make it
>>>>> difficult for us to introduce navigator.doNotTrack = "no" in the
>>>>> future, because "no" resolves to the boolean |true|.
>>>>>
>>>>> I've filed a webkit bug on this issue [1].
>>>>>
>>>>> [1] https://bugs.webkit.org/show_bug.cgi?id=75008
>>>>>
>
David Singer
Multimedia and Software Standards, Apple Inc.
Received on Thursday, 22 December 2011 00:40:31 UTC