Add controls for third-party cookies.
authorSoren Stoutner <soren@stoutner.com>
Thu, 28 Apr 2016 03:24:57 +0000 (20:24 -0700)
committerSoren Stoutner <soren@stoutner.com>
Thu, 28 Apr 2016 03:24:57 +0000 (20:24 -0700)
Migrate the SettingsActivity to a SettingsFragment.

app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/SettingsActivity.java
app/src/main/java/com/stoutner/privacybrowser/SettingsFragment.java [new file with mode: 0644]
app/src/main/res/menu/menu_options.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml

index 13600840837ef20d245fd564cc742abda5dcf82c..2720a8ac95c48474ffa33db27b54a1793dc05f25 100644 (file)
@@ -92,8 +92,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
 
     // cookieManager is used in onCreate(), onOptionsItemSelected(), and onNavigationItemSelected().
     private CookieManager cookieManager;
-    // cookiesEnabled is used in onCreate(), onCreateOptionsMenu(), and onOptionsItemSelected().
-    private boolean cookiesEnabled;
+    // firstPartyCookiesEnabled is used in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected().
+    private boolean firstPartyCookiesEnabled;
+    // thirdPartyCookiesEnabled is uesd in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected().
+    private boolean thirdPartyCookiesEnabled;
 
     // urlTextBox is used in onCreate(), onOptionsItemSelected(), and loadUrlFromTextBox().
     private EditText urlTextBox;
@@ -316,21 +318,23 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         javaScriptEnabled = savedPreferences.getBoolean("javascript_enabled", false);
         mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled);
 
+        // Initialize cookieManager.
+        cookieManager = CookieManager.getInstance();
+
+        // Set cookies initial status.
+        firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies_enabled", false);
+        cookieManager.setAcceptCookie(firstPartyCookiesEnabled);
+
+        // Set third-party cookies initial status if API >= 21.
+        if (Build.VERSION.SDK_INT >= 21) {
+            thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies_enabled", false);
+            cookieManager.setAcceptThirdPartyCookies(mainWebView, thirdPartyCookiesEnabled);
+        }
+
         // Set DOM storage initial status.
         domStorageEnabled = savedPreferences.getBoolean("dom_storage_enabled", false);
         mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled);
 
-        /* Save Form Data does nothing until database storage is implemented.
-        // Set Save Form Data initial status.
-        saveFormDataEnabled = true;
-        mainWebView.getSettings().setSaveFormData(saveFormDataEnabled);
-        */
-
-        // Set cookies initial status.
-        cookiesEnabled = savedPreferences.getBoolean("cookies_enabled", false);
-        cookieManager = CookieManager.getInstance();
-        cookieManager.setAcceptCookie(cookiesEnabled);
-
         // Set homepage initial status.
         homepage = savedPreferences.getString("homepage", "https://www.duckduckgo.com");
 
@@ -388,17 +392,18 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
 
         // Get MenuItems for checkable menu items.
         MenuItem toggleJavaScript = menu.findItem(R.id.toggleJavaScript);
+        MenuItem toggleFirstPartyCookies = menu.findItem(R.id.toggleFirstPartyCookies);
+        MenuItem toggleThirdPartyCookies = menu.findItem(R.id.toggleThirdPartyCookies);
         MenuItem toggleDomStorage = menu.findItem(R.id.toggleDomStorage);
         /* toggleSaveFormData does nothing until database storage is implemented.
         MenuItem toggleSaveFormData = menu.findItem(R.id.toggleSaveFormData);
         */
-        MenuItem toggleCookies = menu.findItem(R.id.toggleCookies);
 
         // Set the initial icon for toggleJavaScript
         if (javaScriptEnabled) {
             toggleJavaScript.setIcon(R.drawable.javascript_enabled);
         } else {
-            if (domStorageEnabled || cookiesEnabled) {
+            if (domStorageEnabled || firstPartyCookiesEnabled) {
                 toggleJavaScript.setIcon(R.drawable.warning);
             } else {
                 toggleJavaScript.setIcon(R.drawable.privacy_mode);
@@ -406,17 +411,26 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         }
 
         // Set the initial status of the menu item checkboxes.
+        toggleFirstPartyCookies.setChecked(firstPartyCookiesEnabled);
+        toggleThirdPartyCookies.setChecked(thirdPartyCookiesEnabled);
         toggleDomStorage.setChecked(domStorageEnabled);
         /* toggleSaveFormData does nothing until database storage is implemented.
         toggleSaveFormData.setChecked(saveFormDataEnabled);
         */
-        toggleCookies.setChecked(cookiesEnabled);
 
         return true;
     }
 
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
+        // Only enable Third-Party Cookies if SDK >= 21 and First-Party Cookies are enabled.
+        MenuItem toggleThirdPartyCookies = menu.findItem(R.id.toggleThirdPartyCookies);
+        if ((Build.VERSION.SDK_INT >= 21) && firstPartyCookiesEnabled) {
+            toggleThirdPartyCookies.setEnabled(true);
+        } else {
+            toggleThirdPartyCookies.setEnabled(false);
+        }
+
         // Enable Clear Cookies if there are any.
         MenuItem clearCookies = menu.findItem(R.id.clearCookies);
         clearCookies.setEnabled(cookieManager.hasCookies());
@@ -448,17 +462,9 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
                     mainWebView.reload();
 
                     // Update the toggleJavaScript icon and display a snackbar.
-                    if (domStorageEnabled || cookiesEnabled) {
+                    if (domStorageEnabled || firstPartyCookiesEnabled) {
                         menuItem.setIcon(R.drawable.warning);
-                        if (domStorageEnabled && cookiesEnabled) {
-                            Snackbar.make(findViewById(R.id.mainWebView), R.string.both_still_enabled, Snackbar.LENGTH_SHORT).show();
-                        } else {
-                            if (domStorageEnabled) {
-                                Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_still_enabled, Snackbar.LENGTH_SHORT).show();
-                            } else {
-                                Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show();
-                            }
-                        }
+                        Snackbar.make(findViewById(R.id.mainWebView), R.string.javascript_disabled, Snackbar.LENGTH_SHORT).show();
                     } else {
                         menuItem.setIcon(R.drawable.privacy_mode);
                         Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
@@ -472,75 +478,83 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
                 }
                 return true;
 
-            case R.id.toggleDomStorage:
-                if (domStorageEnabled) {
-                    domStorageEnabled = false;
+            case R.id.toggleFirstPartyCookies:
+                if (firstPartyCookiesEnabled) {
+                    firstPartyCookiesEnabled = false;
                     menuItem.setChecked(false);
-                    mainWebView.getSettings().setDomStorageEnabled(false);
+                    cookieManager.setAcceptCookie(false);
                     mainWebView.reload();
 
-                    // Update the toggleJavaScript icon and display a snackbar if appropriate.
-                    if (!javaScriptEnabled && !cookiesEnabled) {
-                        toggleJavaScript.setIcon(R.drawable.privacy_mode);
-                        Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
-                    } else {
-                        if (cookiesEnabled) {
+                    // Update the toggleJavaScript icon if appropriate and display a snackbar.
+                    if (!javaScriptEnabled) {
+                        if (domStorageEnabled) {
                             toggleJavaScript.setIcon(R.drawable.warning);
-                            Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show();
-                        } // Else Do nothing because JavaScript is enabled.
+                            Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
+                        } else {
+                            toggleJavaScript.setIcon(R.drawable.privacy_mode);
+                            Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
+                        }
+                    } else {
+                        Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
                     }
                 } else {
-                    domStorageEnabled = true;
+                    firstPartyCookiesEnabled = true;
                     menuItem.setChecked(true);
-                    mainWebView.getSettings().setDomStorageEnabled(true);
+                    cookieManager.setAcceptCookie(true);
                     mainWebView.reload();
 
                     // Update the toggleJavaScript icon if appropriate.
                     if (!javaScriptEnabled) {
                         toggleJavaScript.setIcon(R.drawable.warning);
-                    } // Else Do nothing because JavaScript is enabled.
+                    } // Else do nothing because JavaScript is enabled.
 
-                    Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
+                    Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
                 }
                 return true;
 
-            /* toggleSaveFormData does nothing until database storage is implemented.
-            case R.id.toggleSaveFormData:
-                if (saveFormDataEnabled) {
-                    saveFormDataEnabled = false;
-                    menuItem.setChecked(false);
-                    mainWebView.getSettings().setSaveFormData(false);
-                    mainWebView.reload();
-                } else {
-                    saveFormDataEnabled = true;
-                    menuItem.setChecked(true);
-                    mainWebView.getSettings().setSaveFormData(true);
-                    mainWebView.reload();
-                }
+            case R.id.toggleThirdPartyCookies:
+                if (Build.VERSION.SDK_INT >= 21) {
+                    if (thirdPartyCookiesEnabled) {
+                        thirdPartyCookiesEnabled = false;
+                        menuItem.setChecked(false);
+                        cookieManager.setAcceptThirdPartyCookies(mainWebView, false);
+                        mainWebView.reload();
+
+                        Snackbar.make(findViewById(R.id.mainWebView), R.string.third_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
+                    } else {
+                        thirdPartyCookiesEnabled = true;
+                        menuItem.setChecked(true);
+                        cookieManager.setAcceptThirdPartyCookies(mainWebView, true);
+                        mainWebView.reload();
+
+                        Snackbar.make(findViewById(R.id.mainWebView), R.string.third_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
+                    }
+                } // Else do nothing because SDK < 21.
                 return true;
-            */
 
-            case R.id.toggleCookies:
-                if (cookiesEnabled) {
-                    cookiesEnabled = false;
+            case R.id.toggleDomStorage:
+                if (domStorageEnabled) {
+                    domStorageEnabled = false;
                     menuItem.setChecked(false);
-                    cookieManager.setAcceptCookie(false);
+                    mainWebView.getSettings().setDomStorageEnabled(false);
                     mainWebView.reload();
 
-                    // Update the toggleJavaScript icon and display a snackbar if appropriate.
-                    if (!javaScriptEnabled && !domStorageEnabled) {
-                        toggleJavaScript.setIcon(R.drawable.privacy_mode);
-                        Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
-                    } else {
-                        if (domStorageEnabled) {
+                    // Update the toggleJavaScript icon if appropriate and display a snackbar.
+                    if (!javaScriptEnabled) {
+                        if (firstPartyCookiesEnabled) {
                             toggleJavaScript.setIcon(R.drawable.warning);
-                            Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
-                        } // Else Do nothing because JavaScript is enabled.
+                            Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_disabled, Snackbar.LENGTH_SHORT).show();
+                        } else {
+                            toggleJavaScript.setIcon(R.drawable.privacy_mode);
+                            Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
+                        }
+                    }else {
+                        Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_disabled, Snackbar.LENGTH_SHORT).show();
                     }
                 } else {
-                    cookiesEnabled = true;
+                    domStorageEnabled = true;
                     menuItem.setChecked(true);
-                    cookieManager.setAcceptCookie(true);
+                    mainWebView.getSettings().setDomStorageEnabled(true);
                     mainWebView.reload();
 
                     // Update the toggleJavaScript icon if appropriate.
@@ -548,16 +562,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
                         toggleJavaScript.setIcon(R.drawable.warning);
                     } // Else Do nothing because JavaScript is enabled.
 
-                    Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_enabled, Snackbar.LENGTH_SHORT).show();
+                    Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
                 }
                 return true;
 
-            case R.id.clearDomStorage:
-                WebStorage webStorage = WebStorage.getInstance();
-                webStorage.deleteAllData();
-                Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_deleted, Snackbar.LENGTH_SHORT).show();
-                return true;
-
             case R.id.clearCookies:
                 if (Build.VERSION.SDK_INT < 21) {
                     cookieManager.removeAllCookie();
@@ -567,6 +575,12 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
                 Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_deleted, Snackbar.LENGTH_SHORT).show();
                 return true;
 
+            case R.id.clearDomStorage:
+                WebStorage webStorage = WebStorage.getInstance();
+                webStorage.deleteAllData();
+                Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_deleted, Snackbar.LENGTH_SHORT).show();
+                return true;
+
             case R.id.share:
                 Intent shareIntent = new Intent();
                 shareIntent.setAction(Intent.ACTION_SEND);
@@ -622,7 +636,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
                 break;
 
             case R.id.settings:
-                // Launch SettingsActivity.
+                // Launch PreferenceFragment.
                 Intent intent = new Intent(this, SettingsActivity.class);
                 startActivity(intent);
                 break;
index f0f78fffe4c015557a7319e16603a4a427f582f6..4c0a603b39a85ce561c0e11ec1aa9d75564a584b 100644 (file)
 package com.stoutner.privacybrowser;
 
 import android.os.Bundle;
-import android.preference.PreferenceActivity;
+import android.support.v7.app.AppCompatActivity;
 
-// Once the minimum API is >= 11 we can switch from the deprecated PreferenceActivity to using a PreferenceFragment.
-public class SettingsActivity extends PreferenceActivity {
+public class SettingsActivity extends AppCompatActivity {
     @Override
-    // Until minimum API is >= 11 we needs to use the deprecated addPreferenceFromResource from PreferenceActivity.
-    @SuppressWarnings("deprecation")
-    public void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        addPreferencesFromResource(R.xml.preferences);
+
+        // Display SettingsFragment
+        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
     }
 }
diff --git a/app/src/main/java/com/stoutner/privacybrowser/SettingsFragment.java b/app/src/main/java/com/stoutner/privacybrowser/SettingsFragment.java
new file mode 100644 (file)
index 0000000..1968c65
--- /dev/null
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2016 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ *
+ * Privacy Browser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Privacy Browser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacybrowser;
+
+import android.os.Bundle;
+import android.preference.PreferenceFragment;
+
+public class SettingsFragment extends PreferenceFragment {
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.preferences);
+    }
+}
index e6bdeadd31c26fbbce005aba869b9601f8392337..038b364ff0a7e75d26a4cc6899574b979794944f 100644 (file)
         app:showAsAction="always" />
 
     <item
-        android:id="@+id/toggleDomStorage"
-        android:title="@string/dom_storage"
+        android:id="@+id/toggleFirstPartyCookies"
+        android:title="@string/first_party_cookies"
         android:orderInCategory="20"
         android:checkable="true"
         app:showAsAction="never" />
 
-    <!-- toggleSaveFormData does nothing until database storage is implemented
     <item
-        android:id="@+id/toggleSaveFormData"
-        android:title="@string/saveFormData"
+        android:id="@+id/toggleThirdPartyCookies"
+        android:title="@string/third_party_cookies"
         android:orderInCategory="30"
         android:checkable="true"
         app:showAsAction="never" />
-        -->
 
     <item
-        android:id="@+id/toggleCookies"
-        android:title="@string/cookies"
+        android:id="@+id/toggleDomStorage"
+        android:title="@string/dom_storage"
         android:orderInCategory="40"
         android:checkable="true"
         app:showAsAction="never" />
 
     <item
-        android:id="@+id/clearDomStorage"
-        android:title="@string/clear_dom_storage"
+        android:id="@+id/clearCookies"
+        android:title="@string/clear_cookies"
         android:orderInCategory="50"
         app:showAsAction="never" />
 
     <item
-        android:id="@+id/clearCookies"
-        android:title="@string/clear_cookies"
+        android:id="@+id/clearDomStorage"
+        android:title="@string/clear_dom_storage"
         android:orderInCategory="60"
         app:showAsAction="never" />
 
index f8a25db2c6afff8ce77ad0b8bfd15b06f117a805..73c4a46508d318a8a0dd0127b8a9693a9dcf080e 100644 (file)
     <string name="download_started">Download started</string>
     <string name="privacy_mode">Privacy Mode</string>
     <string name="javascript_enabled">JavaScript enabled</string>
+    <string name="javascript_disabled">JavaScript disabled</string>
     <string name="dom_storage_enabled">DOM Storage enabled</string>
-    <string name="cookies_enabled">Cookies enabled</string>
-    <string name="dom_storage_still_enabled">JavaScript disabled, DOM Storage still enabled</string>
-    <string name="cookies_still_enabled">Cookies still enabled</string>
-    <string name="both_still_enabled">JavaScript disabled, DOM Storage and Cookies still enabled</string>
-    <string name="dom_storage_deleted">DOM Storage deleted</string>
+    <string name="dom_storage_disabled">DOM Storage disabled</string>
+    <string name="first_party_cookies_enabled">First-Party Cookies enabled</string>
+    <string name="first_party_cookies_disabled">First-Party Cookies disabled</string>
+    <string name="third_party_cookies_enabled">Third-Party Cookies enabled</string>
+    <string name="third_party_cookies_disabled">Third-Party Cookies disabled</string>
     <string name="cookies_deleted">Cookies deleted</string>
+    <string name="dom_storage_deleted">DOM Storage deleted</string>
     <string name="open_navigation">Open Navigation Drawer</string>
     <string name="close_navigation">Close Navigation Drawer</string>
 
     <string name="about">About</string>
     <string name="clear_and_exit">Clear and Exit</string>
 
-    <!-- Menu. -->
+    <!-- Options Menu. -->
     <string name="javascript">JavaScript</string>
+    <string name="first_party_cookies">First-Party Cookies</string>
+    <string name="third_party_cookies">Third-Party Cookies</string>
     <string name="dom_storage">DOM Storage</string>
-    <string name="cookies">Cookies</string>
-    <string name="clear_dom_storage">Clear DOM Storage</string>
     <string name="clear_cookies">Clear Cookies</string>
+    <string name="clear_dom_storage">Clear DOM Storage</string>
     <string name="share">Share</string>
     <string name="add_to_home_screen">Add to Home Screen</string>
 
 
     <!-- Preferences. -->
     <string name="privacy_settings">Privacy Settings</string>
-    <string name="javascript_preference">JavaScript</string>
-    <string name="javascript_preference_summary">Enable JavaScript by default</string>
-    <string name="dom_storage_preference">DOM Storage</string>
-    <string name="dom_storage_preference_summary">Enable DOM storage by default</string>
-    <string name="cookies_preference">Cookies</string>
-    <string name="cookies_preference_summary">Enable cookies by default</string>
+    <string name="javascript_preference">Enable JavaScript by default</string>
+    <string name="javascript_preference_summary">JavaScript allows websites to run programs (scripts) on your device.</string>
+    <string name="first_party_cookies_preference">Enable First-Party Cookies by default</string>
+    <string name="first_party_cookies_preference_summary">Cookies allow websites to store information on your device.
+        First-party cookies come from the server listed in the address bar.
+        Devices with versions of Android older than Lollipop (version 5.0) will also enable third-party cookies with this setting.</string>
+    <string name="third_party_cookies_preference">Enable Third-Party Cookies by default</string>
+    <string name="third_party_cookies_summary">Third-party cookies allow parts of websites that aren\'t the main website, like advertisements, to store information on your device.
+        This setting requires Android Lollipop (version 5.0) or higher.  It has no effect if first-party cookies are disabled.</string>
+    <string name="dom_storage_preference">Enable DOM Storage by default</string>
+    <string name="dom_storage_preference_summary">Document Object Management storage, also called web storage, is an enhanced form of cookies
+        that allows websites to store larger and more complex types of information, like pictures, on your device.</string>
     <string name="general_settings">General Settings</string>
     <string name="homepage_preference">Homepage</string>
-    <string name="homepage_preference_summary">Set the homepage</string>
+    <string name="homepage_preference_summary">Set the homepage.</string>
 
     <!-- About Dialog. -->
     <string name="about_privacy_browser">About Privacy Browser</string>
index e2ccb7dce3ac062c3a681290fb489df29246baf4..06dbbd62a2a86edf58f11e7440ac163dbc828819 100644 (file)
             android:defaultValue="false" />
 
         <SwitchPreference
-            android:key="dom_storage_enabled"
-            android:title="@string/dom_storage_preference"
-            android:summary="@string/dom_storage_preference_summary"
+            android:key="first_party_cookies_enabled"
+            android:title="@string/first_party_cookies_preference"
+            android:summary="@string/first_party_cookies_preference_summary"
             android:defaultValue="false" />
 
         <SwitchPreference
-            android:key="cookies_enabled"
-            android:title="@string/cookies_preference"
-            android:summary="@string/cookies_preference_summary"
+            android:key="third_party_cookies_enabled"
+            android:title="@string/third_party_cookies_preference"
+            android:summary="@string/third_party_cookies_summary"
+            android:defaultValue="false" />
+
+        <SwitchPreference
+            android:key="dom_storage_enabled"
+            android:title="@string/dom_storage_preference"
+            android:summary="@string/dom_storage_preference_summary"
             android:defaultValue="false" />
     </PreferenceCategory>