Display cookie blocking toggle as extension controlled

Display an extension icon if third-party cookie blocking is controlled
through an extension.

Also use a link to the new cookie settings UI if the privacy settings
redesign is enabled.

Bug: 1065392
Change-Id: I1917908a24dfe6ca711d85960689b1328fafdb16
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2128489
Commit-Queue: Christian Dullweber <[email protected]>
Reviewed-by: Evan Stade <[email protected]>
Reviewed-by: Elly Fong-Jones <[email protected]>
Cr-Commit-Position: refs/heads/master@{#755175}
diff --git a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
index d5d8841..8a7336b 100644
--- a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
+++ b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
@@ -7,14 +7,17 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/feature_list.h"
 #include "base/values.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/cookie_controls/cookie_controls_service.h"
 #include "chrome/browser/ui/cookie_controls/cookie_controls_service_factory.h"
+#include "chrome/common/chrome_features.h"
 
 namespace {
-static const char* kSettingsIcon = "cr:settings_icon";
 static const char* kPolicyIcon = "cr20:domain";
+static const char* kExtensionIcon = "cr:extension";
+static const char* kSettingsIcon = "cr:settings_icon";
 }  // namespace
 
 CookieControlsHandler::CookieControlsHandler(Profile* profile)
@@ -55,7 +58,7 @@
 void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges(
     const base::ListValue* args) {
   AllowJavascript();
-  OnThirdPartyCookieBlockingPrefChanged();
+  SendCookieControlsUIChanges();
 }
 
 const char* CookieControlsHandler::GetEnforcementIcon(Profile* profile) {
@@ -64,6 +67,8 @@
   switch (service->GetCookieControlsEnforcement()) {
     case CookieControlsEnforcement::kEnforcedByPolicy:
       return kPolicyIcon;
+    case CookieControlsEnforcement::kEnforcedByExtension:
+      return kExtensionIcon;
     case CookieControlsEnforcement::kEnforcedByCookieSetting:
       return kSettingsIcon;
     case CookieControlsEnforcement::kNoEnforcement:
@@ -85,5 +90,10 @@
   dict.SetBoolKey("enforced", service_->ShouldEnforceCookieControls());
   dict.SetBoolKey("checked", service_->GetToggleCheckedValue());
   dict.SetStringKey("icon", CookieControlsHandler::GetEnforcementIcon(profile));
+  bool use_new_cookie_page =
+      base::FeatureList::IsEnabled(features::kPrivacySettingsRedesign);
+  dict.SetString("cookieSettingsUrl",
+                 use_new_cookie_page ? "chrome://settings/cookies"
+                                     : "chrome://settings/content/cookies");
   FireWebUIListener("cookie-controls-changed", dict);
 }