blob: 41fd80239ea6f8e1175ed4f1d18749a1616ea02f [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
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3765const char* CookieControlsHandler::GetEnforcementIcon(Profile* profile) {
66 CookieControlsService* service =
67 CookieControlsServiceFactory::GetForProfile(profile);
68 switch (service->GetCookieControlsEnforcement()) {
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;
75 case CookieControlsEnforcement::kNoEnforcement:
76 return "";
77 }
Huanzhong Huang04f8f4c52019-10-14 10:22:1978}
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3779
80void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() {
81 SendCookieControlsUIChanges();
82}
83
84void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() {
85 SendCookieControlsUIChanges();
86}
87
88void CookieControlsHandler::SendCookieControlsUIChanges() {
89 Profile* profile = Profile::FromWebUI(web_ui());
90 base::DictionaryValue dict;
91 dict.SetBoolKey("enforced", service_->ShouldEnforceCookieControls());
92 dict.SetBoolKey("checked", service_->GetToggleCheckedValue());
93 dict.SetStringKey("icon", CookieControlsHandler::GetEnforcementIcon(profile));
Christian Dullwebercce1b27b2020-04-01 00:15:3994 bool use_new_cookie_page =
95 base::FeatureList::IsEnabled(features::kPrivacySettingsRedesign);
96 dict.SetString("cookieSettingsUrl",
97 use_new_cookie_page ? "chrome://settings/cookies"
98 : "chrome://settings/content/cookies");
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3799 FireWebUIListener("cookie-controls-changed", dict);
100}