From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Sat, 28 Dec 2019 10:23:04 +0100
Subject: Show site settings for cookies, javascript and ads

Avoid displaying info about intrusive ads

License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
 .../site_settings/SingleWebsiteSettings.java  | 52 +++++++++----------
 .../browser_ui/site_settings/Website.java     | 15 ++++--
 2 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -518,6 +518,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
                 setUpSoundPreference(preference);
             } else if (type == ContentSettingsType.JAVASCRIPT) {
                 setUpJavascriptPreference(preference);
+            } else if (type == ContentSettingsType.COOKIES) {
+                setUpCookiesPreference(preference);
             } else if (type == ContentSettingsType.GEOLOCATION) {
                 setUpLocationPreference(preference);
             } else if (type == ContentSettingsType.IMAGES) {
@@ -871,16 +873,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
     private void setUpAdsInformationalBanner() {
         // Add the informational banner which shows at the top of the UI if ad blocking is
         // activated on this site.
-        boolean adBlockingActivated = SiteSettingsCategory.adsCategoryEnabled()
-                && WebsitePreferenceBridge.getAdBlockingActivated(
-                        getSiteSettingsDelegate().getBrowserContextHandle(),
-                        mSite.getAddress().getOrigin())
-                && findPreference(getPreferenceKey(ContentSettingsType.ADS)) != null;
-
-        if (!adBlockingActivated) {
             removePreferenceSafely(PREF_INTRUSIVE_ADS_INFO);
             removePreferenceSafely(PREF_INTRUSIVE_ADS_INFO_DIVIDER);
-        }
     }
 
     private SiteSettingsCategory getWarningCategory() {
@@ -1065,17 +1059,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
         @Nullable
         Integer currentValue =
                 mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT);
-        // If Javascript is blocked by default, then always show a Javascript permission.
-        // To do this, set it to the default value (blocked).
-        if ((currentValue == null)
-                && !WebsitePreferenceBridge.isCategoryEnabled(
-                        browserContextHandle, ContentSettingsType.JAVASCRIPT)) {
-            currentValue = ContentSettingValues.BLOCK;
+        // Always show the Javascript permission
+        if (currentValue == null) {
+            currentValue = WebsitePreferenceBridge.isCategoryEnabled(
+                                   browserContextHandle, ContentSettingsType.JAVASCRIPT)
+                    ? ContentSettingValues.ALLOW
+                    : ContentSettingValues.BLOCK;
         }
         // Not possible to embargo JAVASCRIPT.
         setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
     }
 
+    private void setUpCookiesPreference(Preference preference) {
+        BrowserContextHandle browserContextHandle =
+                getSiteSettingsDelegate().getBrowserContextHandle();
+        @ContentSettingValues
+        @Nullable
+        Integer currentValue =
+                mSite.getContentSetting(browserContextHandle, ContentSettingsType.COOKIES);
+        // Always show the cookies permission
+        if (currentValue == null || currentValue == ContentSettingValues.DEFAULT) {
+            currentValue = WebsitePreferenceBridge.isCategoryEnabled(
+                                   browserContextHandle, ContentSettingsType.COOKIES)
+                    ? ContentSettingValues.ALLOW
+                    : ContentSettingValues.BLOCK;
+        }
+        // Not possible to embargo COOKIES.
+        setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
+     }
+
     private void setUpJavascriptJitPreference(Preference preference) {
         BrowserContextHandle browserContextHandle =
                 getSiteSettingsDelegate().getBrowserContextHandle();
@@ -1108,22 +1120,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
             setupContentSettingsPreference(preference, null, false);
             return;
         }
-        // If the ad blocker is activated, then this site will have ads blocked unless there is an
-        // explicit permission disallowing the blocking.
-        boolean activated = WebsitePreferenceBridge.getAdBlockingActivated(
-                browserContextHandle, mSite.getAddress().getOrigin());
         @ContentSettingValues
         @Nullable
         Integer permission = mSite.getContentSetting(browserContextHandle, ContentSettingsType.ADS);
 
-        // If |permission| is null, there is no explicit (non-default) permission set for this site.
-        // If the site is not considered a candidate for blocking, do the standard thing and remove
-        // the preference.
-        if (permission == null && !activated) {
-            setupContentSettingsPreference(preference, null, false);
-            return;
-        }
-
         // However, if the blocking is activated, we still want to show the permission, even if it
         // is in the default state.
         if (permission == null) {
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
@@ -204,13 +204,18 @@ public final class Website implements WebsiteEntry {
 
         ContentSettingException exception = getContentSettingException(type);
         if (type == ContentSettingsType.ADS) {
-            // It is possible to set the permission without having an existing exception,
-            // because we can show the BLOCK state even when this permission is set to the
-            // default. In that case, just set an exception now to BLOCK to enable changing the
-            // permission.
+            // It is possible to set the permission without having an existing exception
             if (exception == null) {
                 exception = new ContentSettingException(ContentSettingsType.ADS,
-                        getAddress().getOrigin(), ContentSettingValues.BLOCK, "",
+                        getAddress().getOrigin(), value, "",
+                        /*isEmbargoed=*/false);
+                setContentSettingException(type, exception);
+            }
+        } else if (type == ContentSettingsType.COOKIES) {
+            // It is possible to set the permission without having an existing exception
+            if (exception == null) {
+                exception = new ContentSettingException(ContentSettingsType.COOKIES,
+                        getAddress().getOrigin(), value, "",
                         /*isEmbargoed=*/false);
                 setContentSettingException(type, exception);
             }
--
2.25.1
