blob: d072d8378c18134caf74b0fc617f8fc1440da2c7 [file] [log] [blame]
Huanzhong Huang8c0fbfa62019-10-07 10:49:051// Copyright 2019 The Chromium Authors. All rights reserved.
2// 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
Huanzhong Huang8c0fbfa62019-10-07 10:49:059#include "base/bind.h"
Christian Dullwebercce1b27b2020-04-01 00:15:3910#include "base/feature_list.h"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0511#include "base/values.h"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0512#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"
Mugdha Lakhani47e07fe2020-04-17 19:06:0116#include "components/content_settings/core/common/cookie_controls_enforcement.h"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0517
Christian Dullweberd16bc1a02019-12-13 12:06:3518namespace {
Christian Dullweberd16bc1a02019-12-13 12:06:3519static const char* kPolicyIcon = "cr20:domain";
Christian Dullwebercce1b27b2020-04-01 00:15:3920static const char* kExtensionIcon = "cr:extension";
21static const char* kSettingsIcon = "cr:settings_icon";
Christian Dullweberd16bc1a02019-12-13 12:06:3522} // namespace
23
Ehimare Okoyomonb57d396b2020-03-06 14:51:1024CookieControlsHandler::CookieControlsHandler(Profile* profile)
25 : service_(CookieControlsServiceFactory::GetForProfile(profile)) {}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0526
Ehimare Okoyomonb57d396b2020-03-06 14:51:1027CookieControlsHandler::~CookieControlsHandler() {
28 service_->RemoveObserver(this);
29}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0530
31void CookieControlsHandler::RegisterMessages() {
32 web_ui()->RegisterMessageCallback(
33 "cookieControlsToggleChanged",
34 base::BindRepeating(
35 &CookieControlsHandler::HandleCookieControlsToggleChanged,
36 base::Unretained(this)));
37 web_ui()->RegisterMessageCallback(
Huanzhong Huang04f8f4c52019-10-14 10:22:1938 "observeCookieControlsSettingsChanges",
Huanzhong Huang8c0fbfa62019-10-07 10:49:0539 base::BindRepeating(
Huanzhong Huang04f8f4c52019-10-14 10:22:1940 &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges,
Huanzhong Huang8c0fbfa62019-10-07 10:49:0541 base::Unretained(this)));
42}
43
44void CookieControlsHandler::OnJavascriptAllowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3745 service_->AddObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0546}
47
48void CookieControlsHandler::OnJavascriptDisallowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3749 service_->RemoveObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0550}
51
52void CookieControlsHandler::HandleCookieControlsToggleChanged(
53 const base::ListValue* args) {
54 bool checked;
55 CHECK(args->GetBoolean(0, &checked));
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3756 service_->HandleCookieControlsToggleChanged(checked);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0557}
58
Huanzhong Huang04f8f4c52019-10-14 10:22:1959void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges(
Huanzhong Huang8c0fbfa62019-10-07 10:49:0560 const base::ListValue* args) {
61 AllowJavascript();
Christian Dullwebercce1b27b2020-04-01 00:15:3962 SendCookieControlsUIChanges();
Huanzhong Huang2c4aee02019-10-16 08:17:0163}
64
Christian Dullweberb3d12fc2020-05-20 08:52:4665const char* CookieControlsHandler::GetEnforcementIcon(
66 CookieControlsEnforcement enforcement) {
67 switch (enforcement) {
Christian Dullweberd16bc1a02019-12-13 12:06:3568 case CookieControlsEnforcement::kEnforcedByPolicy:
69 return kPolicyIcon;
Christian Dullwebercce1b27b2020-04-01 00:15:3970 case CookieControlsEnforcement::kEnforcedByExtension:
71 return kExtensionIcon;
Christian Dullweberd16bc1a02019-12-13 12:06:3572 case CookieControlsEnforcement::kEnforcedByCookieSetting:
73 return kSettingsIcon;
74 case CookieControlsEnforcement::kNoEnforcement:
75 return "";
76 }
Huanzhong Huang04f8f4c52019-10-14 10:22:1977}
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3778
79void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() {
80 SendCookieControlsUIChanges();
81}
82
83void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() {
84 SendCookieControlsUIChanges();
85}
86
87void CookieControlsHandler::SendCookieControlsUIChanges() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3788 base::DictionaryValue dict;
89 dict.SetBoolKey("enforced", service_->ShouldEnforceCookieControls());
90 dict.SetBoolKey("checked", service_->GetToggleCheckedValue());
Christian Dullweberb3d12fc2020-05-20 08:52:4691 dict.SetStringKey(
92 "icon", GetEnforcementIcon(service_->GetCookieControlsEnforcement()));
Christian Dullwebercce1b27b2020-04-01 00:15:3993 bool use_new_cookie_page =
94 base::FeatureList::IsEnabled(features::kPrivacySettingsRedesign);
95 dict.SetString("cookieSettingsUrl",
96 use_new_cookie_page ? "chrome://settings/cookies"
97 : "chrome://settings/content/cookies");
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3798 FireWebUIListener("cookie-controls-changed", dict);
99}