blob: e7b031625ec23ccaec1656c73fc49327c4fda5ce [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2019 The Chromium Authors
Huanzhong Huang8c0fbfa62019-10-07 10:49:052// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/webui/ntp/cookie_controls_handler.h"
6
Huanzhong Huang4e2d8a72019-10-20 19:13:077#include <utility>
8
Christian Dullwebercce1b27b2020-04-01 00:15:399#include "base/feature_list.h"
Avi Drissman9269d4ed2023-01-07 01:38:0610#include "base/functional/bind.h"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0511#include "base/values.h"
12#include "chrome/browser/profiles/profile.h"
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3713#include "chrome/browser/ui/cookie_controls/cookie_controls_service.h"
14#include "chrome/browser/ui/cookie_controls/cookie_controls_service_factory.h"
Christian Dullwebercce1b27b2020-04-01 00:15:3915#include "chrome/common/chrome_features.h"
Sean Harrisonc69688472021-02-19 17:08:2016#include "chrome/common/webui_url_constants.h"
Mugdha Lakhani47e07fe2020-04-17 19:06:0117#include "components/content_settings/core/common/cookie_controls_enforcement.h"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0518
Christian Dullweberd16bc1a02019-12-13 12:06:3519namespace {
Christian Dullweberd16bc1a02019-12-13 12:06:3520static const char* kPolicyIcon = "cr20:domain";
Christian Dullwebercce1b27b2020-04-01 00:15:3921static const char* kExtensionIcon = "cr:extension";
22static const char* kSettingsIcon = "cr:settings_icon";
Christian Dullweberd16bc1a02019-12-13 12:06:3523} // namespace
24
Ehimare Okoyomonb57d396b2020-03-06 14:51:1025CookieControlsHandler::CookieControlsHandler(Profile* profile)
26 : service_(CookieControlsServiceFactory::GetForProfile(profile)) {}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0527
Ehimare Okoyomonb57d396b2020-03-06 14:51:1028CookieControlsHandler::~CookieControlsHandler() {
29 service_->RemoveObserver(this);
30}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0531
32void CookieControlsHandler::RegisterMessages() {
Michael Wilsonf16cccf2022-03-28 15:29:1033 web_ui()->RegisterMessageCallback(
Huanzhong Huang8c0fbfa62019-10-07 10:49:0534 "cookieControlsToggleChanged",
35 base::BindRepeating(
36 &CookieControlsHandler::HandleCookieControlsToggleChanged,
37 base::Unretained(this)));
Michael Wilsonf16cccf2022-03-28 15:29:1038 web_ui()->RegisterMessageCallback(
Huanzhong Huang04f8f4c52019-10-14 10:22:1939 "observeCookieControlsSettingsChanges",
Huanzhong Huang8c0fbfa62019-10-07 10:49:0540 base::BindRepeating(
Huanzhong Huang04f8f4c52019-10-14 10:22:1941 &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges,
Huanzhong Huang8c0fbfa62019-10-07 10:49:0542 base::Unretained(this)));
43}
44
45void CookieControlsHandler::OnJavascriptAllowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3746 service_->AddObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0547}
48
49void CookieControlsHandler::OnJavascriptDisallowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3750 service_->RemoveObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0551}
52
53void CookieControlsHandler::HandleCookieControlsToggleChanged(
Michael Wilsonf16cccf2022-03-28 15:29:1054 const base::Value::List& args) {
55 CHECK(!args.empty());
56 const bool checked = args[0].GetBool();
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3757 service_->HandleCookieControlsToggleChanged(checked);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0558}
59
Huanzhong Huang04f8f4c52019-10-14 10:22:1960void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges(
Michael Wilsonf16cccf2022-03-28 15:29:1061 const base::Value::List& args) {
Huanzhong Huang8c0fbfa62019-10-07 10:49:0562 AllowJavascript();
Christian Dullwebercce1b27b2020-04-01 00:15:3963 SendCookieControlsUIChanges();
Huanzhong Huang2c4aee02019-10-16 08:17:0164}
65
Christian Dullweberb3d12fc2020-05-20 08:52:4666const char* CookieControlsHandler::GetEnforcementIcon(
67 CookieControlsEnforcement enforcement) {
68 switch (enforcement) {
Christian Dullweberd16bc1a02019-12-13 12:06:3569 case CookieControlsEnforcement::kEnforcedByPolicy:
70 return kPolicyIcon;
Christian Dullwebercce1b27b2020-04-01 00:15:3971 case CookieControlsEnforcement::kEnforcedByExtension:
72 return kExtensionIcon;
Christian Dullweberd16bc1a02019-12-13 12:06:3573 case CookieControlsEnforcement::kEnforcedByCookieSetting:
74 return kSettingsIcon;
Alvin Lam0242a422023-10-17 17:03:0775 case CookieControlsEnforcement::kEnforcedByTpcdGrant:
Christian Dullweberd16bc1a02019-12-13 12:06:3576 case CookieControlsEnforcement::kNoEnforcement:
77 return "";
78 }
Huanzhong Huang04f8f4c52019-10-14 10:22:1979}
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3780
81void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() {
82 SendCookieControlsUIChanges();
83}
84
85void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() {
86 SendCookieControlsUIChanges();
87}
88
89void CookieControlsHandler::SendCookieControlsUIChanges() {
Claudio DeSouza2b8bdca2022-08-09 09:57:5990 base::Value::Dict dict;
91 dict.Set("enforced", service_->ShouldEnforceCookieControls());
92 dict.Set("checked", service_->GetToggleCheckedValue());
93 dict.Set("icon",
94 GetEnforcementIcon(service_->GetCookieControlsEnforcement()));
95 dict.Set("cookieSettingsUrl", chrome::kChromeUICookieSettingsURL);
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3796 FireWebUIListener("cookie-controls-changed", dict);
97}