Bug 863242 - Add a preference setting "accept tracking me" to Fennec. r=mleibovic
authorTetsuharu OHZEKI <saneyuki.s.snyk@gmail.com>
Fri, 26 Apr 2013 10:10:59 -0400 (2013-04-26)
changeset 130065 5c1d0b408e2cf1ba4cef7cf166dd134b4651d331
parent 130064 54c62289325a402ab82c3d07715ac5cda6f82c79
child 130066 bf1a44d938bf9644b1868b2a5da44cedc2e5d305
push id24596
push userryanvm@gmail.com
push dateSat, 27 Apr 2013 01:20:57 +0000 (2013-04-27)
treeherdermozilla-central@0e45f1b9521f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmleibovic
bugs863242
milestone23.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 863242 - Add a preference setting "accept tracking me" to Fennec. r=mleibovic
mobile/android/base/locales/en-US/android_strings.dtd
mobile/android/base/resources/values/arrays.xml
mobile/android/base/resources/xml/preferences_privacy.xml
mobile/android/base/strings.xml.in
mobile/android/chrome/content/browser.js
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -64,30 +64,34 @@
 <!ENTITY new_tab_opened "New tab opened">
 
 <!ENTITY settings "Settings">
 <!ENTITY settings_title "Settings">
 <!ENTITY pref_category_general "General">
 <!ENTITY pref_category_privacy "Privacy &amp; Security">
 <!ENTITY pref_category_content "Content">
 <!ENTITY pref_about_firefox "About &brandShortName;">
-<!ENTITY pref_do_not_track "Tell sites not to track me">
 <!ENTITY pref_telemetry "Send performance data">
 <!ENTITY pref_remember_signons "Remember passwords">
 
 <!-- Localization note: These are shown in the left sidebar on tablets -->
 <!ENTITY pref_header_general "General">
 <!ENTITY pref_header_privacy "Privacy &amp; Security">
 <!ENTITY pref_header_content "Content">
 
 <!ENTITY pref_cookies_menu "Cookies">
 <!ENTITY pref_cookies_accept_all "Enabled">
 <!ENTITY pref_cookies_not_accept_foreign "Enabled, excluding 3rd party">
 <!ENTITY pref_cookies_disabled "Disabled">
 
+<!ENTITY pref_donottrack_menu "Tracking">
+<!ENTITY pref_donottrack_disallow_tracking "Tell sites that I do not want to be tracked">
+<!ENTITY pref_donottrack_allow_tracking "Tell sites that I want to be tracked">
+<!ENTITY pref_donottrack_no_pref "Do not tell sites anything about my tracking preferences">
+
 <!ENTITY pref_char_encoding "Character encoding">
 <!ENTITY pref_char_encoding_on "Show menu">
 <!ENTITY pref_char_encoding_off "Don\'t show menu">
 <!ENTITY pref_clear_private_data "Clear private data">
 <!ENTITY pref_plugins "Plugins">
 <!ENTITY pref_plugins_enabled "Enabled">
 <!ENTITY pref_plugins_tap_to_play "Tap to play">
 <!ENTITY pref_plugins_disabled "Disabled">
--- a/mobile/android/base/resources/values/arrays.xml
+++ b/mobile/android/base/resources/values/arrays.xml
@@ -41,16 +41,26 @@
         <item>@string/pref_cookies_accept_all</item>
         <item>@string/pref_cookies_not_accept_foreign</item>
         <item>@string/pref_cookies_disabled</item>
     </string-array>
     <string-array name="pref_cookies_values">
         <item>0</item>
         <item>1</item>
         <item>2</item>
+      </string-array>
+    <string-array name="pref_donottrack_entries">
+      <item>@string/pref_donottrack_disallow_tracking</item>
+      <item>@string/pref_donottrack_allow_tracking</item>
+      <item>@string/pref_donottrack_no_pref</item>
+    </string-array>
+    <string-array name="pref_donottrack_values">
+      <item>1</item>
+      <item>2</item>
+      <item>0</item>
     </string-array>
     <string-array name="pref_import_android_entries">
         <item>@string/awesomebar_bookmarks_title</item>
         <item>@string/awesomebar_history_title</item>
     </string-array>
     <string-array name="pref_import_android_values">
         <item>true</item>
         <item>true</item>
--- a/mobile/android/base/resources/xml/preferences_privacy.xml
+++ b/mobile/android/base/resources/xml/preferences_privacy.xml
@@ -20,20 +20,21 @@
                             android:key="android.not_a_preference.privacy.clear"
                             android:title="@string/pref_clear_private_data"
                             android:persistent="true"
                             android:positiveButtonText="@string/button_clear_data"
                             gecko:entries="@array/pref_private_data_entries"
                             gecko:entryKeys="@array/pref_private_data_keys"
                             gecko:initialValues="@array/pref_private_data_values" />
 
-        <CheckBoxPreference android:key="privacy.donottrackheader.enabled"
-                            android:title="@string/pref_do_not_track"
-                            android:defaultValue="false"
-                            android:persistent="false" />
+        <ListPreference android:key="privacy.donottrackheader"
+                        android:title="@string/pref_donottrack_menu"
+                        android:entries="@array/pref_donottrack_entries"
+                        android:entryValues="@array/pref_donottrack_values"
+                        android:persistent="false" />
 
         <CheckBoxPreference android:key="signon.rememberSignons"
                             android:title="@string/pref_remember_signons"
                             android:defaultValue="true"
                             android:persistent="false" />
 
         <CheckBoxPreference android:key="privacy.masterpassword.enabled"
                             android:title="@string/pref_use_master_password"
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -79,25 +79,29 @@
   <string name="settings_title">&settings_title;</string>
   <string name="pref_category_general">&pref_category_general;</string>
   <string name="pref_category_privacy">&pref_category_privacy;</string>
   <string name="pref_category_content">&pref_category_content;</string>
   <string name="pref_header_general">&pref_header_general;</string>
   <string name="pref_header_privacy">&pref_header_privacy;</string>
   <string name="pref_header_content">&pref_header_content;</string>
   <string name="pref_about_firefox">&pref_about_firefox;</string>
-  <string name="pref_do_not_track">&pref_do_not_track;</string>
   <string name="pref_telemetry">&pref_telemetry;</string>
   <string name="pref_remember_signons">&pref_remember_signons;</string>
 
   <string name="pref_cookies_menu">&pref_cookies_menu;</string>
   <string name="pref_cookies_accept_all">&pref_cookies_accept_all;</string>
   <string name="pref_cookies_not_accept_foreign">&pref_cookies_not_accept_foreign;</string>
   <string name="pref_cookies_disabled">&pref_cookies_disabled;</string>
 
+  <string name="pref_donottrack_menu">&pref_donottrack_menu;</string>
+  <string name="pref_donottrack_disallow_tracking">&pref_donottrack_disallow_tracking;</string>
+  <string name="pref_donottrack_allow_tracking">&pref_donottrack_allow_tracking;</string>
+  <string name="pref_donottrack_no_pref">&pref_donottrack_no_pref;</string>
+
   <string name="pref_char_encoding">&pref_char_encoding;</string>
   <string name="pref_char_encoding_on">&pref_char_encoding_on;</string>
   <string name="pref_char_encoding_off">&pref_char_encoding_off;</string>
   <string name="pref_clear_private_data">&pref_clear_private_data;</string>
   <string name="pref_plugins">&pref_plugins;</string>
   <string name="pref_plugins_enabled">&pref_plugins_enabled;</string>
   <string name="pref_plugins_tap_to_play">&pref_plugins_tap_to_play;</string>
   <string name="pref_plugins_disabled">&pref_plugins_disabled;</string>
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -133,16 +133,22 @@ const kStateActive = 0x00000001; // :act
 
 const kXLinkNamespace = "http://www.w3.org/1999/xlink";
 
 const kDefaultCSSViewportWidth = 980;
 const kDefaultCSSViewportHeight = 480;
 
 const kViewportRemeasureThrottle = 500;
 
+const kDoNotTrackPrefState = Object.freeze({
+  NO_PREF: "0",
+  DISALLOW_TRACKING: "1",
+  ALLOW_TRACKING: "2",
+});
+
 function dump(a) {
   Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService).logStringMessage(a);
 }
 
 function getBridge() {
   return Cc["@mozilla.org/android/bridge;1"].getService(Ci.nsIAndroidBridge);
 }
 
@@ -967,16 +973,38 @@ var BrowserApp = {
             prefs.push(pref);
             continue;
           // Master password is not a "real" pref
           case "privacy.masterpassword.enabled":
             pref.type = "bool";
             pref.value = MasterPassword.enabled;
             prefs.push(pref);
             continue;
+          /*
+           * Handle Do-not-track preference
+           *
+           * "privacy.donottrackheader" is not "real" pref name.
+           * This pref name is used in the setting menu, and
+           * this is passed when initializing the setting menu.
+           */
+          case "privacy.donottrackheader": {
+            pref.type = "string";
+
+            let enableDNT = Services.prefs.getBoolPref("privacy.donottrackheader.enabled");
+            if (!enableDNT) {
+              pref.value = kDoNotTrackPrefState.NO_PREF;
+            } else {
+              let dntState = Services.prefs.getIntPref("privacy.donottrackheader.value");
+              pref.value = (dntState === 0) ? kDoNotTrackPrefState.ALLOW_TRACKING :
+                                              kDoNotTrackPrefState.DISALLOW_TRACKING;
+            }
+
+            prefs.push(pref);
+            continue;
+          }
         }
 
         try {
           switch (Services.prefs.getPrefType(prefName)) {
             case Ci.nsIPrefBranch.PREF_BOOL:
               pref.type = "bool";
               pref.value = Services.prefs.getBoolPref(prefName);
               break;
@@ -1061,16 +1089,36 @@ var BrowserApp = {
     } else if (json.name == "privacy.masterpassword.enabled") {
       // MasterPassword pref is not real, we just need take action and leave
       // MasterPassword pref is not real, we just need take action and leave
       if (MasterPassword.enabled)
         MasterPassword.removePassword(json.value);
       else
         MasterPassword.setPassword(json.value);
       return;
+    } else if (json.name === "privacy.donottrackheader") {
+      // "privacy.donottrackheader" is not "real" pref name, it's used in the setting menu.
+      switch (json.value) {
+        case kDoNotTrackPrefState.NO_PREF:
+          // Don't tell anything about tracking me
+          Services.prefs.setBoolPref("privacy.donottrackheader.enabled", false);
+          Services.prefs.clearUserPref("privacy.donottrackheader.value");
+          break;
+        case kDoNotTrackPrefState.ALLOW_TRACKING:
+          // Accept tracking me
+          Services.prefs.setBoolPref("privacy.donottrackheader.enabled", true);
+          Services.prefs.setIntPref("privacy.donottrackheader.value", 0);
+          break;
+        case kDoNotTrackPrefState.DISALLOW_TRACKING:
+          // Not accept tracking me
+          Services.prefs.setBoolPref("privacy.donottrackheader.enabled", true);
+          Services.prefs.setIntPref("privacy.donottrackheader.value", 1);
+          break;
+      }
+      return;
     } else if (json.name == SearchEngines.PREF_SUGGEST_ENABLED) {
       // Enabling or disabling suggestions will prevent future prompts
       Services.prefs.setBoolPref(SearchEngines.PREF_SUGGEST_PROMPTED, true);
     }
 
     // when sending to java, we normalized special preferences that use
     // integers and strings to represent booleans.  here, we convert them back
     // to their actual types so we can store them.