Hide cookie controls when third-party cookie blocking managed or enabled

Cookie controls UI should be hidden when (the original) third-party cookie
blocking is policy-managed or turned on.

Bug: 1012684, 967668
Change-Id: I2657454ed4c71f221708247e197c0de57b3db3fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1849681
Reviewed-by: Dan Beam <[email protected]>
Reviewed-by: Christian Dullweber <[email protected]>
Commit-Queue: Huanzhong Huang <[email protected]>
Cr-Commit-Position: refs/heads/master@{#705497}
diff --git a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
index f94fbed..4ccdeee8 100644
--- a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
+++ b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
@@ -8,6 +8,7 @@
 #include "base/values.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
+#include "components/content_settings/core/common/features.h"
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/prefs/pref_service.h"
 
@@ -22,9 +23,9 @@
           &CookieControlsHandler::HandleCookieControlsToggleChanged,
           base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
-      "observeCookieControlsModeChange",
+      "observeCookieControlsSettingsChanges",
       base::BindRepeating(
-          &CookieControlsHandler::HandleObserveCookieControlsModeChange,
+          &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges,
           base::Unretained(this)));
 }
 
@@ -35,6 +36,10 @@
       prefs::kCookieControlsMode,
       base::Bind(&CookieControlsHandler::OnCookieControlsChanged,
                  base::Unretained(this)));
+  pref_change_registrar_.Add(
+      prefs::kBlockThirdPartyCookies,
+      base::Bind(&CookieControlsHandler::OnThirdPartyCookieBlockingChanged,
+                 base::Unretained(this)));
 }
 
 void CookieControlsHandler::OnJavascriptDisallowed() {
@@ -53,10 +58,11 @@
                   : content_settings::CookieControlsMode::kOff));
 }
 
-void CookieControlsHandler::HandleObserveCookieControlsModeChange(
+void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges(
     const base::ListValue* args) {
   AllowJavascript();
   OnCookieControlsChanged();
+  OnThirdPartyCookieBlockingChanged();
 }
 
 void CookieControlsHandler::OnCookieControlsChanged() {
@@ -68,3 +74,17 @@
           : true);
   FireWebUIListener("cookie-controls-changed", checked);
 }
+
+void CookieControlsHandler::OnThirdPartyCookieBlockingChanged() {
+  Profile* profile = Profile::FromWebUI(web_ui());
+  FireWebUIListener("third-party-cookie-blocking-changed",
+                    base::Value(ShouldHideCookieControlsUI(profile)));
+}
+
+bool CookieControlsHandler::ShouldHideCookieControlsUI(const Profile* profile) {
+  return !base::FeatureList::IsEnabled(
+             content_settings::kImprovedCookieControls) ||
+         profile->GetPrefs()->IsManagedPreference(
+             prefs::kBlockThirdPartyCookies) ||
+         profile->GetPrefs()->GetBoolean(prefs::kBlockThirdPartyCookies);
+}