Cookie controls toggle in incognito ntp
Introduce a toggle in the incognito ntp that links to cookie controls setting.
Layout should be fixed in a subsequent cl.
Bug: 967668
Change-Id: Icedcae6575ae84b1ed6ef2feb353e0f0ae1b37c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1826900
Commit-Queue: Huanzhong Huang <[email protected]>
Reviewed-by: Dan Beam <[email protected]>
Reviewed-by: Christian Dullweber <[email protected]>
Cr-Commit-Position: refs/heads/master@{#703257}
diff --git a/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
new file mode 100644
index 0000000..f94fbed
--- /dev/null
+++ b/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc
@@ -0,0 +1,70 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/ntp/cookie_controls_handler.h"
+
+#include "base/bind.h"
+#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/pref_names.h"
+#include "components/prefs/pref_service.h"
+
+CookieControlsHandler::CookieControlsHandler() {}
+
+CookieControlsHandler::~CookieControlsHandler() {}
+
+void CookieControlsHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback(
+ "cookieControlsToggleChanged",
+ base::BindRepeating(
+ &CookieControlsHandler::HandleCookieControlsToggleChanged,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "observeCookieControlsModeChange",
+ base::BindRepeating(
+ &CookieControlsHandler::HandleObserveCookieControlsModeChange,
+ base::Unretained(this)));
+}
+
+void CookieControlsHandler::OnJavascriptAllowed() {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ pref_change_registrar_.Init(profile->GetPrefs());
+ pref_change_registrar_.Add(
+ prefs::kCookieControlsMode,
+ base::Bind(&CookieControlsHandler::OnCookieControlsChanged,
+ base::Unretained(this)));
+}
+
+void CookieControlsHandler::OnJavascriptDisallowed() {
+ pref_change_registrar_.RemoveAll();
+}
+
+void CookieControlsHandler::HandleCookieControlsToggleChanged(
+ const base::ListValue* args) {
+ bool checked;
+ CHECK(args->GetBoolean(0, &checked));
+ Profile* profile = Profile::FromWebUI(web_ui());
+ profile->GetPrefs()->SetInteger(
+ prefs::kCookieControlsMode,
+ static_cast<int>(
+ checked ? content_settings::CookieControlsMode::kIncognitoOnly
+ : content_settings::CookieControlsMode::kOff));
+}
+
+void CookieControlsHandler::HandleObserveCookieControlsModeChange(
+ const base::ListValue* args) {
+ AllowJavascript();
+ OnCookieControlsChanged();
+}
+
+void CookieControlsHandler::OnCookieControlsChanged() {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ int mode = profile->GetPrefs()->GetInteger(prefs::kCookieControlsMode);
+ base::Value checked(
+ mode == static_cast<int>(content_settings::CookieControlsMode::kOff)
+ ? false
+ : true);
+ FireWebUIListener("cookie-controls-changed", checked);
+}