Bug 765398 - Add a "yes, I allow tracking" option to DNT. (r=dolske)

--HG--
extra : rebase_source : 1a0ce8dc9086dc501d9f5a183af8a5a3360ee8a9
This commit is contained in:
Sid Stamm 2012-06-14 14:19:27 -07:00
parent 88de345330
commit d4170e5094
10 changed files with 160 additions and 14 deletions

View File

@ -1001,6 +1001,7 @@ pref("services.sync.prefs.sync.privacy.clearOnShutdown.passwords", true);
pref("services.sync.prefs.sync.privacy.clearOnShutdown.sessions", true);
pref("services.sync.prefs.sync.privacy.clearOnShutdown.siteSettings", true);
pref("services.sync.prefs.sync.privacy.donottrackheader.enabled", true);
pref("services.sync.prefs.sync.privacy.donottrackheader.value", true);
pref("services.sync.prefs.sync.privacy.sanitize.sanitizeOnShutdown", true);
pref("services.sync.prefs.sync.security.OCSP.disable_button.managecrl", true);
pref("services.sync.prefs.sync.security.OCSP.enabled", true);

View File

@ -123,6 +123,56 @@ var gPrivacyPane = {
document.getElementById("historyPane").selectedIndex = selectedIndex;
},
/**
* Open up the DNT "learn more" link.
*/
openTrackingInfoSite: function PPP_openTrackingInfoSite()
{
let thisDocEl = document.documentElement,
openerDocEl = window.opener && window.opener.document.documentElement,
url = "https://www.mozilla.org/dnt";
if (thisDocEl.id == "BrowserPreferences" && !thisDocEl.instantApply)
openUILinkIn(url, "window");
else
openUILinkIn(url, "tab");
},
/**
* Update the Tracking preferences based on controls.
*/
setTrackingPrefs: function PPP_setTrackingPrefs()
{
let dntRadioGroup = document.getElementById("doNotTrackSelection"),
dntValuePref = document.getElementById("privacy.donottrackheader.value"),
dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
// if the selected radio button says "no preference", set on/off pref to
// false and don't change the value pref.
if (dntRadioGroup.selectedItem.value == -1) {
dntEnabledPref.value = false;
return dntValuePref.value;
}
dntEnabledPref.value = true;
return dntRadioGroup.selectedItem.value;
},
/**
* Obtain the tracking preference value and reflect it in the UI.
*/
getTrackingPrefs: function PPP_getTrackingPrefs()
{
let dntValuePref = document.getElementById("privacy.donottrackheader.value"),
dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
// if DNT is enbaled, select the value from the selected radio
// button, otherwise choose the "no preference" radio button
if (dntEnabledPref.value)
return dntValuePref.value;
return document.getElementById("dntnopref").value;
},
/**
* Update the private browsing auto-start pref and the history mode
* micro-management prefs based on the history mode menulist

View File

@ -11,6 +11,9 @@
<preference id="privacy.donottrackheader.enabled"
name="privacy.donottrackheader.enabled"
type="bool"/>
<preference id="privacy.donottrackheader.value"
name="privacy.donottrackheader.value"
type="int"/>
<!-- XXX button prefs -->
<preference id="pref.privacy.disable_button.cookie_exceptions"
@ -79,11 +82,20 @@
<!-- Tracking -->
<groupbox id="trackingGroup" data-category="panePrivacy" hidden="true">
<caption label="&tracking.label;"/>
<checkbox id="privacyDoNotTrackPrefs"
label="&doNotTrack.label;"
accesskey="&doNotTrack.accesskey;"
preference="privacy.donottrackheader.enabled"/>
<radiogroup id="doNotTrackSelection" orient="vertical"
preference="privacy.donottrackheader.value"
onsynctopreference="return gPrivacyPane.setTrackingPrefs()"
onsyncfrompreference="return gPrivacyPane.getTrackingPrefs()">
<radio id="dntnotrack" value="1" label="&dntTrackingNotOkay.label;"
accesskey="&dntTrackingNotOkay.accesskey;" />
<radio id="dntdotrack" value="0" label="&dntTrackingOkay.label;"
accesskey="&dntTrackingOkay.accesskey;" />
<radio id="dntnopref" value="-1" label="&dntTrackingNopref.label;"
accesskey="&dntTrackingNopref.accesskey;" />
</radiogroup>
<label class="text-link" id="doNotTrackInfo"
onclick="event.stopPropagation();gPrivacyPane.openTrackingInfoSite();"
value="&doNotTrackInfo.label;"/>
</groupbox>
<!-- History -->

View File

@ -126,6 +126,56 @@ var gPrivacyPane = {
document.getElementById("historyPane").selectedIndex = selectedIndex;
},
/**
* Open up the DNT "learn more" link.
*/
openTrackingInfoSite: function PPP_openTrackingInfoSite()
{
let thisDocEl = document.documentElement,
openerDocEl = window.opener && window.opener.document.documentElement,
url = "https://www.mozilla.org/dnt";
if (thisDocEl.id == "BrowserPreferences" && !thisDocEl.instantApply)
openUILinkIn(url, "window");
else
openUILinkIn(url, "tab");
},
/**
* Update the Tracking preferences based on controls.
*/
setTrackingPrefs: function PPP_setTrackingPrefs()
{
let dntRadioGroup = document.getElementById("doNotTrackSelection"),
dntValuePref = document.getElementById("privacy.donottrackheader.value"),
dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
// if the selected radio button says "no preference", set on/off pref to
// false and don't change the value pref.
if (dntRadioGroup.selectedItem.value == -1) {
dntEnabledPref.value = false;
return dntValuePref.value;
}
dntEnabledPref.value = true;
return dntRadioGroup.selectedItem.value;
},
/**
* Obtain the tracking preference value and reflect it in the UI.
*/
getTrackingPrefs: function PPP_getTrackingPrefs()
{
let dntValuePref = document.getElementById("privacy.donottrackheader.value"),
dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
// if DNT is enbaled, select the value from the selected radio
// button, otherwise choose the "no preference" radio button
if (dntEnabledPref.value)
return dntValuePref.value;
return document.getElementById("dntnopref").value;
},
/**
* Update the private browsing auto-start pref and the history mode
* micro-management prefs based on the history mode menulist

View File

@ -26,6 +26,9 @@
<preference id="privacy.donottrackheader.enabled"
name="privacy.donottrackheader.enabled"
type="bool"/>
<preference id="privacy.donottrackheader.value"
name="privacy.donottrackheader.value"
type="int"/>
<!-- XXX button prefs -->
<preference id="pref.privacy.disable_button.cookie_exceptions"
@ -90,11 +93,21 @@
<!-- Tracking -->
<groupbox id="trackingGroup">
<caption label="&tracking.label;"/>
<radiogroup id="doNotTrackSelection" orient="vertical"
preference="privacy.donottrackheader.value"
onsynctopreference="return gPrivacyPane.setTrackingPrefs()"
onsyncfrompreference="return gPrivacyPane.getTrackingPrefs()">
<radio id="dntnotrack" value="1" label="&dntTrackingNotOkay.label;"
accesskey="&dntTrackingNotOkay.accesskey;" />
<radio id="dntdotrack" value="0" label="&dntTrackingOkay.label;"
accesskey="&dntTrackingOkay.accesskey;" />
<radio id="dntnopref" value="-1" label="&dntTrackingNopref.label;"
accesskey="&dntTrackingNopref.accesskey;" />
</radiogroup>
<label class="text-link" id="doNotTrackInfo"
onclick="event.stopPropagation();gPrivacyPane.openTrackingInfoSite();"
value="&doNotTrackInfo.label;"/>
<checkbox id="privacyDoNotTrackPrefs"
label="&doNotTrack.label;"
accesskey="&doNotTrack.accesskey;"
preference="privacy.donottrackheader.enabled"/>
</groupbox>
<!-- History -->

View File

@ -4,8 +4,13 @@
<!ENTITY tracking.label "Tracking">
<!ENTITY doNotTrack.label "Tell websites I do not want to be tracked">
<!ENTITY doNotTrack.accesskey "d">
<!ENTITY dntTrackingNopref.label "Do not tell sites anything about my tracking preferences.">
<!ENTITY dntTrackingNopref.accesskey "o">
<!ENTITY dntTrackingNotOkay.label "Tell sites that I do not want to be tracked.">
<!ENTITY dntTrackingNotOkay.accesskey "n">
<!ENTITY dntTrackingOkay.label "Tell sites that I want to be tracked.">
<!ENTITY dntTrackingOkay.accesskey "t">
<!ENTITY doNotTrackInfo.label "Learn More">
<!ENTITY history.label "History">

View File

@ -545,6 +545,7 @@ pref("services.sync.prefs.sync.lightweightThemes.usedThemes", true);
pref("services.sync.prefs.sync.network.cookie.cookieBehavior", true);
pref("services.sync.prefs.sync.permissions.default.image", true);
pref("services.sync.prefs.sync.privacy.donottrackheader.enabled", true);
pref("services.sync.prefs.sync.privacy.donottrackheader.value", true);
pref("services.sync.prefs.sync.signon.rememberSignons", true);
#endif

View File

@ -712,6 +712,9 @@ pref("privacy.popups.disable_from_plugins", 2);
// "do not track" HTTP header, disabled by default
pref("privacy.donottrackheader.enabled", false);
// 0 = tracking is acceptable
// 1 = tracking is unacceptable
pref("privacy.donottrackheader.value", 1);
pref("dom.event.contextmenu.enabled", true);
pref("dom.event.clipboardevents.enabled", true);

View File

@ -86,6 +86,7 @@ static NS_DEFINE_CID(kSocketProviderServiceCID, NS_SOCKETPROVIDERSERVICE_CID);
#define NETWORK_ENABLEIDN "network.enableIDN"
#define BROWSER_PREF_PREFIX "browser.cache."
#define DONOTTRACK_HEADER_ENABLED "privacy.donottrackheader.enabled"
#define DONOTTRACK_HEADER_VALUE "privacy.donottrackheader.value"
#ifdef MOZ_TELEMETRY_ON_BY_DEFAULT
#define TELEMETRY_ENABLED "toolkit.telemetry.enabledPreRelease"
#else
@ -170,6 +171,7 @@ nsHttpHandler::nsHttpHandler()
, mSendSecureXSiteReferrer(true)
, mEnablePersistentHttpsCaching(false)
, mDoNotTrackEnabled(false)
, mDoNotTrackValue(1)
, mTelemetryEnabled(false)
, mAllowExperiments(true)
, mHandlerActive(false)
@ -249,6 +251,7 @@ nsHttpHandler::Init()
prefBranch->AddObserver(NETWORK_ENABLEIDN, this, true);
prefBranch->AddObserver(BROWSER_PREF("disk_cache_ssl"), this, true);
prefBranch->AddObserver(DONOTTRACK_HEADER_ENABLED, this, true);
prefBranch->AddObserver(DONOTTRACK_HEADER_VALUE, this, true);
prefBranch->AddObserver(TELEMETRY_ENABLED, this, true);
PrefsChanged(prefBranch, nullptr);
@ -381,7 +384,7 @@ nsHttpHandler::AddStandardRequestHeaders(nsHttpHeaderArray *request)
// Add the "Do-Not-Track" header
if (mDoNotTrackEnabled) {
rv = request->SetHeader(nsHttp::DoNotTrack,
NS_LITERAL_CSTRING("1"));
nsPrintfCString("%d", mDoNotTrackValue));
if (NS_FAILED(rv)) return rv;
}
@ -1215,6 +1218,13 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
mDoNotTrackEnabled = cVar;
}
}
if (PREF_CHANGED(DONOTTRACK_HEADER_VALUE)) {
val = 1;
rv = prefs->GetIntPref(DONOTTRACK_HEADER_VALUE, &val);
if (NS_SUCCEEDED(rv)) {
mDoNotTrackValue = val;
}
}
//
// Telemetry

View File

@ -376,9 +376,10 @@ private:
// Persistent HTTPS caching flag
bool mEnablePersistentHttpsCaching;
// For broadcasting the preference to not be tracked
// For broadcasting tracking preference
bool mDoNotTrackEnabled;
PRUint8 mDoNotTrackValue;
// Whether telemetry is reported or not
bool mTelemetryEnabled;