Remove third-party cookies. https://redmine.stoutner.com/issues/601
authorSoren Stoutner <soren@stoutner.com>
Tue, 20 Apr 2021 04:47:41 +0000 (21:47 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 20 Apr 2021 04:47:41 +0000 (21:47 -0700)
27 files changed:
.idea/dictionaries/soren.xml
app/src/main/assets/de/guide_local_storage.html
app/src/main/assets/en/guide_local_storage.html
app/src/main/assets/es/guide_local_storage.html
app/src/main/assets/fr/guide_local_storage.html
app/src/main/assets/it/guide_local_storage.html
app/src/main/assets/pt-rBR/guide_local_storage.html
app/src/main/assets/ru/guide_local_storage.html
app/src/main/assets/tr/guide_local_storage.html
app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java
app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java
app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java
app/src/main/res/layout/domain_settings_fragment.xml
app/src/main/res/menu/webview_options_menu.xml
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-pt-rBR/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values-tr/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml

index 42467e85dca0fc8c0badb202207b118b9bf9d6c8..c4e8f141f873489aa6e0bbee66ba9ab9a916bbe0 100644 (file)
@@ -61,6 +61,7 @@
       <w>easyprivacy</w>
       <w>edittext</w>
       <w>enabledomstorage</w>
+      <w>enabledthirdpartycookies</w>
       <w>enablefirstpartycookies</w>
       <w>enableformdata</w>
       <w>enablejavascript</w>
index 04d3b5a66f7be14ff04ca38bc19bea511b5ecd54..15bba0a2c00b1d1825eb75f2972494b763948e68 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright © 2016-2018,2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2016-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019,2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   Translation 2016 Aaron Gerlach <aaron@gerlach.com>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
             Jedes Mal wenn der Benutzer dann mit seinem Gerät diese Website aufruft, können dessen Bewegungen mit dem Profil dieser Seriennummer verknüpft werden,
             auch wenn dem Gerät inzwischen eine andere IP-Adresse zugewiesen wurde. So entstehen umfangreiche Profile über die Vorlieben von Website-Besuchern.</p>
 
-        <p>Nahezu alle Webseiten, bei denen eine Anmeldung notwendig ist, nutzen Erstanbieter-Cookies für den Anmeldevorgang.
-            Damit wird sichergestellt, dass nur der angemeldete Benutzer Zugang zu den entsprechenden Informationen hat. Dies ist meiner Meinung nach eine der wenigen legitimen Verwendungen von Cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Wenn Erstanbieter-Cookies aktiviert sind, aber Javascript deaktiviert, ist das Privatsphäre-Icon als Warnung gelb <img class="inline" src="../shared_images/warning.svg"/>.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Drittanbieter-Cookies</h3>
 
-        <p>Drittanbieter-Cookies werden von Teilen einer Website gesetzt, die von einem anderen Server als dem aktuell besuchten geladen werden.
-            Beispielsweise laden viele Websites Werbungen von einem Drittanbieter-Broker wie Googles <a href="https://www.google.com/adsense/start/">Ad Sense</a>.
-            Jedes Mal wenn die Website lädt, fragt diese bei dem Werbe-Broker an, dass er Werbung zeigen soll.
-            Der Werbe-Broker analysiert jegliche information, die er über den Nutzer hat, vergleicht diese mit dem aktuell gezahlten Satz der werbenden Firmen,
-            die die Werbung platziert haben wollen und wählt die anzuzeigenden Werbungen aus.
-            Der Bereich der Website, auf dem die Werbung angezeigt wird, wird vom Drittanbieter-Broker statt von der eigentlich besuchten Website geladen.</p>
-
-        <p>Weil die meisten Werbungen im Internet von ein paar wenigen Brokern betrieben werden, hat es nicht lange gedauert, bis diese gemerkt haben,
-            dass sie einfach ein Tracking-Cookie auf dem Gerät des Benutzers hinterlassen können, um immer Bescheid zu wissen, wo sich dieser - auch über Seiten- und Domain-Grenzen hinweg - im Internet bewegt.
-            Jedes Mal, wenn eine Werbung von einem Broker geladen wird, ist es dessen erste Aufgabe, das Gerät auf eine einmalige Seriennummer in einem cookie zu überprüfen.
-            Wenn es diesen hat, sucht er das Profil für diese Seriennummer heraus und merkt sich die neu besuchte Seite.
-            Deshalb kann der Nutzer auf einer Seite nach einem Produkt suchen, nach dem er normalerweise nicht sucht, wie z. B. Walnüsse,
-            und plötzlich auf jeder anderen besuchten Website Werbungen für Walnüsse angezeigt bekommen.</p>
-
-        <p>Zusätzlich zu Werbe-Brokern machen Social-Media-Plattformen das Gleiche.
-            Vor ein paar Jahren haben die großen Plattformen wie Facebook und Twitter eine große Auswahl von Websites ausgemacht, auf denen es in ihrem größten Interesse wäre, Social Media-Icons zu platzieren.
-            Das sind nicht nur Bilder, sondern auch <a href="https://developers.facebook.com/docs/plugins/like-button/">eingebettete Codes</a>,
-            welche zurück auf die Social-Media-Plattform verlinken und - neben anderen Dingen - ein Drittanbieter-Cookie auf dem Gerät hinterlassen.
-            Diese Cookies werden selbst dann gesetzt, wenn der Benutzer keinen Account bei der Social-Media-Plattform hat.
-            Mit der Zeit bauten Firmen wie Facebook (welche ebenfalls einen Werbe-Broker betreiben) eine große Anzahl von detaillierten Profilen über Personen an, die
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">niemals einen Account auf ihrer Seite erstellt haben</a>.</p>
-
-        <p>Es gibt daher kaum einen Grund, solche Drittanbieter-Cookies zuzulassen. Auf Geräten mit Android KitKat oder älter (version <= 4.4.4 or API <= 20) kann
-            Webkit leider nicht zwischen Erstanbieter- und Drittanbieter-Cookies unterscheiden.
-            Daher werden auf diesen Geräten <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">
-                auch Drittanbieter-Cookies erlaubt, wenn Erstanbieter-Cookies zugelassen werden.</a></p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM-Speicher</h3>
 
-        <p>DOM-Speicher (Document Object Model-Speicher) - auch bekannt als "Web Storage" - ist ein andere Art, mit der Websites Informationen speichern können.
-            Während der gesamte Speicherplatz für Cookies einer Webseite auf maximal 4 Kilobytes begrenzt ist, können im DOM-Speicher
-            <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">Megabytes pro Seite</a> gespeichert werden - diese Art der Speicherung ist daher gewissermassen Cookies auf Steroiden.
-            Da der DOM-Speicher jedoch Javascript benötigt um Daten zu schreiben oder zu lesen, kann er nicht aktiviert werden, solange nicht auch JavaScript aktiviert ist.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Formulardaten</h3>
 
-        <p>Formulardaten umfassen Informationen, die in Web-Formulare eingetippt werden, wie etwa Namen, Adressen, Telefonnummern, usw.
-            Diese werden in Drop-Down-Listen angezeigt, wenn die betreffenden Seiten später wieder aufgerufen werden.
-            Anders als die oben genannten Formen lokal gespeicherter Informationen werden Formulardaten dabei nicht ohne bewusste Interaktion des Benutzers
-            (z.B. Abschicken eines Formulars) an einen Webserver geschickt.
-            Ab Android Oreo (8.0) verwendet WebView den <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill-Service</a>.
-            Daher werden die entsprechenden Wahlmöglichkeiten für Formulardaten bei neueren Android-Geräten nicht mehr angezeigt.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index dcc22ebacc6dd52fafeca77a15d07ee973a2c50d..d1e171768b4f540027aa64352f6f0edb92a4405d 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright © 2016-2018,2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2016-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             Then, every time a user visits the website on that device, it can be linked to a unique profile the server maintains for that serial number,
             even if the device connects from different IP addresses.</p>
 
-        <p>Almost all websites with logins require first-party cookies to be enabled for a user to log in.
-            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, one of the few legitimate uses for cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>If first-party cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Third-Party Cookies</h3>
 
         <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
-            For example, most website that have advertisements load them from a third-party ad broker, like Google’s <a href="https://www.google.com/adsense/start/">Ad Sense</a>.
-            Every time the website loads, it requests the ad broker to display an ad.
-            The ad broker analyzes any information they may have about the user, looks at the current rate advertisers are willing to pay for their ads, and selects the one to display.
-            The section of the website that displays the ads is loaded from the third-party broker’s server instead of the main server.</p>
-
-        <p>Because most of the advertisements on the internet are processed by only a few brokers,
-            it didn’t take long for them to realize that they could set a tracking cookie on the user’s device and know every place that user goes.
-            Every time an ad loads from a broker, the first thing it does it check to see if if the device already has a unique serial number in a tracking cookie.
-            If it does, it looks up the profile for that serial number and makes a note of the new site.
-            This is why a user can do a search on one website for a product they typically don’t look for, like walnuts,
-            and then suddenly start seeing advertisements for walnuts on every website they visit.</p>
-
-        <p>In addition to ad brokers, social media sites discovered they could get in on the action.
-            A few years ago, the major social media sites like Facebook and Twitter convinced a large number of websites
-            that it would be in their best interest to place little social media icons on their pages.
-            These are not just images. They contain <a href="https://developers.facebook.com/docs/plugins/like-button/">embedded code</a> that links back to the social media site, and, among other things,
-            loads a third-party cookie on the device. These cookies are placed even if the user does not have an account with the social media platform.
-            Over time, companies like Facebook (which also runs an ad network) have built up quite a large number of detailed profiles about people who have
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">never even created an account on their site</a>.</p>
-
-        <p>There is no good reason to ever enable third-party cookies. On devices with Android KitKat or older (version <= 4.4.4 or API <= 20), WebView does not
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
             <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
-            between first-party and third-party cookies</a>. Thus, enabling first-party cookies will also enable third-party cookies.</p>
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM Storage</h3>
 
-        <p>Document Object Model storage, also known as web storage, is like cookies on steroids.
-            Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
-            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">megabytes per site</a>.
-            Because DOM storage uses JavaScript to read and write data, it cannot be enabled unless JavaScript is also enabled.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Form Data</h3>
 
         <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
-            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction.
-            Beginning in Android Oreo (8.0), WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
             As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 7ca21a52c70d9b232dc9ba6811e75445325099f6..f09b8c9956d918189af8ddff19d2247fac166a1b 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright © 2016-2018,2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2016-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2018 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2018,2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             Luego, cada vez que un usuario visite la página web con ese dispositivo, puede vincularse a un perfil único que el servidor mantiene para ese número de serie,
             incluso si el dispositivo se conecta desde diferentes direcciones IP.</p>
 
-        <p>Casi todas las páginas web con inicios de sesión requieren que las cookies de primera parte estén habilitadas para que el usuario pueda iniciar sesión.
-            Así es como se aseguran de que sigues siendo tu al moverte de una página a otra en el sitio, y es, en mi opinión, uno de los pocos usos legítimos de las cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Si las cookies de primera parte están habilitadas pero Javascript está deshabilitado,
-            el icono de privacidad será amarillo <img class="inline" src="../shared_images/warning.svg"/> como advertencia.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Cookies de terceras partes</h3>
 
-        <p>Las cookies de terceras partes son establecidas por ciertas partes de una página web que son cargadas desde servidores diferentes a la URL de la parte superior de la página.
-            Por ejemplo, la mayoría de páginas web que tienen anuncios los cargan desde una compañía de publicidad de terceros, como <a href="https://www.google.com/adsense/start/">Ad Sense</a> de Google.
-            Cada vez que se carga la página web, solicita a la compañía de publicidad que muestre un anuncio.
-            La compañía de publicidad analiza cualquier información que pueda tener sobre el usuario, analiza la tasa actual que los anunciantes están dispuestos a pagar por sus anuncios,
-            y selecciona uno para mostrar. La sección de la página web que muestra los anuncios es cargada desde el servidor de la compañía de terceros en vez de hacerlo desde el servidor principal.</p>
-
-        <p>Ya que la mayoría de los anuncios en internet se muestran desde solo unas pequeñas compañías,
-            no les llevó a éstas mucho tiempo en darse cuenta que podrían establecer una cookie de seguimiento en el dispositivo del usuario y así conocer cualquier lugar al que el usuario va.
-            Cada vez que un anuncio se carga desde una compañía, lo primero que hace es comprobar si el dispositivo ya tiene un único número de serie en una cookie de seguimiento.
-            Si es así, busca el perfil para ese número de serie y toma nota del nuevo sitio web.
-            Es por esto que un usuario puede hacer una búsqueda en una página web por un producto que normalmente no busca, como nueces,
-            y luego de pronto empieza a ver anuncios de nueces en cada página web que visita.</p>
-
-        <p>Además de compañías de publicidad, las páginas de redes sociales descubrieron que también podían entrar en acción.
-            Hace unos pocos años, las principales páginas de redes sociales como Facebook y Twitter convencieron a un gran número de páginas web
-            que sería por su mejor interés colocar pequeños iconos de redes sociales en sus páginas. Éstos no son sólo imágenes.
-            Contienen <a href="https://developers.facebook.com/docs/plugins/like-button/">código incrustado</a> que enlazan de nuevo a la web de la red social,
-            y entre otras cosas cargan una cookie de terceras partes en el dispositivo. Estas cookies se colocan aunque el usuario no tenga una cuenta con la plataforma de la red social.
-            A través del tiempo, compañías como Facebook (la cual también corre una red de anuncios) han construído un gran número de perfiles detallados sobre personas que
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">ni siquiera han creado una cuenta en su web</a>.
-
-        <p>No existe ninguna buena razón para habilitar cookies de terceras partes. En dispositivos con Android KitKat o anteriores (versión <= 4.4.4 o API <= 20), WebView no
-            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">distingue entre cookies de primera parte
-            y cookies de teceras partes</a>. Por lo tanto, si se habilitan las cookies de primera parte también se habilitarán las de teceras partes.</p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> Almacenamiento DOM</h3>
 
-        <p>Document Object Model storage (o Almacenamiento de modelos de objetos de documento), también conocido como almacenamiento web, es como cookies con esteroides.
-            Mientras que el tamaño máximo de almacenamiento combinado para todas las cookies de una única URL es de 4 kilobytes, el almacenamiento DOM puede contener
-            <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">megabytes por sitio</a>.
-            Ya que el almacenamiento DOM usa JavaScript para leer y escribir datos, no puede activarse a menos que JavaScript esté también activado.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Datos de formulario</h3>
 
-        <p>Los datos de formulario contienen información escrita en formularios web, como nombres de usuario, direcciones, números de teléfono, etc., y los enumera en un cuadro desplegable en futuras visitas.
-            A diferencia de las otras formas de almacenamiento local, los datos de los formularios no se envían al servidor web sin la interacción específica del usuario.
-            A partir de Android Oreo (8.0), los datos de formulario de WebView fueron reemplazados por el
-            <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">servicio Autofill</a>.
-            Como tal, los controles para los datos de formulario ya no aparecen en los dispositivos Android más nuevos.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 42a49fcb5407311e5549552fe0dc99ae7c2a6bb1..d9d3208a1adb5abae8a9435a0dc28b534de6f117 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2016-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019,2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             Ensuite, chaque fois qu'un utilisateur visite le site Web sur cet appareil, il peut être lié à un profil unique que le serveur conserve pour ce numéro de série.
             même si le périphérique se connecte à partir d'adresses IP différentes.</p>
 
-        <p>Presque tous les sites Web avec des connexions exigent que les cookies propriétaires soient activés pour qu'un utilisateur puisse se connecter.
-            C'est ainsi qu'ils s'assurent que c'est toujours votre cas lorsque vous vous déplacez de page en page sur le site. C'est, à mon avis, l'une des rares utilisations légitimes des cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Si les cookies propriétaires sont activés mais que JavaScript est désactivé,
-            l'icône de confidentialité sera jaune <img class="inline" src="../shared_images/warning.svg"> en guise d'avertissement.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Cookies de tiers</h3>
 
-        <p>Les cookies tiers sont définis par des parties d'un site Web chargées à partir de serveurs différents de l'URL en haut de la page.
-            Par exemple, la plupart des sites Web contenant des publicités les chargent depuis un courtier publicitaire tiers, comme <a href="https://www.google.com/adsense/start/">Ad Sense</a> de Google.
-            Chaque fois que le site Web se charge, il demande au courtier en publicité d'afficher une annonce.
-            Le courtier en publicité analyse toutes les informations dont il dispose sur l'utilisateur,
-            examine le tarif actuel que les annonceurs sont disposés à payer pour leurs annonces et sélectionne celle à afficher.
-            La section du site Web qui affiche les annonces est chargée à partir du serveur du courtier tiers au lieu du serveur principal.</p>
-
-        <p>La plupart des publicités sur Internet étant traitées par quelques courtiers uniquement,
-            ils ont vite compris qu'ils pouvaient définir un cookie de suivi sur le terminal de l'utilisateur et connaître chaque lieu où cet utilisateur se rend.
-            Chaque fois qu'une annonce est chargée à partir d'un courtier, elle vérifie d'abord si le périphérique a déjà un numéro de série unique dans un cookie de suivi.
-            Si tel est le cas, il recherche le profil pour ce numéro de série et note le nouveau site.
-            C'est pourquoi un utilisateur peut rechercher sur un site Web un produit qu'il ne recherche généralement pas, comme les noix,
-            et puis soudain commencer à voir des publicités pour les noix sur chaque site Web qu'ils visitent.</p>
-
-        <p>Outre les courtiers en publicité, les sites de médias sociaux ont découvert qu'ils pouvaient jouer un rôle actif.
-            Il y a quelques années, les principaux sites de médias sociaux tels que Facebook et Twitter ont convaincu un grand nombre de sites Web.
-            qu'il serait dans leur intérêt de placer de petites icônes de médias sociaux sur leurs pages.
-            Ce ne sont pas que des images. Ils contiennent le <a href="https://developers.facebook.com/docs/plugins/like-button/">code incorporé</a> qui renvoie au site de média social et, entre autres,
-            charge un cookie tiers sur l'appareil. Ces cookies sont placés même si l'utilisateur n'a pas de compte avec la plate-forme de médias sociaux.
-            Au fil du temps, des entreprises comme Facebook (qui gère également une régie publicitaire) ont constitué un assez grand nombre de profils détaillés sur les personnes qui ont
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins"> n'a même jamais créé de compte sur son site </a>.</p>
-
-        <p>Il n'existe aucune raison valable d'autoriser les cookies tiers. Sur les appareils avec Android KitKat ou une version antérieure (version <= 4.4.4 ou API <= 20), WebView ne
-            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)"> différencie pas
-            entre les cookies propriétaires et tiers </a>. Ainsi, l'activation des cookies propriétaires permettra également l'utilisation de cookies tiers.</p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3> <svg class="header"><use href="../shared_images/web.svg#icon"/></svg> Stockage du DOM</h3>
 
-        <p>Le stockage de modèle d'objet de document, également appelé stockage Web, ressemble à des cookies sur des stéroïdes.
-            Considérant que la taille de stockage combinée maximale pour tous les cookies d'une seule URL est de 4 kilo-octets,
-            Le stockage DOM peut contenir <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">des mégaoctets par site</a>.
-            Le stockage DOM utilisant JavaScript pour lire et écrire des données, il ne peut être activé que si JavaScript est également activé.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3> <svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Données de formulaire</h3>
 
-        <p>Les données de formulaire contiennent des informations saisies dans des formulaires Web, telles que des noms d'utilisateur, des adresses, des numéros de téléphone,
-            etc., et les répertorient dans une liste déroulante lors de visites ultérieures.
-            Contrairement aux autres formes de stockage local, les données de formulaire ne sont pas envoyées au serveur Web sans interaction spécifique de l'utilisateur.
-            Depuis Android Oreo (8.0), les données de formulaire de WebView ont été remplacées par le
-            <a href="https://medium.com/@bherbst/getting-androids-autofill-tofwork-for-you-21435debea1">service de saisie automatique.</a>.
-            En tant que tels, les contrôles des données de formulaire n'apparaissent plus sur les nouveaux appareils Android.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 70c3436614c8b7366b7e8cab83d0394653ba2eb7..2e4b8ddeff923da38a42795f0bdcb54431bf884e 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright © 2017-2018,2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2017-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2018 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2018,2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             In questo modo, ogni volta che l'utente visiterà il sito da quel dispositivo, sarà collegato ad un profilo unico mantenuto sul server per quel particolare numero seriale,
             anche se il dispositivo si connette con indirizzo IP diverso.</p>
 
-        <p>Quasi tutti i che richiedono login hanno bisogno che i cookies proprietari siano abilitati per permettere ad un utente di accedere.
-            Questo è il modo in cui essi sono sicuri che l'utente sia sempre lui nella navigazione da una pagina all'altra del sito, ed è, a nostro parere, uno dei pochi utilizzi legittimi dei cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Se sono stati abilitati i cookies proprietari ma è stato disabilitato JavaScript,
-            l'icona della privacy sarà gialla <img class="inline" src="../shared_images/warning.svg"/> con lo scopo di avvertire l'utente.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Cookies di terze parti</h3>
 
-        <p>I cookies di terze parti sono impostati da alcune porzioni dei siti web che sono caricate da server differenti rispetto alla URL all'inizio della pagina.
-            Ad esempio, molti siti web con annunci pubblicitari caricano gli annunci da ad-broker distinti, come ad esempio Google <a href="https://www.google.com/adsense/start/">Ad Sense</a>.
-            Ogni volta che il sito viene caricato richiede all'ad-broker di mostrare un annuncio pubblicitario.
-            A questo punto l'ad-broker analizza tutte le informazioni possedute relative all'utente, compara le tariffe che saranno pagate dalle agenzie per i diversi annunci,
-            e quindi seleziona quello da mostrare. La sezione di un sito web dedicata alla visualizzazione degli annunci pubblicitari viene caricata dal server del broker invece che da quello principale.</p>
-
-        <p>Dal momento che la maggior parte della pubblicità su internet è gestita da pochi broker,
-            non c'è voluto molto tempo perchè si rendessero conto di poter posizionare un cookie tracciante sui dispositivi per conoscere i luoghi in cui si trovano gli utenti.
-            Ogni volta che si carica un annuncio la primissima cosa che il broker fa è quella di verificare se il dispositivo ha già il suo numero seriale univoco in un cookie.
-            A questo punto cerca il profilo relativo a quel numero seriale e memorizza il nuovo sito.
-            Questo è il motivo per cui un utente può effettuare una ricerca su un sito per un prodotto che solitamente non cerca, ad esempio le noci,
-            e da quel momento improvvisamente inizia a vedere annunci di noci su ogni sito web visitato.</p>
-
-        <p>Oltre agli ad-broker, anche i social media hanno scoperto come entrare in azione.
-            Alcuni anni fa i principali siti social come Facebook e Twitter hanno convinto un gran numero di siti web che
-            sarebbe stato loro molto utile inserire alcune piccole icone dei social media sulle loro pagine. Queste però non sono semplici immagini.
-            Esse contengono del <a href="https://developers.facebook.com/docs/plugins/like-button/">codice incorporato</a> che collega al sito del social media ma non solo, oltre ad altre cose,
-            carica un cookie di terze parti sul dispositivo. Questi cookie sono caricati anche se l'utente non possiede nemmeno un account su quel particolare social media.
-            Nel corso del tempo le aziende come Facebook (che gestisce anche una rete di annunci) hanno costruito un numero enorme di profili dettagliati di persone che
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">non hanno nemmeno mai creato un account sul loro sito</a>.</p>
-
-        <p>Non esiste nessuna buona ragione di abilitare i cookie di terze parti. Su dispositivi con Android KitKat o precedente (versione <= 4.4.4 o API <= 20), WebView non
-            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">fa distinzione
-            tra cookie proprietari e cookie di terze parti.</a>. Per questo motivo l'abilitazione dei primi permette anche la creazione dei secondi.</p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM Storage</h3>
 
-        <p>Il Document Object Model storage, conosciuto anche come web storage, è come l'utilizzo di cookie potenziati.
-            Mentre per tutti i cookie di una singola URL il massimo spazio di memoria occupata è di circa 4 kilobyte,
-            il DOM storage può occupare alcuni <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">megabyte per sito</a>.
-            Siccome il DOM storage utilizza JavaScript per leggere e scrivere dati, non può essere abilitato se non viene abilitato anche JavaScript.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Dati dei moduli</h3>
 
-        <p>I dati dei moduli contengono le informazioni che vengono digitate nei web form, come user name, indirizzi, numeri di telefono, ecc.
-            per poterli elencare in menù a tendina in caso di visite successive.
-            A differenza delle altre modalità di memorizzazione locale delle informazioni, i dati dei moduli non vengono inviati ai web server senza una interazione con l'utente.
-            A partire da Android Oreo (8.0), i dati dei moduli di WebView’s sono stati sostituiti dal
-            <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Servizio di Riempimento Automatico</a>.
-            Per questo motivo i controlli per i dati dei moduli non sono più disponibili nei dispositivi Android più recenti.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index bfcdcdc002a5c480d38ca6792c9d8cfd61e9ee8d..31a61a2f1c2ad75d0341b7ddc80887fdabd82634 100644 (file)
             Then, every time a user visits the website on that device, it can be linked to a unique profile the server maintains for that serial number,
             even if the device connects from different IP addresses.</p>
 
-        <p>Almost all websites with logins require first-party cookies to be enabled for a user to log in.
-            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, one of the few legitimate uses for cookies.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>If first-party cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Third-Party Cookies</h3>
 
         <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
-            For example, most website that have advertisements load them from a third-party ad broker, like Google’s <a href="https://www.google.com/adsense/start/">Ad Sense</a>.
-            Every time the website loads, it requests the ad broker to display an ad.
-            The ad broker analyzes any information they may have about the user, looks at the current rate advertisers are willing to pay for their ads, and selects the one to display.
-            The section of the website that displays the ads is loaded from the third-party broker’s server instead of the main server.</p>
-
-        <p>Because most of the advertisements on the internet are processed by only a few brokers,
-            it didn’t take long for them to realize that they could set a tracking cookie on the user’s device and know every place that user goes.
-            Every time an ad loads from a broker, the first thing it does it check to see if if the device already has a unique serial number in a tracking cookie.
-            If it does, it looks up the profile for that serial number and makes a note of the new site.
-            This is why a user can do a search on one website for a product they typically don’t look for, like walnuts,
-            and then suddenly start seeing advertisements for walnuts on every website they visit.</p>
-
-        <p>In addition to ad brokers, social media sites discovered they could get in on the action.
-            A few years ago, the major social media sites like Facebook and Twitter convinced a large number of websites
-            that it would be in their best interest to place little social media icons on their pages.
-            These are not just images. They contain <a href="https://developers.facebook.com/docs/plugins/like-button/">embedded code</a> that links back to the social media site, and, among other things,
-            loads a third-party cookie on the device. These cookies are placed even if the user does not have an account with the social media platform.
-            Over time, companies like Facebook (which also runs an ad network) have built up quite a large number of detailed profiles about people who have
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">never even created an account on their site</a>.</p>
-
-        <p>There is no good reason to ever enable third-party cookies. On devices with Android KitKat or older (version <= 4.4.4 or API <= 20), WebView does not
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
             <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
-            between first-party and third-party cookies</a>. Thus, enabling first-party cookies will also enable third-party cookies.</p>
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM Storage</h3>
 
-        <p>Document Object Model storage, also known as web storage, is like cookies on steroids.
-            Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
-            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">megabytes per site</a>.
-            Because DOM storage uses JavaScript to read and write data, it cannot be enabled unless JavaScript is also enabled.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Form Data</h3>
 
         <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
-            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction.
-            Beginning in Android Oreo (8.0), WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
             As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 94fc93ca5c487702651986ba1d2c645e983f8b01..56c44663315afdaa3d65634342e643a7c9fa8af7 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright © 2016-2018,2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2016-2018,2020-2021 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             Затем каждый раз, когда пользователь посещает веб-сайт с этого устройства, он может быть связан с уникальным профилем, который сервер хранит для этого номера,
             даже если устройство подключается с разных IP-адресов.</p>
 
-        <p>Почти все веб-сайты с формами авторизации требуют, чтобы для входа в систему у пользователя были включены первичные файлы cookie.
-            Именно так они убеждаются, что это все еще вы, когда вы переходите со страницы на страницу на сайте, и, на мой взгляд, это один из немногих законных способов использования файлов cookie.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Если первичные файлы cookie включены, но JavaScript отключен, значок конфиденциальности будет желтым <img class="inline" src="../shared_images/warning.svg"/> как предупреждение.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Сторонние файлы cookie</h3>
 
-        <p>Сторонние файлы cookie устанавливаются частями веб-сайта, которые загружаются с серверов, отличных от указанного в строке URL.
-            Например, большинство веб-сайтов, на которых есть реклама, загружают их со стороннего рекламного брокера, например,
-            <a href="https://www.google.com/adsense/start/">Google AdSense</a>. Каждый раз, когда сайт загружается, он запрашивает у рекламного брокера рекламу.
-            Рекламный брокер анализирует любую информацию, которую они могут иметь о пользователе, просматривает текущую ставку,
-            которую рекламодатели готовы заплатить за свою рекламу, и выбирает ту, которая будет отображаться.
-            Раздел веб-сайта, на котором отображается реклама, загружается с сервера рекламного брокера, а не с основного сервера.</p>
-
-        <p>Поскольку большая часть рекламы в интернете обрабатывается лишь несколькими брокерами, им не потребовалось много времени, чтобы понять,
-            что они могут установить отслеживающий cookie на устройстве пользователя и узнать все посещаемые пользователем сайты.
-            Каждый раз, когда реклама загружается от брокера, первое, что он делает это проверяет имеет ли устройство уникальный номер отслеживающего cookie.
-            Если это так, он ищет профиль для этого номера и делает заметку о новом сайте.
-            Чтобы это проверить, пользователь может выполнить поиск на одном сайте для продукта, который он обычно не ищет, например грецких орехов,
-            а затем вдруг начать наблюдать рекламу для грецких орехов на каждом посещаемом сайте.</p>
-
-        <p>В дополнение к рекламным брокерам сайты социальных сетей обнаружили, что тоже могли бы принять участие в этом.
-            Несколько лет назад основные социальные сети, такие как Facebook и Twitter, убедили владельцев большого количества веб-сайтов в том,
-            что им было бы интересно разместить небольшие значки социальных сетей на своих страницах. Это не просто изображения.
-            Они содержат <a href="https://developers.facebook.com/docs/plugins/like-button/">встроенный код</a>, который ссылается на сайт в социальных сетях и, среди прочего,
-            загружает сторонний файл cookie на устройство.
-            Эти файлы cookie размещаются, даже если у пользователя нет учетной записи на платформе социальных сетей.
-            Со временем такие компании, как Facebook (который также запустил рекламную сеть), создали довольно большое количество подробных профилей о людях,
-            у которых <a href = "http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins"> даже не было аккаунта на сайте социальной сети</a>.</p>
-
-        <p>Нет ни одной веской причины когда-либо разрешать сторонние файлы cookie. На устройствах с Android KitKat или старше (версия <= 4.4.4 или API <= 20), WebView не
-            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">различает первичные и сторонние файлы cookie</a>.
-            Таким образом, включение первичных файлов cookie также разрешит и сторонние.</p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM-хранилище</h3>
 
-        <p>Хранилище объектной модели документа (Document Object Model), также известное как веб-хранилище, похоже на cookie (печенье) на стероидах.
-            Если максимальный общий размер хранилища для всех файлов cookie с одного URL-адреса составляет 4 килобайта,
-            то DOM-хранилище вмещает в себя <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">мегабайты на сайт</a>.
-            Поскольку DOM-хранилище использует JavaScript для чтения и записи данных, включение его ни на что не влияет пока отключен JavaScript.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Данные формы</h3>
 
-        <p>Данные формы содержат информацию, введенную в веб-формы, например имена пользователей, адреса, номера телефонов и т.д., и доступную в раскрывающемся списке при будущих посещениях.
-            В отличие от других форм локального хранилища данные формы не отправляются на веб-сервер без специального взаимодействия с пользователем.
-            Начиная с Android Oreo (8.0), данные формы WebView были заменены на <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">службу автозаполнения</a>.
-            Таким образом, элементы управления данными формы больше не отображаются на новых устройствах Android.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 106f70d26a8c9c68b921c911837d7ae1d433260b..14963e66ec0295a3aeef57b48f74f8a79a25c966 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
             Daha sonra, bir kullanıcının o cihaz üzerinden web sitesini her ziyaretinde, cihaz farklı IP adreslerinden bağlansa bile,
             sunucunun o seri numarası için devam ettirdiği özgün profile bağlanabilir.</p>
 
-        <p>Oturum açılan neredeyse tüm web sitelerine, bir kullanıcının giriş yapması için birinci taraf çerezlerin etkin olması gerekir.
-            Bu da web sitelerinin, site içinde sayfadan sayfaya atladığınızda, o kişinin hala siz olduğunuza emin olmasını sağlar, ki bana göre bu, çerezler için kullanılan birkaç yasal yöntemden biridir.</p>
+        <p>Almost all websites with logins require cookies to be enabled for a user to log in.
+            That is how they make sure it is still you as you move from page to page on the site, and is, in my opinion, the only legitimate use for cookies.</p>
 
-        <p>Birinci taraf çerezler etkinken, ancak JavaScript devre dışı bırakılmışsa, gizlilik simgesi bir uyarı olarak sarı <img class="inline" src="../shared_images/warning.svg"/> olacaktır.</p>
+        <p>If cookies are enabled but JavaScript is disabled, the privacy icon will be yellow <img class="inline" src="../shared_images/warning.svg"> as a warning.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/cookie.svg#icon"/></svg> Üçüncü Taraf Çerezler</h3>
 
-        <p>Üçüncü taraf çerezler, sayfanın üst kısmında yer alan URL'deki farklı sunuculardan yüklenen bir web sitesinin parçaları tarafından oluşturulur.
-            Örneğin, kullanıcılarına reklam gösteren çoğu web sitesi, reklamlarını Google <a href="https://www.google.com/adsense/start/">Ad Sense</a> gibi bir üçüncü taraf reklam aracısından yükler.
-            Web sitesi her yüklendiğinde, reklam aracısından bir reklam göstermesi istenir.
-            Reklam aracısı kullanıcı hakkında sahip olabildiği her bilgiyi analiz eder, reklamları için ödemeye istekli olan reklamverenlerin güncel oranına bakar ve gösterilecek reklamı seçer.
-            Web sitelerinin reklamları gösteren bölümü, ana sunucu yerine üçüncü taraf aracının sunucusundan yüklenir.</p>
-
-        <p>İnternetteki reklamların çoğu sadece birkaç aracı tarafından işlendiğinden, aracıların,
-            kullanıcılarının cihazına bir izleme çerezi koyabileceklerini ve kullanıcılarının gittiği her yeri bilebileceklerini fark etmeleri uzun sürmedi.
-            Bir aracıdan bir reklam her yüklendiğinde, yaptığı ilk şey, cihazın bir takip çerezinin içindeki özgün bir seri numarasına sahip olup olmadığını kontrol etmek olacaktır.
-            Varsa, bu seri numarasının profilini arar ve yeni siteyi not eder. Bir kullanıcının ceviz gibi genellikle aramadığı bir ürün için bir web sitesinde arama yapmasının ardından,
-            her ziyaret ettiği web sitesinde ceviz hakkında reklamlar görmeye başlamasının sebebi budur.</p>
-
-        <p>Reklam aracılarına ek olarak, sosyal medya siteleri de harekete geçebileceklerini fark ettiler.
-            Birkaç yıl önce, Facebook ve Twitter gibi büyük sosyal medya siteleri, çok sayıda web sitesini, sayfalarına küçük sosyal medya simgelerini yerleştirmenin yararlarına olacağına ikna etti.
-            Bu simgeler sadece görüntü değiller, aslında sosyal medya sitesine geri bağlanan <a href="https://developers.facebook.com/docs/plugins/like-button/">gömülü kod</a>
-            içerirler ve diğer şeylerin yanı sıra, cihaza bir üçüncü taraf çerez yüklerler. Bu çerezler, kullanıcının sosyal medya platformunda bir hesabı olmasa dahi yerleştirilir.
-            Zaman içinde, Facebook gibi şirketler (aynı zamanda bir reklam ağı da yürüten),
-            <a href="http://www.theverge.com/2016/5/27/11795248/facebook-ad-network-non-users-cookies-plug-ins">sitelerinde hiç hesap oluşturmayan</a>
-            insanlar hakkında oldukça fazla sayıda ayrıntılı profil oluşturdular.</p>
-
-        <p>Üçüncü taraf çerezlerini etkinleştirmek için hiçbir sebep yoktur. Android KitKat versiyonuna ya da daha eski versiyonlara (versiyon <=4.4.4 veya API <=20) sahip cihazlarda, WebView
-            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">
-            birinci ve üçüncü taraf çerezler arasında ayrım yapmaz.</a> Böylece birinci taraf çerezlerini etkinleştirmek üçüncü taraf çerezlerini de etkinleştirir.</p>
+        <p>Third-party cookies are set by portions of a website that are loaded from servers different from the URL at the top of the page.
+            There is no good reason to ever enable third-party cookies. Privacy Browser 3.8 removed the option, and even Google is planning to
+            <a href="https://www.theverge.com/2020/1/14/21064698/google-third-party-cookies-chrome-two-years-privacy-safari-firefox">disable them in the future</a>.
+            On devices with Android KitKat (version 4.4.4, API 20), WebView does not
+            <a href="https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptThirdPartyCookies(android.webkit.WebView, boolean)">differentiate
+            between first-party and third-party cookies</a>. Thus, enabling cookies will also enable third-party cookies.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/web.svg#icon"/></svg> DOM Depolama</h3>
 
-        <p>Document Object Model (Belge Nesne Modeli) depolaması, web depolaması olarak bilinir, büyük kurabiyeler gibidir.
-            Tek bir URL'deki tüm çerezler için maksimum birleşik depolama boyutu 4 kilobayt iken,
-            DOM depolama bu boyutu <a href="https://en.wikipedia.org/wiki/Web_storage#Storage_size">her site için megabaytlara</a> çıkarabilir.
-            DOM depolama, veri okumak ve yazmak için JavaScript kullandığından dolayı, JavaScript etkinleştirilmeden o da etkin olamaz.</p>
+        <p>Document Object Model storage, also known as web storage, is like cookies on steroids. Whereas the maximum combined storage size for all cookies from a single URL is 4 kilobytes,
+            DOM storage can hold <a href="https://en.wikipedia.org/wiki/Web_storage#Features">megabytes per site</a>. Unlike cookies, DOM storage does not send all the data in the headers with every request.
+            Rather, it uses JavaScript to read and write data, which means it does not function when JavaScript is disabled.</p>
 
 
         <h3><svg class="header"><use href="../shared_images/subtitles.svg#icon"/></svg> Form Verisi</h3>
 
-        <p>Form verileri, kullanıcı adları, adresler, telefon numaraları vb. gibi web formlarına yazılan bilgileri içerir ve gelecekteki ziyaretler için onları açılır bir kutuya listeler.
-            Diğer yerel depolama biçimlerinin aksine, form verisi, belirli bir kullanıcı etkileşimi olmadan web sunucusuna gönderilmez.
-            Android Oreo (8.0) versiyonundan başlayarak,
-            WebView’in form verisi <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Otomatik Doldurma servisi</a> ile değiştirildi.
-            Bu nedenle, form verisi kontrolleri artık daha yeni Android versiyona sahip cihazlarda görünmeyecek.</p>
+        <p>Form data contains information typed into web forms, like user names, addresses, phone numbers, etc., and lists them in a drop-down box on future visits.
+            Unlike the other forms of local storage, form data is not sent to the web server without specific user interaction. Beginning in Android Oreo (version 8.0, API 26),
+            WebView’s form data was replaced by the <a href="https://medium.com/@bherbst/getting-androids-autofill-to-work-for-you-21435debea1">Autofill service</a>.
+            As such, controls for form data no longer appear on newer Android devices.</p>
     </body>
 </html>
\ No newline at end of file
index 2283277fb9f328ad741e4ac772a15abb744b99e8..8d460b0c07dfe69f8c66141b7202a596ce9b37f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -749,8 +749,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         // Get handles for the domain settings.
         EditText domainNameEditText = view.findViewById(R.id.domain_settings_name_edittext);
         SwitchCompat javaScriptSwitch = view.findViewById(R.id.javascript_switch);
-        SwitchCompat firstPartyCookiesSwitch = view.findViewById(R.id.first_party_cookies_switch);
-        SwitchCompat thirdPartyCookiesSwitch = view.findViewById(R.id.third_party_cookies_switch);
+        SwitchCompat cookiesSwitch = view.findViewById(R.id.cookies_switch);
         SwitchCompat domStorageSwitch = view.findViewById(R.id.dom_storage_switch);
         SwitchCompat formDataSwitch = view.findViewById(R.id.form_data_switch);  // Form data can be removed once the minimum API >= 26.
         SwitchCompat easyListSwitch = view.findViewById(R.id.easylist_switch);
@@ -776,8 +775,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         // Extract the data for the domain settings.
         String domainNameString = domainNameEditText.getText().toString();
         boolean javaScript = javaScriptSwitch.isChecked();
-        boolean firstPartyCookies = firstPartyCookiesSwitch.isChecked();
-        boolean thirdPartyCookies = thirdPartyCookiesSwitch.isChecked();
+        boolean cookies = cookiesSwitch.isChecked();
         boolean domStorage  = domStorageSwitch.isChecked();
         boolean formData = formDataSwitch.isChecked();  // Form data can be removed once the minimum API >= 26.
         boolean easyList = easyListSwitch.isChecked();
@@ -829,7 +827,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         }
 
         // Save the domain settings.
-        domainsDatabaseHelper.updateDomain(DomainsActivity.currentDomainDatabaseId, domainNameString, javaScript, firstPartyCookies, thirdPartyCookies, domStorage, formData, easyList, easyPrivacy,
+        domainsDatabaseHelper.updateDomain(DomainsActivity.currentDomainDatabaseId, domainNameString, javaScript, cookies, domStorage, formData, easyList, easyPrivacy,
                 fanboysAnnoyance, fanboysSocialBlocking, ultraList, ultraPrivacy, blockAllThirdPartyRequests, userAgentName, fontSizeInt, swipeToRefreshInt, webViewThemeInt, wideViewportInt,
                 displayWebpageImagesInt, pinnedSslCertificate, pinnedIpAddress);
 
index d89e287b9268f08fb06cc20f952a82c444f18cf0..b00e19a7e05c24d5c3e7bf0341c2a2cfdf6d19b7 100644 (file)
@@ -341,8 +341,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     private MenuItem navigationRequestsMenuItem;
     private MenuItem optionsPrivacyMenuItem;
     private MenuItem optionsRefreshMenuItem;
-    private MenuItem optionsFirstPartyCookiesMenuItem;
-    private MenuItem optionsThirdPartyCookiesMenuItem;
+    private MenuItem optionsCookiesMenuItem;
     private MenuItem optionsDomStorageMenuItem;
     private MenuItem optionsSaveFormDataMenuItem;
     private MenuItem optionsClearDataMenuItem;
@@ -822,8 +821,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Get handles for the class menu items.
         optionsPrivacyMenuItem = menu.findItem(R.id.javascript);
         optionsRefreshMenuItem = menu.findItem(R.id.refresh);
-        optionsFirstPartyCookiesMenuItem = menu.findItem(R.id.first_party_cookies);
-        optionsThirdPartyCookiesMenuItem = menu.findItem(R.id.third_party_cookies);
+        optionsCookiesMenuItem = menu.findItem(R.id.cookies);
         optionsDomStorageMenuItem = menu.findItem(R.id.dom_storage);
         optionsSaveFormDataMenuItem = menu.findItem(R.id.save_form_data);  // Form data can be removed once the minimum API >= 26.
         optionsClearDataMenuItem = menu.findItem(R.id.clear_data);
@@ -871,9 +869,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Set the initial status of the privacy icons.  `false` does not call `invalidateOptionsMenu` as the last step.
         updatePrivacyIcons(false);
 
-        // Only display third-party cookies if API >= 21
-        optionsThirdPartyCookiesMenuItem.setVisible(Build.VERSION.SDK_INT >= 21);
-
         // Only display the form data menu items if the API < 26.
         optionsSaveFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
         optionsClearFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
@@ -897,11 +892,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         if (displayAdditionalAppBarIcons) {
             optionsRefreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
             bookmarksMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-            optionsFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+            optionsCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
         } else { //Do not display the additional icons.
             optionsRefreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
             bookmarksMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-            optionsFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+            optionsCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         }
 
         // Replace Refresh with Stop if a URL is already loading.
@@ -975,15 +970,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             optionsUltraPrivacyMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.ULTRAPRIVACY) + " - " + getString(R.string.ultraprivacy));
             optionsBlockAllThirdPartyRequestsMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " + getString(R.string.block_all_third_party_requests));
 
-            // Only modify third-party cookies if the API >= 21.
-            if (Build.VERSION.SDK_INT >= 21) {
-                // Set the status of the third-party cookies checkbox.
-                optionsThirdPartyCookiesMenuItem.setChecked(cookieManager.acceptThirdPartyCookies(currentWebView));
-
-                // Enable third-party cookies if first-party cookies are enabled.
-                optionsThirdPartyCookiesMenuItem.setEnabled(cookieManager.acceptCookie());
-            }
-
             // Enable DOM Storage if JavaScript is enabled.
             optionsDomStorageMenuItem.setEnabled(currentWebView.getSettings().getJavaScriptEnabled());
 
@@ -993,8 +979,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             }
         }
 
-        // Set the checked status of the first party cookies menu item.
-        optionsFirstPartyCookiesMenuItem.setChecked(cookieManager.acceptCookie());
+        // Set the cookies menu item checked status.
+        optionsCookiesMenuItem.setChecked(cookieManager.acceptCookie());
 
         // Enable Clear Cookies if there are any.
         optionsClearCookiesMenuItem.setEnabled(cookieManager.hasCookies());
@@ -1213,12 +1199,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
             // Consume the event.
             return true;
-        } else if (menuItemId == R.id.first_party_cookies) {  // First-party cookies.
+        } else if (menuItemId == R.id.cookies) {  // Cookies.
             // Switch the first-party cookie status.
             cookieManager.setAcceptCookie(!cookieManager.acceptCookie());
 
-            // Store the first-party cookie status.
-            currentWebView.setAcceptFirstPartyCookies(cookieManager.acceptCookie());
+            // Store the cookie status.
+            currentWebView.setAcceptCookies(cookieManager.acceptCookie());
 
             // Update the menu checkbox.
             menuItem.setChecked(cookieManager.acceptCookie());
@@ -1227,10 +1213,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             updatePrivacyIcons(true);
 
             // Display a snackbar.
-            if (cookieManager.acceptCookie()) {  // First-party cookies are enabled.
-                Snackbar.make(webViewPager, R.string.first_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
+            if (cookieManager.acceptCookie()) {  // Cookies are enabled.
+                Snackbar.make(webViewPager, R.string.cookies_enabled, Snackbar.LENGTH_SHORT).show();
             } else if (currentWebView.getSettings().getJavaScriptEnabled()) {  // JavaScript is still enabled.
-                Snackbar.make(webViewPager, R.string.first_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
+                Snackbar.make(webViewPager, R.string.cookies_disabled, Snackbar.LENGTH_SHORT).show();
             } else {  // Privacy mode.
                 Snackbar.make(webViewPager, R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
             }
@@ -1238,28 +1224,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Reload the current WebView.
             currentWebView.reload();
 
-            // Consume the event.
-            return true;
-        } else if (menuItemId == R.id.third_party_cookies) {  // Third-party cookies.
-            // Only act if the API >= 21.  Otherwise, there are no third-party cookie controls.
-            if (Build.VERSION.SDK_INT >= 21) {
-                // Toggle the status of thirdPartyCookiesEnabled.
-                cookieManager.setAcceptThirdPartyCookies(currentWebView, !cookieManager.acceptThirdPartyCookies(currentWebView));
-
-                // Update the menu checkbox.
-                menuItem.setChecked(cookieManager.acceptThirdPartyCookies(currentWebView));
-
-                // Display a snackbar.
-                if (cookieManager.acceptThirdPartyCookies(currentWebView)) {
-                    Snackbar.make(webViewPager, R.string.third_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
-                } else {
-                    Snackbar.make(webViewPager, R.string.third_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
-                }
-
-                // Reload the current WebView.
-                currentWebView.reload();
-            }
-
             // Consume the event.
             return true;
         } else if (menuItemId == R.id.dom_storage) {  // DOM storage.
@@ -1758,7 +1722,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         } else if (menuItemId == R.id.save_url) {  // Save URL.
             // Prepare the save dialog.  The dialog will be displayed once the file size and the content disposition have been acquired.
             new PrepareSaveDialog(this, this, getSupportFragmentManager(), SaveWebpageDialog.SAVE_URL, currentWebView.getSettings().getUserAgentString(),
-                    currentWebView.getAcceptFirstPartyCookies()).execute(currentWebView.getCurrentUrl());
+                    currentWebView.getAcceptCookies()).execute(currentWebView.getCurrentUrl());
 
             // Consume the event.
             return true;
@@ -2271,7 +2235,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 menu.add(R.string.save_url).setOnMenuItemClickListener((MenuItem item) -> {
                     // Prepare the save dialog.  The dialog will be displayed once the file size and the content disposition have been acquired.
                     new PrepareSaveDialog(this, this, getSupportFragmentManager(), SaveWebpageDialog.SAVE_URL, currentWebView.getSettings().getUserAgentString(),
-                            currentWebView.getAcceptFirstPartyCookies()).execute(linkUrl);
+                            currentWebView.getAcceptCookies()).execute(linkUrl);
 
                     // Consume the event.
                     return true;
@@ -2338,7 +2302,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 menu.add(R.string.save_image).setOnMenuItemClickListener((MenuItem item) -> {
                    // Prepare the save dialog.  The dialog will be displayed once the file size and the content disposition have been acquired.
                     new PrepareSaveDialog(this, this, getSupportFragmentManager(), SaveWebpageDialog.SAVE_URL, currentWebView.getSettings().getUserAgentString(),
-                            currentWebView.getAcceptFirstPartyCookies()).execute(imageUrl);
+                            currentWebView.getAcceptCookies()).execute(imageUrl);
 
                     // Consume the event.
                     return true;
@@ -2438,7 +2402,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 menu.add(R.string.save_image).setOnMenuItemClickListener((MenuItem item) -> {
                     // Prepare the save dialog.  The dialog will be displayed once the file size and the content disposition have been acquired.
                     new PrepareSaveDialog(this, this, getSupportFragmentManager(), SaveWebpageDialog.SAVE_URL, currentWebView.getSettings().getUserAgentString(),
-                            currentWebView.getAcceptFirstPartyCookies()).execute(imageUrl);
+                            currentWebView.getAcceptCookies()).execute(imageUrl);
 
                     // Consume the event.
                     return true;
@@ -2460,7 +2424,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 menu.add(R.string.save_url).setOnMenuItemClickListener((MenuItem item) -> {
                     // Prepare the save dialog.  The dialog will be displayed once the file size and the content disposition have been acquired.
                     new PrepareSaveDialog(this, this, getSupportFragmentManager(), SaveWebpageDialog.SAVE_URL, currentWebView.getSettings().getUserAgentString(),
-                            currentWebView.getAcceptFirstPartyCookies()).execute(linkUrl);
+                            currentWebView.getAcceptCookies()).execute(linkUrl);
 
                     // Consume the event.
                     return true;
@@ -3131,7 +3095,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 }
 
                 // Save the URL.
-                new SaveUrl(this, this, saveWebpageFilePath, currentWebView.getSettings().getUserAgentString(), currentWebView.getAcceptFirstPartyCookies()).execute(saveWebpageUrl);
+                new SaveUrl(this, this, saveWebpageFilePath, currentWebView.getSettings().getUserAgentString(), currentWebView.getAcceptCookies()).execute(saveWebpageUrl);
                 break;
 
             case SaveWebpageDialog.SAVE_ARCHIVE:
@@ -3909,8 +3873,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Get the settings from the cursor.
                 nestedScrollWebView.setDomainSettingsDatabaseId(currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper._ID)));
                 nestedScrollWebView.getSettings().setJavaScriptEnabled(currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_JAVASCRIPT)) == 1);
-                nestedScrollWebView.setAcceptFirstPartyCookies(currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES)) == 1);
-                boolean domainThirdPartyCookiesEnabled = (currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES)) == 1);
+                nestedScrollWebView.setAcceptCookies(currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.COOKIES)) == 1);
                 nestedScrollWebView.getSettings().setDomStorageEnabled(currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_DOM_STORAGE)) == 1);
                 // Form data can be removed once the minimum API >= 26.
                 boolean saveFormData = (currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA)) == 1);
@@ -3980,12 +3943,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 }
 
                 // Apply the cookie domain settings.
-                cookieManager.setAcceptCookie(nestedScrollWebView.getAcceptFirstPartyCookies());
-
-                // Set third-party cookies status if API >= 21.
-                if (Build.VERSION.SDK_INT >= 21) {
-                    cookieManager.setAcceptThirdPartyCookies(nestedScrollWebView, domainThirdPartyCookiesEnabled);
-                }
+                cookieManager.setAcceptCookie(nestedScrollWebView.getAcceptCookies());
 
                 // Apply the form data setting if the API < 26.
                 if (Build.VERSION.SDK_INT < 26) {
@@ -4164,8 +4122,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             } else {  // The new URL does not have custom domain settings.  Load the defaults.
                 // Store the values from the shared preferences.
                 nestedScrollWebView.getSettings().setJavaScriptEnabled(sharedPreferences.getBoolean("javascript", false));
-                nestedScrollWebView.setAcceptFirstPartyCookies(sharedPreferences.getBoolean("first_party_cookies", false));
-                boolean defaultThirdPartyCookiesEnabled = sharedPreferences.getBoolean("third_party_cookies", false);
+                nestedScrollWebView.setAcceptCookies(sharedPreferences.getBoolean(getString(R.string.cookies_key), false));
                 nestedScrollWebView.getSettings().setDomStorageEnabled(sharedPreferences.getBoolean("dom_storage", false));
                 boolean saveFormData = sharedPreferences.getBoolean("save_form_data", false);  // Form data can be removed once the minimum API >= 26.
                 nestedScrollWebView.enableBlocklist(NestedScrollWebView.EASYLIST, sharedPreferences.getBoolean("easylist", true));
@@ -4176,8 +4133,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 nestedScrollWebView.enableBlocklist(NestedScrollWebView.ULTRAPRIVACY, sharedPreferences.getBoolean("ultraprivacy", true));
                 nestedScrollWebView.enableBlocklist(NestedScrollWebView.THIRD_PARTY_REQUESTS, sharedPreferences.getBoolean("block_all_third_party_requests", false));
 
-                // Apply the default first-party cookie setting.
-                cookieManager.setAcceptCookie(nestedScrollWebView.getAcceptFirstPartyCookies());
+                // Apply the default cookie setting.
+                cookieManager.setAcceptCookie(nestedScrollWebView.getAcceptCookies());
 
                 // Apply the default font size setting.
                 try {
@@ -4208,11 +4165,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Reset the pinned variables.
                 nestedScrollWebView.setDomainSettingsDatabaseId(-1);
 
-                // Set third-party cookies status if API >= 21.
-                if (Build.VERSION.SDK_INT >= 21) {
-                    cookieManager.setAcceptThirdPartyCookies(nestedScrollWebView, defaultThirdPartyCookiesEnabled);
-                }
-
                 // Get the array position of the user agent name.
                 int userAgentArrayPosition = userAgentNamesArray.getPosition(defaultUserAgentName);
 
@@ -4423,7 +4375,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Update the privacy icon.
             if (currentWebView.getSettings().getJavaScriptEnabled()) {  // JavaScript is enabled.
                 optionsPrivacyMenuItem.setIcon(R.drawable.javascript_enabled);
-            } else if (currentWebView.getAcceptFirstPartyCookies()) {  // JavaScript is disabled but cookies are enabled.
+            } else if (currentWebView.getAcceptCookies()) {  // JavaScript is disabled but cookies are enabled.
                 optionsPrivacyMenuItem.setIcon(R.drawable.warning);
             } else {  // All the dangerous features are disabled.
                 optionsPrivacyMenuItem.setIcon(R.drawable.privacy_mode);
@@ -4432,14 +4384,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Get the current theme status.
             int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
 
-            // Update the first-party cookies icon.
-            if (currentWebView.getAcceptFirstPartyCookies()) {  // First-party cookies are enabled.
-                optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_enabled);
-            } else {  // First-party cookies are disabled.
+            // Update the cookies icon.
+            if (currentWebView.getAcceptCookies()) {  // Cookies are enabled.
+                optionsCookiesMenuItem.setIcon(R.drawable.cookies_enabled);
+            } else {  // Cookies are disabled.
                 if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
-                    optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_day);
+                    optionsCookiesMenuItem.setIcon(R.drawable.cookies_disabled_day);
                 } else {
-                    optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_night);
+                    optionsCookiesMenuItem.setIcon(R.drawable.cookies_disabled_night);
                 }
             }
 
@@ -5060,8 +5012,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Get a handle for the cookie manager.
             CookieManager cookieManager = CookieManager.getInstance();
 
-            // Set the first-party cookie status.
-            cookieManager.setAcceptCookie(currentWebView.getAcceptFirstPartyCookies());
+            // Set the cookie status.
+            cookieManager.setAcceptCookie(currentWebView.getAcceptCookies());
 
             // Update the privacy icons.  `true` redraws the icons in the app bar.
             updatePrivacyIcons(true);
@@ -5357,7 +5309,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
             // Instantiate the save dialog.
             DialogFragment saveDialogFragment = SaveWebpageDialog.saveWebpage(SaveWebpageDialog.SAVE_URL, downloadUrl, formattedFileSizeString, fileNameString, userAgent,
-                    nestedScrollWebView.getAcceptFirstPartyCookies());
+                    nestedScrollWebView.getAcceptCookies());
 
             // Show the save dialog.  It must be named `save_dialog` so that the file picker can update the file name.
             saveDialogFragment.show(getSupportFragmentManager(), getString(R.string.save_dialog));
@@ -6187,7 +6139,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             @Override
             public void onPageFinished(WebView view, String url) {
                 // Flush any cookies to persistent storage.  The cookie manager has become very lazy about flushing cookies in recent versions.
-                if (nestedScrollWebView.getAcceptFirstPartyCookies() && Build.VERSION.SDK_INT >= 21) {
+                if (nestedScrollWebView.getAcceptCookies() && Build.VERSION.SDK_INT >= 21) {
                     CookieManager.getInstance().flush();
                 }
 
index e10af110cfa815faa2adbe6b6dc3eac8ba4a40f7..d2809b541097aa2ea3cf538ce2920faeb5083e33 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -120,11 +120,8 @@ public class DomainSettingsFragment extends Fragment {
         EditText domainNameEditText = domainSettingsView.findViewById(R.id.domain_settings_name_edittext);
         ImageView javaScriptImageView = domainSettingsView.findViewById(R.id.javascript_imageview);
         SwitchCompat javaScriptSwitch = domainSettingsView.findViewById(R.id.javascript_switch);
-        ImageView firstPartyCookiesImageView = domainSettingsView.findViewById(R.id.first_party_cookies_imageview);
-        SwitchCompat firstPartyCookiesSwitch = domainSettingsView.findViewById(R.id.first_party_cookies_switch);
-        LinearLayout thirdPartyCookiesLinearLayout = domainSettingsView.findViewById(R.id.third_party_cookies_linearlayout);
-        ImageView thirdPartyCookiesImageView = domainSettingsView.findViewById(R.id.third_party_cookies_imageview);
-        SwitchCompat thirdPartyCookiesSwitch = domainSettingsView.findViewById(R.id.third_party_cookies_switch);
+        ImageView cookiesImageView = domainSettingsView.findViewById(R.id.cookies_imageview);
+        SwitchCompat cookiesSwitch = domainSettingsView.findViewById(R.id.cookies_switch);
         ImageView domStorageImageView = domainSettingsView.findViewById(R.id.dom_storage_imageview);
         SwitchCompat domStorageSwitch = domainSettingsView.findViewById(R.id.dom_storage_switch);
         ImageView formDataImageView = domainSettingsView.findViewById(R.id.form_data_imageview);  // The form data views can be remove once the minimum API >= 26.
@@ -214,8 +211,7 @@ public class DomainSettingsFragment extends Fragment {
         // Save the cursor entries as variables.
         String domainNameString = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.DOMAIN_NAME));
         int javaScriptInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_JAVASCRIPT));
-        int firstPartyCookiesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES));
-        int thirdPartyCookiesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES));
+        int cookiesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.COOKIES));
         int domStorageInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_DOM_STORAGE));
         int formDataInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA));  // Form data can be remove once the minimum API >= 26.
         int easyListInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_EASYLIST));
@@ -382,65 +378,28 @@ public class DomainSettingsFragment extends Fragment {
             javaScriptImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.privacy_mode, null));
         }
 
-        // Set the first-party cookies status.  Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
-        if (firstPartyCookiesInt == 1) {  // First-party cookies are enabled.
-            firstPartyCookiesSwitch.setChecked(true);
-            firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_enabled, null));
-        } else {  // First-party cookies are disabled.
-            firstPartyCookiesSwitch.setChecked(false);
+        // Set the cookies switch status.  Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
+        if (cookiesInt == 1) {  // Cookies are enabled.
+            // Turn the switch on.
+            cookiesSwitch.setChecked(true);
+
+            // Set the icon.
+            cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_enabled, null));
+        } else {  // Cookies are disabled.
+            // Turn the switch off
+            cookiesSwitch.setChecked(false);
 
             // Set the icon according to the theme.
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+                cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
             } else {
-                firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
+                cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
             }
         }
 
-        // Only display third-party cookies if SDK_INT >= 21.
-        if (Build.VERSION.SDK_INT >= 21) {  // Third-party cookies can be configured for API >= 21.
-            // Only enable third-party-cookies if first-party cookies are enabled.
-            if (firstPartyCookiesInt == 1) {  // First-party cookies are enabled.
-                // Set the third-party cookies status.  Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
-                if (thirdPartyCookiesInt == 1) {  // Both first-party and third-party cookies are enabled.
-                    // Set the third-party cookies switch to be checked.
-                    thirdPartyCookiesSwitch.setChecked(true);
-
-                    // Set the icon to be red.
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_warning, null));
-                } else {  // First party cookies are enabled but third-party cookies are disabled.
-                    // Set the third-party cookies switch to be checked.
-                    thirdPartyCookiesSwitch.setChecked(false);
-
-                    // Set the icon according to the theme.
-                    if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                        thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
-                    } else {
-                        thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
-                    }
-                }
-            } else {  // First-party cookies are disabled.
-                // Set the status of third-party cookies.
-                thirdPartyCookiesSwitch.setChecked(thirdPartyCookiesInt == 1);
-
-                // Disable the third-party cookies switch.
-                thirdPartyCookiesSwitch.setEnabled(false);
-
-                // Set the icon according to the theme.
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_ghosted_night, null));
-                } else {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_ghosted_day, null));
-                }
-            }
-        } else {  // Third-party cookies cannot be configured for API <= 21.
-            // Hide the LinearLayout for third-party cookies.
-            thirdPartyCookiesLinearLayout.setVisibility(View.GONE);
-        }
-
         // Only enable DOM storage if JavaScript is enabled.
         if (javaScriptInt == 1) {  // JavaScript is enabled.
-            // Enable the DOM storage `Switch`.
+            // Enable the DOM storage switch.
             domStorageSwitch.setEnabled(true);
 
             // Set the DOM storage status.  Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons.
@@ -1390,59 +1349,17 @@ public class DomainSettingsFragment extends Fragment {
             }
         });
 
-        // Set the first-party cookies switch listener.
-        firstPartyCookiesSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
-            if (isChecked) {  // First-party cookies are enabled.
-                // Update the first-party cookies icon.
-                firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_enabled, null));
-
-                // Enable the third-party cookies switch.
-                thirdPartyCookiesSwitch.setEnabled(true);
-
-                // Update the third-party cookies icon.
-                if (thirdPartyCookiesSwitch.isChecked()) {  // Third-party cookies are enabled.
-                    // Set the third-party cookies icon to be red.
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_warning, null));
-                } else {  // Third-party cookies are disabled.
-                    // Set the third-party cookies icon according to the theme.
-                    if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                        thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
-                    } else {
-                        thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
-                    }
-                }
-            } else {  // First-party cookies are disabled.
-                // Update the first-party cookies icon according to the theme.
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
-                } else {
-                    firstPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
-                }
-
-                // Disable the third-party cookies switch.
-                thirdPartyCookiesSwitch.setEnabled(false);
-
-                // Set the third-party cookies icon according to the theme.
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_ghosted_night, null));
-                } else {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_ghosted_day, null));
-                }
-            }
-        });
-
-        // Set the third-party cookies switch listener.
-        thirdPartyCookiesSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
-            // Update the icon.
-            if (isChecked) {
-                // Set the third-party cookies icon to be red.
-                thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_warning, null));
-            } else {
-                // Update the third-party cookies icon according to the theme.
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
+        // Set the cookies switch listener.
+        cookiesSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> {
+            if (isChecked) {  // Cookies are enabled.
+                // Update the cookies icon.
+                cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_enabled, null));
+            } else {  // Cookies are disabled.
+                // Update the cookies icon according to the theme.
+                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+                    cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
                 } else {
-                    thirdPartyCookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_day, null));
+                    cookiesImageView.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.cookies_disabled_night, null));
                 }
             }
         });
index ef0f1b9af4a34f68e6af62cd1418b9521991b697..486a70534d99d542f5e443b04269e597624f748d 100644 (file)
@@ -73,8 +73,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
         // Get handles for the preferences.
         Preference javaScriptPreference = findPreference("javascript");
-        Preference firstPartyCookiesPreference = findPreference("first_party_cookies");
-        Preference thirdPartyCookiesPreference = findPreference("third_party_cookies");
+        Preference cookiesPreference = findPreference(getString(R.string.cookies_key));
         Preference domStoragePreference = findPreference("dom_storage");
         Preference formDataPreference = findPreference("save_form_data");  // The form data preference can be removed once the minimum API >= 26.
         Preference userAgentPreference = findPreference("user_agent");
@@ -116,8 +115,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
         // Remove the lint warnings below that the preferences might be null.
         assert javaScriptPreference != null;
-        assert firstPartyCookiesPreference != null;
-        assert thirdPartyCookiesPreference != null;
+        assert cookiesPreference != null;
         assert domStoragePreference != null;
         assert formDataPreference != null;
         assert userAgentPreference != null;
@@ -168,15 +166,11 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
         // Get booleans that are used in multiple places from the preferences.
         boolean javaScriptEnabled = savedPreferences.getBoolean("javascript", false);
-        boolean firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies", false);
         boolean fanboyAnnoyanceListEnabled = savedPreferences.getBoolean("fanboys_annoyance_list", true);
         boolean fanboySocialBlockingEnabled = savedPreferences.getBoolean("fanboys_social_blocking_list", true);
         boolean fullScreenBrowsingMode = savedPreferences.getBoolean("full_screen_browsing_mode", false);
         boolean clearEverything = savedPreferences.getBoolean("clear_everything", true);
 
-        // Only enable the third-party cookies preference if first-party cookies are enabled and API >= 21.
-        thirdPartyCookiesPreference.setEnabled(firstPartyCookiesEnabled && (Build.VERSION.SDK_INT >= 21));
-
         // Remove the form data preferences if the API is >= 26 as they no longer do anything.
         if (Build.VERSION.SDK_INT >= 26) {
             // Get handles for the categories.
@@ -375,33 +369,14 @@ public class SettingsFragment extends PreferenceFragmentCompat {
             javaScriptPreference.setIcon(R.drawable.privacy_mode);
         }
 
-        // Set the first-party cookies icon.
-        if (firstPartyCookiesEnabled) {
-            firstPartyCookiesPreference.setIcon(R.drawable.cookies_enabled);
-        } else {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
-            } else {
-                firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
-            }
-        }
-
-        // Set the third party cookies icon.
-        if (firstPartyCookiesEnabled && Build.VERSION.SDK_INT >= 21) {
-            if (savedPreferences.getBoolean("third_party_cookies", false)) {
-                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_warning);
-            } else {
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
-                } else {
-                    thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
-                }
-            }
+        // Set the cookies icon.
+        if (savedPreferences.getBoolean(getString(R.string.cookies_key), false)) {
+            cookiesPreference.setIcon(R.drawable.cookies_enabled);
         } else {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_night);
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+                cookiesPreference.setIcon(R.drawable.cookies_disabled_day);
             } else {
-                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_day);
+                cookiesPreference.setIcon(R.drawable.cookies_disabled_night);
             }
         }
 
@@ -410,17 +385,17 @@ public class SettingsFragment extends PreferenceFragmentCompat {
             if (savedPreferences.getBoolean("dom_storage", false)) {  // DOM storage is enabled.
                 domStoragePreference.setIcon(R.drawable.dom_storage_enabled);
             } else {  // DOM storage is disabled.
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
-                } else {
+                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                     domStoragePreference.setIcon(R.drawable.dom_storage_disabled_day);
+                } else {
+                    domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
                 }
             }
         } else {  // The preference is disabled.  The icon should be ghosted.
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_night);
-            } else {
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                 domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_day);
+            } else {
+                domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_night);
             }
         }
 
@@ -429,26 +404,26 @@ public class SettingsFragment extends PreferenceFragmentCompat {
             if (savedPreferences.getBoolean("save_form_data", false)) {
                 formDataPreference.setIcon(R.drawable.form_data_enabled);
             } else {
-                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                    formDataPreference.setIcon(R.drawable.form_data_disabled_night);
-                } else {
+                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                     formDataPreference.setIcon(R.drawable.form_data_disabled_day);
+                } else {
+                    formDataPreference.setIcon(R.drawable.form_data_disabled_night);
                 }
             }
         }
 
         // Set the custom user agent icon.
         if (customUserAgentPreference.isEnabled()) {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled_night);
-            } else {
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                 customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled_day);
+            } else {
+                customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled_night);
             }
         } else {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_night);
-            } else {
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                 customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_day);
+            } else {
+                customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_night);
             }
         }
 
@@ -733,10 +708,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
         // Set the clear everything preference icon.
         if (clearEverything) {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_night);
-            } else {
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                 clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_day);
+            } else {
+                clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_night);
             }
         } else {
             clearEverythingPreference.setIcon(R.drawable.clear_everything_disabled);
@@ -744,10 +719,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
         // Set the clear cookies preference icon.
         if (clearEverything || savedPreferences.getBoolean("clear_cookies", true)) {
-            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
-            } else {
+            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                 clearCookiesPreference.setIcon(R.drawable.cookies_cleared_day);
+            } else {
+                clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
             }
         } else {
             clearCookiesPreference.setIcon(R.drawable.cookies_warning);
@@ -935,10 +910,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                         if (sharedPreferences.getBoolean("dom_storage", false)) {
                             domStoragePreference.setIcon(R.drawable.dom_storage_enabled);
                         } else {
-                            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                                domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
-                            } else {
+                            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                                 domStoragePreference.setIcon(R.drawable.dom_storage_disabled_day);
+                            } else {
+                                domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
                             }
                         }
                     } else {  // The JavaScript preference is disabled.
@@ -949,67 +924,23 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                         domStoragePreference.setEnabled(false);
 
                         // Set the icon for DOM storage preference to be ghosted.
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_day);
-                        }
-                    }
-                    break;
-
-                case "first_party_cookies":
-                    // Update the icons for `first_party_cookies` and `third_party_cookies`.
-                    if (sharedPreferences.getBoolean("first_party_cookies", false)) {
-                        // Set the icon for `first_party_cookies`.
-                        firstPartyCookiesPreference.setIcon(R.drawable.cookies_enabled);
-
-                        // Update the icon for `third_party_cookies`.
-                        if (Build.VERSION.SDK_INT >= 21) {
-                            if (sharedPreferences.getBoolean("third_party_cookies", false)) {
-                                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_warning);
-                            } else {
-                                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                                    thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
-                                } else {
-                                    thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
-                                }
-                            }
                         } else {
-                            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_night);
-                            } else {
-                                thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_day);
-                            }
-                        }
-                    } else {  // `first_party_cookies` is `false`.
-                        // Update the icon for `first_party_cookies`.
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
-                        } else {
-                            firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
-                        }
-
-                        // Set the icon for `third_party_cookies` to be ghosted.
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_night);
-                        } else {
-                            thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_day);
+                            domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_night);
                         }
                     }
-
-                    // Enable `third_party_cookies` if `first_party_cookies` is `true` and API >= 21.
-                    thirdPartyCookiesPreference.setEnabled(sharedPreferences.getBoolean("first_party_cookies", false) && (Build.VERSION.SDK_INT >= 21));
                     break;
 
-                case "third_party_cookies":
+                case "cookies":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean("third_party_cookies", false)) {
-                        thirdPartyCookiesPreference.setIcon(R.drawable.cookies_warning);
+                    if (sharedPreferences.getBoolean(getString(R.string.cookies_key), false)) {
+                        cookiesPreference.setIcon(R.drawable.cookies_enabled);
                     } else {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+                            cookiesPreference.setIcon(R.drawable.cookies_disabled_day);
                         } else {
-                            thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
+                            cookiesPreference.setIcon(R.drawable.cookies_disabled_night);
                         }
                     }
                     break;
@@ -1019,10 +950,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                     if (sharedPreferences.getBoolean("dom_storage", false)) {
                         domStoragePreference.setIcon(R.drawable.dom_storage_enabled);
                     } else {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             domStoragePreference.setIcon(R.drawable.dom_storage_disabled_day);
+                        } else {
+                            domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
                         }
                     }
                     break;
@@ -1033,10 +964,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                     if (sharedPreferences.getBoolean("save_form_data", false)) {
                         formDataPreference.setIcon(R.drawable.form_data_enabled);
                     } else {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            formDataPreference.setIcon(R.drawable.form_data_disabled_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             formDataPreference.setIcon(R.drawable.form_data_disabled_day);
+                        } else {
+                            formDataPreference.setIcon(R.drawable.form_data_disabled_night);
                         }
                     }
                     break;
@@ -1545,10 +1476,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                     // Update the clear everything preference icon.
                     if (newClearEverythingBoolean) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_day);
+                        } else {
+                            clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_night);
                         }
                     } else {
                         clearEverythingPreference.setIcon(R.drawable.clear_everything_disabled);
@@ -1556,10 +1487,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                     // Update the clear cookies preference icon.
                     if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_cookies", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearCookiesPreference.setIcon(R.drawable.cookies_cleared_day);
+                        } else {
+                            clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
                         }
                     } else {
                         clearCookiesPreference.setIcon(R.drawable.cookies_warning);
@@ -1567,10 +1498,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                     // Update the clear dom storage preference icon.
                     if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_dom_storage", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_day);
+                        } else {
+                            clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
                         }
                     } else {
                         clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
@@ -1579,10 +1510,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                     // Update the clear form data preference icon if the API < 26.
                     if (Build.VERSION.SDK_INT < 26) {
                         if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_form_data", true)) {
-                            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
-                            } else {
+                            if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                                 clearFormDataPreference.setIcon(R.drawable.form_data_cleared_day);
+                            } else {
+                                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
                             }
                         } else {
                             clearFormDataPreference.setIcon(R.drawable.form_data_warning);
@@ -1602,10 +1533,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                     // Update the clear cache preference icon.
                     if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_cache", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearCachePreference.setIcon(R.drawable.cache_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearCachePreference.setIcon(R.drawable.cache_cleared_day);
+                        } else {
+                            clearCachePreference.setIcon(R.drawable.cache_cleared_night);
                         }
                     } else {
                         clearCachePreference.setIcon(R.drawable.cache_warning);
@@ -1615,10 +1546,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                 case "clear_cookies":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("clear_cookies", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearCookiesPreference.setIcon(R.drawable.cookies_cleared_day);
+                        } else {
+                            clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
                         }
                     } else {
                         clearCookiesPreference.setIcon(R.drawable.cookies_warning);
@@ -1628,10 +1559,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                 case "clear_dom_storage":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("clear_dom_storage", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_day);
+                        } else {
+                            clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
                         }
                     } else {
                         clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
@@ -1642,10 +1573,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                 case "clear_form_data":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("clear_form_data", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearFormDataPreference.setIcon(R.drawable.form_data_cleared_day);
+                        } else {
+                            clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
                         }
                     } else {
                         clearFormDataPreference.setIcon(R.drawable.form_data_warning);
@@ -1668,10 +1599,10 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                 case "clear_cache":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("clear_cache", true)) {
-                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
-                            clearCachePreference.setIcon(R.drawable.cache_cleared_night);
-                        } else {
+                        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                             clearCachePreference.setIcon(R.drawable.cache_cleared_day);
+                        } else {
+                            clearCachePreference.setIcon(R.drawable.cache_cleared_night);
                         }
                     } else {
                         clearCachePreference.setIcon(R.drawable.cache_warning);
index e58997c3d3c5ebab9b3d4644b11b18c9f3021b33..6e8fc943b4a080775199995d1bad2ccb6838ba6c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -27,16 +27,17 @@ import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.preference.PreferenceManager;
 
+import com.stoutner.privacybrowser.R;
+
 public class DomainsDatabaseHelper extends SQLiteOpenHelper {
-    private static final int SCHEMA_VERSION = 12;
+    private static final int SCHEMA_VERSION = 13;
     static final String DOMAINS_DATABASE = "domains.db";
     static final String DOMAINS_TABLE = "domains";
 
     public static final String _ID = "_id";
     public static final String DOMAIN_NAME = "domainname";
     public static final String ENABLE_JAVASCRIPT = "enablejavascript";
-    public static final String ENABLE_FIRST_PARTY_COOKIES = "enablefirstpartycookies";
-    public static final String ENABLE_THIRD_PARTY_COOKIES = "enablethirdpartycookies";
+    public static final String COOKIES = "cookies";
     public static final String ENABLE_DOM_STORAGE = "enabledomstorage";
     public static final String ENABLE_FORM_DATA = "enableformdata";  // Form data can be removed once the minimum API >= 26.
     public static final String ENABLE_EASYLIST = "enableeasylist";
@@ -75,8 +76,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper {
             _ID + " INTEGER PRIMARY KEY, " +
             DOMAIN_NAME + " TEXT, " +
             ENABLE_JAVASCRIPT + " BOOLEAN, " +
-            ENABLE_FIRST_PARTY_COOKIES + " BOOLEAN, " +
-            ENABLE_THIRD_PARTY_COOKIES + " BOOLEAN, " +
+            COOKIES + " BOOLEAN, " +
             ENABLE_DOM_STORAGE + " BOOLEAN, " +
             ENABLE_FORM_DATA + " BOOLEAN, " +
             ENABLE_EASYLIST + " BOOLEAN, " +
@@ -236,6 +236,14 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper {
 
                 // SQLite amazingly doesn't include an easy command to delete a column.  <https://www.sqlite.org/lang_altertable.html>
                 // Although a new table could be created and all the data copied to it, I think I will just leave the old night mode column.  It will be wiped out the next time an import is run.
+
+            // Upgrade from schema version 12.
+            case 12:
+                // Add the cookies column.
+                domainsDatabase.execSQL("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + COOKIES + " BOOLEAN");
+
+                // Copy the data from the old column to the new one.
+                domainsDatabase.execSQL("UPDATE " + DOMAINS_TABLE + " SET " + COOKIES + " = enablefirstpartycookies");
         }
     }
 
@@ -304,8 +312,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper {
 
         // Get the default settings.
         boolean javaScript = sharedPreferences.getBoolean("javascript", false);
-        boolean firstPartyCookies = sharedPreferences.getBoolean("first_party_cookies", false);
-        boolean thirdPartyCookies = sharedPreferences.getBoolean("third_party_cookies", false);
+        boolean cookies = sharedPreferences.getBoolean(appContext.getString(R.string.cookies_key), false);
         boolean domStorage = sharedPreferences.getBoolean("dom_storage", false);
         boolean saveFormData = sharedPreferences.getBoolean("save_form_data", false);  // Form data can be removed once the minimum API >= 26.
         boolean easyList = sharedPreferences.getBoolean("easylist", true);
@@ -319,8 +326,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper {
         // Create entries for the database fields.  The ID is created automatically.  The pinned SSL certificate information is not created unless added by the user.
         domainContentValues.put(DOMAIN_NAME, domainName);
         domainContentValues.put(ENABLE_JAVASCRIPT, javaScript);
-        domainContentValues.put(ENABLE_FIRST_PARTY_COOKIES, firstPartyCookies);
-        domainContentValues.put(ENABLE_THIRD_PARTY_COOKIES, thirdPartyCookies);
+        domainContentValues.put(COOKIES, cookies);
         domainContentValues.put(ENABLE_DOM_STORAGE, domStorage);
         domainContentValues.put(ENABLE_FORM_DATA, saveFormData);  // Form data can be removed once the minimum API >= 26.
         domainContentValues.put(ENABLE_EASYLIST, easyList);
@@ -361,18 +367,17 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper {
         domainsDatabase.close();
     }
 
-    public void updateDomain(int databaseId, String domainName, boolean javaScript, boolean firstPartyCookies, boolean thirdPartyCookies, boolean domStorage, boolean formData, boolean easyList,
-                             boolean easyPrivacy, boolean fanboysAnnoyance, boolean fanboysSocialBlocking, boolean ultraList, boolean ultraPrivacy, boolean blockAllThirdPartyRequests, String userAgent,
-                             int fontSize, int swipeToRefresh, int webViewTheme, int wideViewport, int displayImages, boolean pinnedSslCertificate, boolean pinnedIpAddresses) {
+    public void updateDomain(int databaseId, String domainName, boolean javaScript, boolean cookies, boolean domStorage, boolean formData, boolean easyList, boolean easyPrivacy, boolean fanboysAnnoyance,
+                             boolean fanboysSocialBlocking, boolean ultraList, boolean ultraPrivacy, boolean blockAllThirdPartyRequests, String userAgent, int fontSize, int swipeToRefresh, int webViewTheme,
+                             int wideViewport, int displayImages, boolean pinnedSslCertificate, boolean pinnedIpAddresses) {
 
-        // Store the domain data in a `ContentValues`.
+        // Store the domain data in a content values.
         ContentValues domainContentValues = new ContentValues();
 
         // Add entries for each field in the database.
         domainContentValues.put(DOMAIN_NAME, domainName);
         domainContentValues.put(ENABLE_JAVASCRIPT, javaScript);
-        domainContentValues.put(ENABLE_FIRST_PARTY_COOKIES, firstPartyCookies);
-        domainContentValues.put(ENABLE_THIRD_PARTY_COOKIES, thirdPartyCookies);
+        domainContentValues.put(COOKIES, cookies);
         domainContentValues.put(ENABLE_DOM_STORAGE, domStorage);
         domainContentValues.put(ENABLE_FORM_DATA, formData);  // Form data can be removed once the minimum API >= 26.
         domainContentValues.put(ENABLE_EASYLIST, easyList);
index b1aa0c61f61cc2edd07dd81eeadaa1fa893e66eb..22968adcf23591f8f272501fec77f68969c0684e 100644 (file)
@@ -47,8 +47,7 @@ public class ImportExportDatabaseHelper {
     // Declare the preferences constants.
     private static final String _ID = "_id";
     private static final String JAVASCRIPT = "javascript";
-    private static final String FIRST_PARTY_COOKIES = "first_party_cookies";
-    private static final String THIRD_PARTY_COOKIES = "third_party_cookies";
+    private static final String COOKIES = "cookies";
     private static final String DOM_STORAGE = "dom_storage";
     private static final String SAVE_FORM_DATA = "save_form_data";
     private static final String USER_AGENT = "user_agent";
@@ -133,30 +132,15 @@ public class ImportExportDatabaseHelper {
 
                     // Upgrade from schema version 2, Privacy Browser 2.14.
                     case 2:
-                        // Once the SQLite version is >= 3.25.0 `ALTER TABLE RENAME COLUMN` can be used.  https://www.sqlite.org/lang_altertable.html  https://www.sqlite.org/changes.html
-                        // https://developer.android.com/reference/android/database/sqlite/package-summary
+                        // Once the SQLite version is >= 3.25.0 `ALTER TABLE RENAME COLUMN` can be used.  <https://www.sqlite.org/lang_altertable.html> <https://www.sqlite.org/changes.html>
+                        // <https://developer.android.com/reference/android/database/sqlite/package-summary>
                         // In the meantime, a new column must be created with the new name.  There is no need to delete the old column on the temporary import database.
 
-                        // Get a cursor with the current `default_font_size` value.
-                        Cursor importDatabasePreferenceCursor = importDatabase.rawQuery("SELECT default_font_size FROM " + PREFERENCES_TABLE, null);
-
-                        // Move to the beginning fo the cursor.
-                        importDatabasePreferenceCursor.moveToFirst();
-
-                        // Get the current value in `default_font_size`.
-                        String fontSize = importDatabasePreferenceCursor.getString(importDatabasePreferenceCursor.getColumnIndex("default_font_size"));
-
-                        // SQL escape the font size.
-                        fontSize = DatabaseUtils.sqlEscapeString(fontSize);
-
-                        // Close the cursor.
-                        importDatabasePreferenceCursor.close();
-
                         // Create the new font size column.
                         importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + FONT_SIZE + " TEXT");
 
                         // Populate the preferences table with the current font size value.
-                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + FONT_SIZE + " = '" + fontSize + "'");
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + FONT_SIZE + " = default_font_size");
 
                     // Upgrade from schema version 3, Privacy Browser 2.15.
                     case 3:
@@ -347,11 +331,22 @@ public class ImportExportDatabaseHelper {
 
                     // Upgrade from schema version 13, Privacy Browser 3.7
                     case 13:
-                        // Do nothing.  `do_not_track` was removed from the preferences table.
+                        // `enabledthirdpartycookies` was removed from the domains table.  `do_not_track` and `third_party_cookies` were removed from the preferences table.
+
+                        // Once the SQLite version is >= 3.25.0 `ALTER TABLE RENAME COLUMN` can be used.  <https://www.sqlite.org/lang_altertable.html> <https://www.sqlite.org/changes.html>
+                        // <https://developer.android.com/reference/android/database/sqlite/package-summary>
+                        // In the meantime, a new column must be created with the new name.  There is no need to delete the old column on the temporary import database.
+
+                        // Create the new cookies columns.
+                        importDatabase.execSQL("ALTER TABLE " + DomainsDatabaseHelper.DOMAINS_TABLE + " ADD COLUMN " + DomainsDatabaseHelper.COOKIES + " BOOLEAN");
+                        importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + COOKIES + " BOOLEAN");
+
+                        // Copy the data from the old cookies columns to the new ones.
+                        importDatabase.execSQL("UPDATE " + DomainsDatabaseHelper.DOMAINS_TABLE + " SET " + DomainsDatabaseHelper.COOKIES + " = enablefirstpartycookies");
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + COOKIES + " = first_party_cookies");
                 }
             }
 
-
             // Get a cursor for the bookmarks table.
             Cursor importBookmarksCursor = importDatabase.rawQuery("SELECT * FROM " + BookmarksDatabaseHelper.BOOKMARKS_TABLE, null);
 
@@ -407,8 +402,7 @@ public class ImportExportDatabaseHelper {
                 ContentValues domainsContentValues = new ContentValues();
                 domainsContentValues.put(DomainsDatabaseHelper.DOMAIN_NAME, importDomainsCursor.getString(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.DOMAIN_NAME)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_JAVASCRIPT, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_JAVASCRIPT)));
-                domainsContentValues.put(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES)));
-                domainsContentValues.put(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES)));
+                domainsContentValues.put(DomainsDatabaseHelper.COOKIES, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.COOKIES)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_DOM_STORAGE, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_DOM_STORAGE)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_FORM_DATA, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_EASYLIST, importDomainsCursor.getInt(importDomainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_EASYLIST)));
@@ -464,8 +458,7 @@ public class ImportExportDatabaseHelper {
             // Import the preference data.
             sharedPreferences.edit()
                     .putBoolean(JAVASCRIPT, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(JAVASCRIPT)) == 1)
-                    .putBoolean(FIRST_PARTY_COOKIES, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(FIRST_PARTY_COOKIES)) == 1)
-                    .putBoolean(THIRD_PARTY_COOKIES, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(THIRD_PARTY_COOKIES)) == 1)
+                    .putBoolean(COOKIES, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(COOKIES)) == 1)
                     .putBoolean(DOM_STORAGE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(DOM_STORAGE)) == 1)
                     // Save form data can be removed once the minimum API >= 26.
                     .putBoolean(SAVE_FORM_DATA, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(SAVE_FORM_DATA)) == 1)
@@ -590,8 +583,7 @@ public class ImportExportDatabaseHelper {
                 ContentValues domainsContentValues = new ContentValues();
                 domainsContentValues.put(DomainsDatabaseHelper.DOMAIN_NAME, domainsCursor.getString(domainsCursor.getColumnIndex(DomainsDatabaseHelper.DOMAIN_NAME)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_JAVASCRIPT, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_JAVASCRIPT)));
-                domainsContentValues.put(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FIRST_PARTY_COOKIES)));
-                domainsContentValues.put(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_THIRD_PARTY_COOKIES)));
+                domainsContentValues.put(DomainsDatabaseHelper.COOKIES, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.COOKIES)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_DOM_STORAGE, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_DOM_STORAGE)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_FORM_DATA, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FORM_DATA)));
                 domainsContentValues.put(DomainsDatabaseHelper.ENABLE_EASYLIST, domainsCursor.getInt(domainsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_EASYLIST)));
@@ -635,8 +627,7 @@ public class ImportExportDatabaseHelper {
             String CREATE_PREFERENCES_TABLE = "CREATE TABLE " + PREFERENCES_TABLE + " (" +
                     _ID + " INTEGER PRIMARY KEY, " +
                     JAVASCRIPT + " BOOLEAN, " +
-                    FIRST_PARTY_COOKIES + " BOOLEAN, " +
-                    THIRD_PARTY_COOKIES + " BOOLEAN, " +
+                    COOKIES + " BOOLEAN, " +
                     DOM_STORAGE + " BOOLEAN, " +
                     SAVE_FORM_DATA + " BOOLEAN, " +
                     USER_AGENT + " TEXT, " +
@@ -685,8 +676,7 @@ public class ImportExportDatabaseHelper {
             // Create a ContentValues with the preferences information.
             ContentValues preferencesContentValues = new ContentValues();
             preferencesContentValues.put(JAVASCRIPT, sharedPreferences.getBoolean(JAVASCRIPT, false));
-            preferencesContentValues.put(FIRST_PARTY_COOKIES, sharedPreferences.getBoolean(FIRST_PARTY_COOKIES, false));
-            preferencesContentValues.put(THIRD_PARTY_COOKIES, sharedPreferences.getBoolean(THIRD_PARTY_COOKIES, false));
+            preferencesContentValues.put(COOKIES, sharedPreferences.getBoolean(COOKIES, false));
             preferencesContentValues.put(DOM_STORAGE, sharedPreferences.getBoolean(DOM_STORAGE, false));
             preferencesContentValues.put(SAVE_FORM_DATA, sharedPreferences.getBoolean(SAVE_FORM_DATA, false));  // Save form data can be removed once the minimum API >= 26.
             preferencesContentValues.put(USER_AGENT, sharedPreferences.getString(USER_AGENT, context.getString(R.string.user_agent_default_value)));
index dbaca12a0e0139d7b56c4647ee656f08cb117d10..5d6dc8620e9e546cd0ac0719db5861a218600a9c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019-2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2019-2021 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -60,7 +60,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     private final String DOMAIN_SETTINGS_DATABASE_ID = "domain_settings_database_id";
     private final String CURRENT_URl = "current_url";
     private final String CURRENT_DOMAIN_NAME = "current_domain_name";
-    private final String ACCEPT_FIRST_PARTY_COOKIES = "accept_first_party_cookies";
+    private final String ACCEPT_COOKIES = "accept_cookies";
     private final String EASYLIST_ENABLED = "easylist_enabled";
     private final String EASYPRIVACY_ENABLED = "easyprivacy_enabled";
     private final String FANBOYS_ANNOYANCE_LIST_ENABLED = "fanboys_annoyance_list_enabled";
@@ -104,8 +104,8 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     // Keep track of when the domain name changes so that domain settings can be reapplied.  This should never be null.
     private String currentDomainName = "";
 
-    // Track the status of first-party cookies.  This is necessary because first-party cookie status is app wide instead of WebView specific.
-    private boolean acceptFirstPartyCookies;
+    // Track the cookie status, which is necessary because cookie status is app wide instead of WebView specific.
+    private boolean acceptCookies;
 
     // Track the resource requests.
     private final List<String[]> resourceRequests = Collections.synchronizedList(new ArrayList<>());  // Using a synchronized list makes adding resource requests thread safe.
@@ -289,15 +289,15 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     }
 
 
-    // First-party cookies.
-    public void setAcceptFirstPartyCookies(boolean status) {
-        // Store the accept first-party cookies status.
-        acceptFirstPartyCookies = status;
+    // Cookies.
+    public void setAcceptCookies(boolean status) {
+        // Store the accept cookies status.
+        acceptCookies = status;
     }
 
-    public boolean getAcceptFirstPartyCookies() {
-        // Return the accept first-party cookies status.
-        return acceptFirstPartyCookies;
+    public boolean getAcceptCookies() {
+        // Return the accept cookies status.
+        return acceptCookies;
     }
 
 
@@ -781,7 +781,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
         savedState.putInt(DOMAIN_SETTINGS_DATABASE_ID, domainSettingsDatabaseId);
         savedState.putString(CURRENT_URl, currentUrl);
         savedState.putString(CURRENT_DOMAIN_NAME, currentDomainName);
-        savedState.putBoolean(ACCEPT_FIRST_PARTY_COOKIES, acceptFirstPartyCookies);
+        savedState.putBoolean(ACCEPT_COOKIES, acceptCookies);
         savedState.putBoolean(EASYLIST_ENABLED, easyListEnabled);
         savedState.putBoolean(EASYPRIVACY_ENABLED, easyPrivacyEnabled);
         savedState.putBoolean(FANBOYS_ANNOYANCE_LIST_ENABLED, fanboysAnnoyanceListEnabled);
@@ -818,7 +818,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
         domainSettingsDatabaseId = savedState.getInt(DOMAIN_SETTINGS_DATABASE_ID);
         currentUrl = savedState.getString(CURRENT_URl);
         currentDomainName = savedState.getString(CURRENT_DOMAIN_NAME);
-        acceptFirstPartyCookies = savedState.getBoolean(ACCEPT_FIRST_PARTY_COOKIES);
+        acceptCookies = savedState.getBoolean(ACCEPT_COOKIES);
         easyListEnabled = savedState.getBoolean(EASYLIST_ENABLED);
         easyPrivacyEnabled = savedState.getBoolean(EASYPRIVACY_ENABLED);
         fanboysAnnoyanceListEnabled = savedState.getBoolean(FANBOYS_ANNOYANCE_LIST_ENABLED);
index d2b5efa724d7369146cd25fdf9cf823a10f3463f..0ff75b3ca06ae1a4dbe889db9b10b42bb9a7e68b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2017-2020 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
                 android:layout_marginStart="8dp"
                 android:layout_marginTop="14dp"
                 android:layout_marginBottom="14dp"
-                android:text="@string/javascript_enabled"
+                android:text="@string/javascript"
                 android:textColor="?android:textColorPrimary"
                 android:textSize="18sp" />
         </LinearLayout>
 
-        <!-- First-Party Cookies. -->
+        <!-- Cookies. -->
         <LinearLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent"
             android:orientation="horizontal" >
 
             <ImageView
-                android:id="@+id/first_party_cookies_imageview"
+                android:id="@+id/cookies_imageview"
                 android:layout_height="wrap_content"
                 android:layout_width="wrap_content"
                 android:layout_marginTop="1dp"
                 tools:ignore="contentDescription" />
 
             <androidx.appcompat.widget.SwitchCompat
-                android:id="@+id/first_party_cookies_switch"
+                android:id="@+id/cookies_switch"
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent"
                 android:layout_marginStart="8dp"
                 android:layout_marginTop="14dp"
                 android:layout_marginBottom="14dp"
-                android:text="@string/first_party_cookies_enabled"
-                android:textColor="?android:textColorPrimary"
-                android:textSize="18sp" />
-        </LinearLayout>
-
-        <!-- Third-Party Cookies. -->
-        <LinearLayout
-            android:id="@+id/third_party_cookies_linearlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:orientation="horizontal" >
-
-            <ImageView
-                android:id="@+id/third_party_cookies_imageview"
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:layout_marginTop="1dp"
-                android:layout_marginEnd="10dp"
-                android:layout_gravity="center_vertical"
-                android:src="@drawable/cookies_enabled"
-                tools:ignore="contentDescription" />
-
-            <androidx.appcompat.widget.SwitchCompat
-                android:id="@+id/third_party_cookies_switch"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:layout_marginStart="8dp"
-                android:layout_marginTop="14dp"
-                android:layout_marginBottom="14dp"
-                android:text="@string/third_party_cookies_enabled"
+                android:text="@string/cookies"
                 android:textColor="?android:textColorPrimary"
                 android:textSize="18sp" />
         </LinearLayout>
                 android:layout_marginStart="8dp"
                 android:layout_marginTop="14dp"
                 android:layout_marginBottom="14dp"
-                android:text="@string/dom_storage_enabled"
+                android:text="@string/dom_storage_preference"
                 android:textColor="?android:textColorPrimary"
                 android:textSize="18sp" />
         </LinearLayout>
                 android:layout_marginStart="8dp"
                 android:layout_marginTop="14dp"
                 android:layout_marginBottom="14dp"
-                android:text="@string/form_data_enabled"
+                android:text="@string/form_data"
                 android:textColor="?android:textColorPrimary"
                 android:textSize="18sp" />
         </LinearLayout>
index d294e57bf673728e307be16bd8457047542dda28..c1fb4ad2ae7404a28f525dde9179c318495e5609 100644 (file)
         app:showAsAction="never" />
 
     <item
-        android:id="@+id/first_party_cookies"
-        android:title="@string/first_party_cookies"
+        android:id="@+id/cookies"
+        android:title="@string/cookies"
         android:orderInCategory="400"
         android:checkable="true"
         android:icon="@drawable/cookies_disabled_day"
         app:showAsAction="never" />
 
-    <item
-        android:id="@+id/third_party_cookies"
-        android:title="@string/third_party_cookies"
-        android:orderInCategory="500"
-        android:checkable="true"
-        app:showAsAction="never" />
-
     <item
         android:id="@+id/dom_storage"
         android:title="@string/dom_storage"
index 362a01dc3e3c6c74eaa9fe8263a90aaa4b07ee4d..bf5f6e32d59d59c0b20315ee8c27ce7ad3544e84 100644 (file)
     <string name="privacy_mode">Privater Modus</string>
     <string name="javascript_enabled">JavaScript aktiviert</string>
     <string name="javascript_disabled">JavaScript deaktiviert</string>
-    <string name="first_party_cookies_enabled">Erstanbieter-Cookies aktiviert</string>
-    <string name="first_party_cookies_disabled">Erstanbieter-Cookies deaktiviert</string>
-    <string name="third_party_cookies_enabled">Drittanbieter-Cookies aktiviert</string>
-    <string name="third_party_cookies_disabled">Drittanbieter-Cookies deaktiviert</string>
     <string name="dom_storage_enabled">DOM-Speicher aktiviert</string>
     <string name="dom_storage_disabled">DOM-Speicher deaktiviert</string>
     <string name="form_data_enabled">Formulardaten aktiviert</string>
     <string name="javascript">JavaScript</string>
     <string name="refresh">Aktualisieren</string>
     <string name="stop">Stop</string>
-    <string name="first_party_cookies">Erstanbieter-Cookies</string>
-    <string name="third_party_cookies">Drittanbieter-Cookies</string>
     <string name="dom_storage">DOM-Speicher</string>
     <string name="form_data">Formulardaten</string>
     <string name="clear_data">Daten löschen</string>
     <string name="privacy">Privatsphäre</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript ermöglicht es Websites, Programme (Scripts) auf Ihrem Gerät auszuführen.</string>
-        <string name="first_party_cookies_preference">Erstanbieter-Cookies</string>
-        <string name="first_party_cookies_preference_summary">Da die Cookie-Einstellungen App-weit gelten, werden, wenn im aktiven Tab Cookies erlaubt sind,
-            auch in den Hintergrund-Tabs Cookies der dort angezeigten Seiten und deren Domains angenommen.
-            Unter Android KitKat (version 4.4.x) wird nicht zwischen Cookies und Drittanbieter-Cookies unterschieden,
-            sodass in dieser Version mit dieser Einstellung beide Cookie-Varianten aktiviert werden.</string>
-        <string name="third_party_cookies_preference">Drittanbieter-Cookies</string>
-        <string name="third_party_cookies_summary">Diese Option benötigt Android Lollipop (Version 5.0) oder höher. Sie hat keine Auswirkungen, wenn Erstanbieter-Cookies deaktiviert sind.</string>
         <string name="dom_storage_preference">DOM-Speicher</string>
-        <string name="dom_storage_preference_summary">JavaScript muss für die Funktionalität des DOM-Speichers aktiviert sein.</string>
         <string name="save_form_data_preference">Formulardaten</string>
         <string name="save_form_data_preference_summary">Mit gespeicherten Formulardaten können Formularfelder auf Websites automatisch ausgefüllt werden.</string>
         <string name="user_agent">User Agent</string>
         <!-- The form data part of this string can be removed once the minimum API >= 26. -->
         <string name="clear_everything_summary">Löscht Cookies, DOM-Storage, Formular-Daten, das Logcat Systemlogbuch und den WebView-Cache, sowie die gesamten “app_webview”- und “cache”-Ordner.</string>
         <string name="clear_cookies_preference">Cookies löschen</string>
-        <string name="clear_cookies_summary">Löscht Cookies und Drittanbieter-Cookies.</string>
         <string name="clear_dom_storage_preference">DOM Storage löschen</string>
         <string name="clear_dom_storage_summary">Löscht DOM storage (aka Web Storage oder Supercookies).</string>
         <string name="clear_form_data_preference">Formulardaten löschen</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index c957ab560a30bf307c9df7ff0c5f5cf8b1629226..d89e6fb44e462b042e6a3f47a23129af16b76438 100644 (file)
     <string name="privacy_mode">Modo Privado</string>
     <string name="javascript_enabled">Javascript habilitado</string>
     <string name="javascript_disabled">Javascript deshabilitado</string>
-    <string name="first_party_cookies_enabled">Cookies de primera parte habilitadas</string>
-    <string name="first_party_cookies_disabled">Cookies de primera parte deshabilitadas</string>
-    <string name="third_party_cookies_enabled">Cookies de terceras partes habilitadas</string>
-    <string name="third_party_cookies_disabled">Cookies de terceras partes deshabilitadas</string>
     <string name="dom_storage_enabled">Almacenamiento DOM habilitado</string>
     <string name="dom_storage_disabled">Almacenamiento DOM deshabilitado</string>
     <string name="form_data_enabled">Datos de formulario habilitados</string>
     <string name="javascript">Javascript</string>
     <string name="refresh">Actualizar</string>
     <string name="stop">Parar</string>
-    <string name="first_party_cookies">Cookies de primera parte</string>
-    <string name="third_party_cookies">Cookies de terceras partes</string>
     <string name="dom_storage">Almacenamiento DOM</string>
     <string name="form_data">Datos de formulario</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Borrar datos</string>
     <string name="privacy">Privacidad</string>
         <string name="javascript_preference">Javascript</string>
         <string name="javascript_preference_summary">Javascript permite a las webs ejecutar programas (scripts) en el dispositivo.</string>
-        <string name="first_party_cookies_preference">Cookies de primera parte</string>
-        <string name="first_party_cookies_preference_summary">Ya que las cookies de primera parte son una configuración de nivel de aplicación, cuando la pestaña activa tiene habilitadas las cookies,
-            cualquier solicitud de red realizada en segundo plano por otras pestañas también incluirá las cookies almacenadas para sus dominios.
-            Android KitKat (versión 4.4.x) no distingue entre cookies de primera y de terceras partes y las habilitará ambas con esta configuración.</string>
-        <string name="third_party_cookies_preference">Cookies de terceras partes</string>
-        <string name="third_party_cookies_summary">Este ajuste requiere Android Lollipop (versión 5.0) o mayor.  No tiene efecto si las cookies de primera parte están deshabilitadas.</string>
         <string name="dom_storage_preference">Almacenamiento DOM</string>
-        <string name="dom_storage_preference_summary">Javascript debe estar habilitado para que funcione el almacenamiento DOM.</string>
         <string name="save_form_data_preference">Datos de formulario</string>
         <string name="save_form_data_preference_summary">Los datos de formularios guardados pueden rellenar automáticamente las casillas o campos de las webs.</string>
         <string name="user_agent">Agente de usuario</string>
         <string name="clear_everything_summary">Borra cookies, almacenamiento DOM, datos de formulario, el logcat y la caché de  WebView.
             A continuación borra manualmente los directorios “app_webview” y “cache”.</string>
         <string name="clear_cookies_preference">Borrar cookies</string>
-        <string name="clear_cookies_summary">Borra las cookies de primera y terceras partes.</string>
         <string name="clear_dom_storage_preference">Borrar almacenamiento DOM</string>
         <string name="clear_dom_storage_summary">Borra el almacenamiento DOM.</string>
         <string name="clear_form_data_preference">Borrar datos de formulario</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index 214c99b76b8e6156e5576b17055e74c7b03a7e45..07e3f44b0c88cbb265649af3e10b295ea73a1267 100644 (file)
     <string name="privacy_mode">Mode privé</string>
     <string name="javascript_enabled">JavaScript activé</string>
     <string name="javascript_disabled">JavaScript désactivé</string>
-    <string name="first_party_cookies_enabled">Cookies internes activés</string>
-    <string name="first_party_cookies_disabled">Cookies internes désactivés</string>
-    <string name="third_party_cookies_enabled">Cookies tierces parties activés</string>
-    <string name="third_party_cookies_disabled">Cookies tierces parties désactivés</string>
     <string name="dom_storage_enabled">Stockage du DOM activé</string>
     <string name="dom_storage_disabled">Stockage du DOM désactivé</string>
     <string name="form_data_enabled">Données de formulaires activé</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="javascript">JavaScript</string>
     <string name="refresh">Rafraîchir</string>
     <string name="stop">Stop</string>
-    <string name="first_party_cookies">Cookies internes</string>
-    <string name="third_party_cookies">Cookies tiers</string>
     <string name="dom_storage">Stockage DOM</string>
     <string name="form_data">Formulaire de données</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Effacer les données</string>
     <string name="privacy">Vie privée</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript permet aux sites web de lancer des programmes (scripts) sur le terminal.</string>
-        <string name="first_party_cookies_preference">Cookies internes</string>
-        <string name="first_party_cookies_preference_summary">L\'autorisation des cookies internes s\'effectuent au niveau de l\'application,
-            toute requête réseau effectué en arrière-plan par d\'autres onglets contenant des domaines de l\'onglet actif sera impactéé.
-            Android KitKat (version 4.4.x) ne différencie pas cookies internes et cookies tiers et les activeront tous avec ce paramètre.</string>
-        <string name="third_party_cookies_preference">Cookies tierces parties</string>
-        <string name="third_party_cookies_summary">Ce paramètre nécessite Android Lollipop (version 5.0) ou plus. Il n\'a pas d\'effet si les cookies internes sont désactivés</string>
         <string name="dom_storage_preference">Stockage du DOM</string>
-        <string name="dom_storage_preference_summary">JavaScript doit être activé pour que le stockage du DOM fonctionne.</string>
         <string name="save_form_data_preference">Formulaire de données</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="save_form_data_preference_summary">Les formulaires de données sauvegardés peuvent remplir automatiquement des champs sur les sites web.</string>
         <string name="user_agent">User agent</string>
         <string name="clear_everything_summary">Efface les cookies, le stockage DOM, les données de formulaire, le logcat et le cache de WebView.
             Supprime ensuite manuellement les répertoires entiers «app_webview» et «cache».</string>
         <string name="clear_cookies_preference">Effacer les cookies</string>
-        <string name="clear_cookies_summary">Efface l\'ensemble des cookies internes et tiers</string>
         <string name="clear_dom_storage_preference">Effacer le stockage DOM</string>
         <string name="clear_dom_storage_summary">Efface le stockage du DOM.</string>
         <string name="clear_form_data_preference">Effacer les données de formulaire</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index 2eaf5e6b6dbc39a4115fb9169ac2dbb0d4b886f9..ffcda4ce87fbf71f54b33bff047ea9d572e92c55 100644 (file)
     <string name="privacy_mode">Modalità privata</string>
     <string name="javascript_enabled">JavaScript abilitato</string>
     <string name="javascript_disabled">JavaScript disabilitato</string>
-    <string name="first_party_cookies_enabled">Cookies proprietari abilitati</string>
-    <string name="first_party_cookies_disabled">Cookies proprietari disabilitati</string>
-    <string name="third_party_cookies_enabled">Cookies di terze parti abilitati</string>
-    <string name="third_party_cookies_disabled">Cookies di terze parti disabilitati</string>
     <string name="dom_storage_enabled">DOM Storage abilitato</string>
     <string name="dom_storage_disabled">DOM Storage disabilitato</string>
     <string name="form_data_enabled">Dati dei Moduli abilitati</string>
     <string name="javascript">JavaScript</string>
     <string name="refresh">Aggiorna</string>
     <string name="stop">Stop</string>
-    <string name="first_party_cookies">Cookies proprietari</string>
-    <string name="third_party_cookies">Cookies di terze parti</string>
     <string name="dom_storage">DOM storage</string>
     <string name="form_data">Dati dei moduli</string>
     <string name="clear_data">Elimina dati</string>
     <string name="privacy">Privacy</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">Permetti a JavaScript di eseguire programmi (script) sul dispositivo.</string>
-        <string name="first_party_cookies_preference">Cookies proprietari</string>
-        <string name="first_party_cookies_preference_summary">Dal momento che i cookie proprietari sono un\'impostazione a livello di applicazione,
-            quando la scheda attiva ha i cookie proprietari attivati anche ogni richiesta di rete in background da parte delle altre schede includerà i cookie per i relativi domini.
-            Android KitKat (versione 4.4.x) inoltre non distingue tra cookie proprietari e cookie di terze parti e pertanto li abiliterà entrambi con questa impostazione.</string>
-        <string name="third_party_cookies_preference">Cookies di terze parti</string>
-        <string name="third_party_cookies_summary">Questa impostazione richiede Android Lollipop (version 5.0) o successivo.  Non ha effetti se i cookies proprietari sono disabilitati.</string>
         <string name="dom_storage_preference">DOM Storage</string>
-        <string name="dom_storage_preference_summary">JavaScript deve essere abilitato per il DOM storage.</string>
         <string name="save_form_data_preference">Dati dei moduli</string>
         <string name="save_form_data_preference_summary">I dati dei moduli salvati permettono di auto-compilare i campi dei moduli nei siti web.</string>
         <string name="user_agent">User agent</string>
         <!-- The form data part of this string can be removed once the minimum API >= 26. -->
         <string name="clear_everything_summary">Cancella i cookies, il DOM storage, i dati dei moduli, il logcat e la cache di WebView.  Cancella completamente le cartelle “app_webview” e “cache”.</string>
         <string name="clear_cookies_preference">Elimina i cookie</string>
-        <string name="clear_cookies_summary">Cancella solo i cookie proprietari e di terze parti.</string>
         <string name="clear_dom_storage_preference">Elimina il DOM storage</string>
         <string name="clear_dom_storage_summary">Cancella solo il DOM storage.</string>
         <string name="clear_form_data_preference">Elimina i dati dei moduli</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index 7c0aa650bfde71a710c7c6c76479cb031bdc932c..249bd6873b5eb165d948ab883deeaafe50b79522 100644 (file)
     <string name="privacy_mode">Modo Privado</string>
     <string name="javascript_enabled">JavaScript ativado</string>
     <string name="javascript_disabled">JavaScript desativado</string>
-    <string name="first_party_cookies_enabled">Cookies primários habilitados</string>
-    <string name="first_party_cookies_disabled">Cookies primários desabilitados</string>
-    <string name="third_party_cookies_enabled">Cookies de terceiros habilitados</string>
-    <string name="third_party_cookies_disabled">Cookies de terceiros desabilitados</string>
     <string name="dom_storage_enabled">Armazenamento DOM ativado</string>
     <string name="dom_storage_disabled">Armazenamento DOM desativado</string>
     <string name="form_data_enabled">Dados de formulário habilitados</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="javascript">JavaScript</string>
     <string name="refresh">Atualizar</string>
     <string name="stop">Parar</string>
-    <string name="first_party_cookies">Cookies primários</string>
-    <string name="third_party_cookies">Cookies de terceiros</string>
     <string name="dom_storage">Armazenamento DOM</string>
     <string name="form_data">Dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Limpar dados</string>
     <string name="privacy">Privacidade</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript permite que sites executem programas (scripts) no dispositivo.</string>
-        <string name="first_party_cookies_preference">Cookies primários</string>
-        <string name="first_party_cookies_preference_summary">Como os cookies primários são uma configuração de nível de aplicativo, quando a guia ativa tem cookies habilitados,
-            todas as solicitações de rede feitas em segundo plano por outras guias também incluirão quaisquer cookies armazenados para seus domínios.
-            O Android KitKat (versão 4.4.x) não diferencia entre cookies primários e de terceiros e os habilitará com esta configuração.</string>
-        <string name="third_party_cookies_preference">Cookies de terceiros</string>
-        <string name="third_party_cookies_summary">Esta configuração requer Android Lollipop (versão 5.0) ou superior. Não tem efeito se os cookies primários estiverem desativados.</string>
         <string name="dom_storage_preference">Armazenamento DOM</string>
-        <string name="dom_storage_preference_summary">JavaScript deve estar habilitado para que o armazenamento DOM funcione.</string>
         <string name="save_form_data_preference">Dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="save_form_data_preference_summary">Dados de formulário salvos podem preencher campos automaticamente em sites.</string>
         <!-- The form data strings can be removed once the minimum API >= 26. -->
         <!-- The form data part of this string can be removed once the minimum API >= 26. -->
         <string name="clear_everything_summary">Limpa cookies, armazenamento DOM, dados de formulário e cache do WebView. Em seguida, exclui manualmente todos os diretórios “app_webview” e “cache”.</string>
         <string name="clear_cookies_preference">Limpar cookies</string>
-        <string name="clear_cookies_summary">Limpa os cookies originais e de terceiros.</string>
         <string name="clear_dom_storage_preference">Limpar armazenamento DOM</string>
         <string name="clear_dom_storage_summary">Limpa o armazenamento DOM.</string>
         <string name="clear_form_data_preference">Limpar dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index cb28574641c3a5339de9bef3f6a396a75f053fb0..c1ae2baa6289ca83c5ced9929efa39c19699f383 100644 (file)
     <string name="privacy_mode">Режим приватности</string>
     <string name="javascript_enabled">JavaScript включен</string>
     <string name="javascript_disabled">JavaScript отключен</string>
-    <string name="first_party_cookies_enabled">Первичные файлы cookie включены</string>
-    <string name="first_party_cookies_disabled">Первичные файлы cookie отключены</string>
-    <string name="third_party_cookies_enabled">Сторонние файлы cookie включены</string>
-    <string name="third_party_cookies_disabled">Сторонние файлы cookie отключены</string>
     <string name="dom_storage_enabled">DOM-хранилище включено</string>
     <string name="dom_storage_disabled">DOM-хранилище отключено</string>
     <string name="form_data_enabled">Данные формы включены</string>
     <string name="javascript">JavaScript</string>
     <string name="refresh">Обновить</string>
     <string name="stop">Остановить</string>
-    <string name="first_party_cookies">Первичные файлы cookie</string>
-    <string name="third_party_cookies">Сторонние файлы cookie</string>
     <string name="dom_storage">DOM-хранилище</string>
     <string name="form_data">Данные формы</string>
     <string name="clear_data">Очистить данные</string>
     <string name="privacy">Конфиденциальность</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript позволяет веб-сайтам запускать программы (скрипты) на устройстве.</string>
-        <string name="first_party_cookies_preference">Первичные файлы cookie</string>
-        <string name="first_party_cookies_preference_summary">Поскольку первичные файлы cookie являются настройкой уровня приложения, при включении файлов cookie на активной вкладке, любые сетевые запросы,
-            сделанные в фоновом режиме другими вкладками, также будут содержать любые сохраненные файлы cookie для их доменов.
-            Android KitKat (версия 4.4.x) не различает первичные и сторонние файлы cookie и включает их одновременно этой настройкой.</string>
-        <string name="third_party_cookies_preference">Сторонние файлы cookie</string>
-        <string name="third_party_cookies_summary">Этот параметр требует Android Lollipop (версия 5.0) или выше. Он не действует, если первичные файлы cookie отключены.</string>
         <string name="dom_storage_preference">DOM-хранилище</string>
-        <string name="dom_storage_preference_summary">Для работы хранилища DOM должен быть включен JavaScript.</string>
         <string name="save_form_data_preference">Сохранение данных формы</string>
         <string name="save_form_data_preference_summary">Сохраненные данные формы могут автоматически заполнять поля на веб-сайтах.</string>
         <string name="user_agent">User agent</string>
         <!-- The form data part of this string can be removed once the minimum API >= 26. -->
         <string name="clear_everything_summary">Очищает файлы cookie, DOM-хранилище, данные форм, logcat и кэш WebView. После этого вручную удаляет каталоги "app_webview" и "cache".</string>
         <string name="clear_cookies_preference">Очистить файлы cookie</string>
-        <string name="clear_cookies_summary">Очистить первичные и сторонние файлы cookie.</string>
         <string name="clear_dom_storage_preference">Очистить DOM-хранилище</string>
         <string name="clear_dom_storage_summary">Очищает DOM-хранилище.</string>
         <string name="clear_form_data_preference">Очистка данных формы</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index 9295ac514c7cd09550ba57b61f9cb7d1e33bd3da..e8775bcd7811d5377e9fd3b3f50b6d80d01de28d 100644 (file)
     <string name="privacy_mode">Gizlilik Modu</string>
     <string name="javascript_enabled">JavaScript etkin</string>
     <string name="javascript_disabled">JavaScript devre dışı</string>
-    <string name="first_party_cookies_enabled">Birinci Taraf Çerezler etkin</string>
-    <string name="first_party_cookies_disabled">Birinci Taraf Çerezler devre dışı</string>
-    <string name="third_party_cookies_enabled">Üçüncü Taraf Çerezler etkin</string>
-    <string name="third_party_cookies_disabled">Üçüncü Taraf Çerezler devre dışı</string>
     <string name="dom_storage_enabled">DOM Depolama etkin</string>
     <string name="dom_storage_disabled">DOM Depolama devre dışı</string>
     <string name="form_data_enabled">Form Verisi etkin</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="javascript">JavaScript</string>
     <string name="refresh">Yenile</string>
     <string name="stop">Dur</string>
-    <string name="first_party_cookies">Birinci Taraf Çerezler</string>
-    <string name="third_party_cookies">Üçüncü Taraf Çerezler</string>
     <string name="dom_storage">DOM Depolama</string>
     <string name="form_data">Form Verisi</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Veriyi temizle</string>
     <string name="privacy">Gizlilik</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript, web sitelerin cihazdaki programları (scriptler) çalıştırmasına izin verir.</string>
-        <string name="first_party_cookies_preference">Birinci taraf çerezler</string>
-        <string name="first_party_cookies_preference_summary">Birinci taraf çerezler uygulama düzeyinde bir ayar olduğundan, aktif sekmede çerezler etkinleştirildiğinde,
-            arka plandaki diğer sekmeler tarafından yapılan herhangi ağ istekleri aynı zamanda domainleri için depolanan çerezleri de kapsayacaktır.
-            Android Kitkat versiyonu (4.4.x), birinci ve üçüncü taraf çerezler arasında ayrım yapmaz ve bu ayarla ikisini de etkinleştirir.</string>
-        <string name="third_party_cookies_preference">Üçüncü taraf çerezler</string>
-        <string name="third_party_cookies_summary">Bu ayarı etkinleştirmek için Android Lollipop versiyonuna (5.0) ya da daha üst versiyonlara sahip olmak gerekir.
-            Birinci taraf çerezler devre dışı olduğu takdirde etkisi yoktur.</string>
         <string name="dom_storage_preference">DOM depolama</string>
-        <string name="dom_storage_preference_summary">DOM depolamasının çalışması için JavaScript\'in etkin olması gerekir.</string>
         <string name="save_form_data_preference">Form verisi</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="save_form_data_preference_summary">Kaydedilen form verisi, web sitelerdeki boşlukları otomatik olarak dolduracaktır.</string>
         <string name="user_agent">Kullanıcı aracısı</string>
     <string name="clear_everything">Her şeyi temizle</string>
         <string name="clear_everything_summary">Çerezleri, DOM depolamayı, form verisini ve WebView ön belleğini temizler. Sonrasında, manuel olarak bütün “app_webview” ve “cache” dizinlerini siler.</string>
         <string name="clear_cookies_preference">Çerezleri temizle</string>
-        <string name="clear_cookies_summary">Birinci ve üçüncü taraf çerezleri temizler.</string>
         <string name="clear_dom_storage_preference">DOM Depolamayı temizle</string>
         <string name="clear_dom_storage_summary">DOM Depolamayı temizler.</string>
         <string name="clear_form_data_preference">Form verisini temizle</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
index 413961652f5afaf3fdbe69941628090e05dbd18f..5ef6920df7d203efd239f01cd2f8e08ecc7600cd 100644 (file)
     <string name="privacy_mode">Privacy Mode</string>
     <string name="javascript_enabled">JavaScript enabled</string>
     <string name="javascript_disabled">JavaScript 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_enabled">Cookies enabled</string>
+    <string name="cookies_disabled">Cookies disabled</string>
     <string name="dom_storage_enabled">DOM Storage enabled</string>
     <string name="dom_storage_disabled">DOM Storage disabled</string>
     <string name="form_data_enabled">Form Data enabled</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="javascript">JavaScript</string>
     <string name="refresh">Refresh</string>
     <string name="stop">Stop</string>
-    <string name="first_party_cookies">First-Party Cookies</string>
-    <string name="third_party_cookies">Third-Party Cookies</string>
+    <string name="cookies">Cookies</string>
     <string name="dom_storage">DOM Storage</string>
     <string name="form_data">Form Data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Clear Data</string>
     <string name="privacy">Privacy</string>
         <string name="javascript_preference">JavaScript</string>
         <string name="javascript_preference_summary">JavaScript allows websites to run programs (scripts) on the device.</string>
-        <string name="first_party_cookies_preference">First-party cookies</string>
-        <string name="first_party_cookies_preference_summary">Because first-party cookies are an app level setting, when the active tab has cookies enabled,
-            any network requests made in the background by other tabs will also include any stored cookies for their domains.
-            Android KitKat (version 4.4.x) does not differentiate between first and third-party cookies and will enable them both with this setting.</string>
-        <string name="third_party_cookies_preference">Third-party cookies</string>
-        <string name="third_party_cookies_summary">This setting requires Android Lollipop (version 5.0) or higher.  It has no effect if first-party cookies are disabled.</string>
+        <string name="cookies_preference">Cookies</string>
+        <string name="cookies_preference_summary">Cookies are an app level setting. When the active tab has cookies enabled,
+            any network request made in the background by another tab also has cookies enabled.</string>
         <string name="dom_storage_preference">DOM storage</string>
-        <string name="dom_storage_preference_summary">JavaScript must be enabled for DOM storage to function.</string>
+        <string name="dom_storage_preference_summary">JavaScript must be enabled for Document Object Model storage to function.</string>
         <string name="save_form_data_preference">Form data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="save_form_data_preference_summary">Saved form data can auto-populate fields on websites.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="user_agent">User agent</string>
         <!-- The form data part of this string can be removed once the minimum API >= 26. -->
         <string name="clear_everything_summary">Clears cookies, DOM storage, form data, the logcat, and WebView’s cache.  Then manually deletes the entire “app_webview” and “cache” directories.</string>
         <string name="clear_cookies_preference">Clear cookies</string>
-        <string name="clear_cookies_summary">Clears first and third-party cookies.</string>
+        <string name="clear_cookies_summary">Clears cookies.</string>
         <string name="clear_dom_storage_preference">Clear DOM storage</string>
         <string name="clear_dom_storage_summary">Clears DOM storage.</string>
         <string name="clear_form_data_preference">Clear form data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="display_webpage_images_summary">Disable to conserve bandwidth.</string>
 
     <!-- Non-translatable preference keys. -->
+    <string name="cookies_key" translatable="false">cookies</string>
     <string name="allow_screenshots_key" translatable="false">allow_screenshots</string>
     <string name="clear_logcat_key" translatable="false">clear_logcat</string>
     <string name="display_additional_app_bar_icons_key" translatable="false">display_additional_app_bar_icons</string>
index 36448a77e98ed65bb9043418a4f18eb3aa49c660..8aed86614520f09a84619b93d05db4e7d78a2778 100644 (file)
             android:defaultValue="false" />
 
         <SwitchPreference
-            android:key="first_party_cookies"
-            android:title="@string/first_party_cookies_preference"
-            android:summary="@string/first_party_cookies_preference_summary"
-            android:defaultValue="false" />
-
-        <SwitchPreference
-            android:key="third_party_cookies"
-            android:title="@string/third_party_cookies_preference"
-            android:summary="@string/third_party_cookies_summary"
+            android:key="cookies"
+            android:title="@string/cookies_preference"
+            android:summary="@string/cookies_preference_summary"
             android:defaultValue="false" />
 
         <SwitchPreference