- 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