blob: 8a7336be70b6e8b2d5e9718541ff6e733e1fd35c [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"
Huanzhong Huang8c0fbfa62019-10-07 10:49:0516
Christian Dullweberd16bc1a02019-12-13 12:06:3517namespace {
Christian Dullweberd16bc1a02019-12-13 12:06:3518static const char* kPolicyIcon = "cr20:domain";
Christian Dullwebercce1b27b2020-04-01 00:15:3919static const char* kExtensionIcon = "cr:extension";
20static const char* kSettingsIcon = "cr:settings_icon";
Christian Dullweberd16bc1a02019-12-13 12:06:3521} // namespace
22
Ehimare Okoyomonb57d396b2020-03-06 14:51:1023CookieControlsHandler::CookieControlsHandler(Profile* profile)
24 : service_(CookieControlsServiceFactory::GetForProfile(profile)) {}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0525
Ehimare Okoyomonb57d396b2020-03-06 14:51:1026CookieControlsHandler::~CookieControlsHandler() {
27 service_->RemoveObserver(this);
28}
Huanzhong Huang8c0fbfa62019-10-07 10:49:0529
30void CookieControlsHandler::RegisterMessages() {
31 web_ui()->RegisterMessageCallback(
32 "cookieControlsToggleChanged",
33 base::BindRepeating(
34 &CookieControlsHandler::HandleCookieControlsToggleChanged,
35 base::Unretained(this)));
36 web_ui()->RegisterMessageCallback(
Huanzhong Huang04f8f4c52019-10-14 10:22:1937 "observeCookieControlsSettingsChanges",
Huanzhong Huang8c0fbfa62019-10-07 10:49:0538 base::BindRepeating(
Huanzhong Huang04f8f4c52019-10-14 10:22:1939 &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges,
Huanzhong Huang8c0fbfa62019-10-07 10:49:0540 base::Unretained(this)));
41}
42
43void CookieControlsHandler::OnJavascriptAllowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3744 service_->AddObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0545}
46
47void CookieControlsHandler::OnJavascriptDisallowed() {
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3748 service_->RemoveObserver(this);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0549}
50
51void CookieControlsHandler::HandleCookieControlsToggleChanged(
52 const base::ListValue* args) {
53 bool checked;
54 CHECK(args->GetBoolean(0, &checked));
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3755 service_->HandleCookieControlsToggleChanged(checked);
Huanzhong Huang8c0fbfa62019-10-07 10:49:0556}
57
Huanzhong Huang04f8f4c52019-10-14 10:22:1958void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges(
Huanzhong Huang8c0fbfa62019-10-07 10:49:0559 const base::ListValue* args) {
60 AllowJavascript();
Christian Dullwebercce1b27b2020-04-01 00:15:3961 SendCookieControlsUIChanges();
Huanzhong Huang2c4aee02019-10-16 08:17:0162}
63
Ehimare Okoyomon3fc4c3c2020-02-03 21:50:3764const char* CookieControlsHandler::GetEnforcementIcon(Profile* profile) {
65 CookieControlsService* service =
66 CookieControlsServiceFactory::GetForProfile(profile);
67 switch (service->GetCookieControlsEnforcement()) {
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() {
88 Profile* profile = Profile::FromWebUI(web_ui());
89 base::DictionaryValue dict;
90 dict.SetBoolKey("enforced", service_->ShouldEnforceCookieControls());
91 dict.SetBoolKey("checked", service_->GetToggleCheckedValue());
92 dict.SetStringKey("icon", CookieControlsHandler::GetEnforcementIcon(profile));
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}