Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 1 | // 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 Huang | 4e2d8a7 | 2019-10-20 19:13:07 | [diff] [blame] | 7 | #include <utility> |
| 8 | |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 9 | #include "base/bind.h" |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 10 | #include "base/feature_list.h" |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 11 | #include "base/values.h" |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 12 | #include "chrome/browser/profiles/profile.h" |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 13 | #include "chrome/browser/ui/cookie_controls/cookie_controls_service.h" |
| 14 | #include "chrome/browser/ui/cookie_controls/cookie_controls_service_factory.h" |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 15 | #include "chrome/common/chrome_features.h" |
Mugdha Lakhani | 47e07fe | 2020-04-17 19:06:01 | [diff] [blame] | 16 | #include "components/content_settings/core/common/cookie_controls_enforcement.h" |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 17 | |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 18 | namespace { |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 19 | static const char* kPolicyIcon = "cr20:domain"; |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 20 | static const char* kExtensionIcon = "cr:extension"; |
| 21 | static const char* kSettingsIcon = "cr:settings_icon"; |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 22 | } // namespace |
| 23 | |
Ehimare Okoyomon | b57d396b | 2020-03-06 14:51:10 | [diff] [blame] | 24 | CookieControlsHandler::CookieControlsHandler(Profile* profile) |
| 25 | : service_(CookieControlsServiceFactory::GetForProfile(profile)) {} |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 26 | |
Ehimare Okoyomon | b57d396b | 2020-03-06 14:51:10 | [diff] [blame] | 27 | CookieControlsHandler::~CookieControlsHandler() { |
| 28 | service_->RemoveObserver(this); |
| 29 | } |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 30 | |
| 31 | void CookieControlsHandler::RegisterMessages() { |
| 32 | web_ui()->RegisterMessageCallback( |
| 33 | "cookieControlsToggleChanged", |
| 34 | base::BindRepeating( |
| 35 | &CookieControlsHandler::HandleCookieControlsToggleChanged, |
| 36 | base::Unretained(this))); |
| 37 | web_ui()->RegisterMessageCallback( |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 38 | "observeCookieControlsSettingsChanges", |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 39 | base::BindRepeating( |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 40 | &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges, |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 41 | base::Unretained(this))); |
| 42 | } |
| 43 | |
| 44 | void CookieControlsHandler::OnJavascriptAllowed() { |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 45 | service_->AddObserver(this); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 46 | } |
| 47 | |
| 48 | void CookieControlsHandler::OnJavascriptDisallowed() { |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 49 | service_->RemoveObserver(this); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 50 | } |
| 51 | |
| 52 | void CookieControlsHandler::HandleCookieControlsToggleChanged( |
| 53 | const base::ListValue* args) { |
| 54 | bool checked; |
| 55 | CHECK(args->GetBoolean(0, &checked)); |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 56 | service_->HandleCookieControlsToggleChanged(checked); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 57 | } |
| 58 | |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 59 | void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges( |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 60 | const base::ListValue* args) { |
| 61 | AllowJavascript(); |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 62 | SendCookieControlsUIChanges(); |
Huanzhong Huang | 2c4aee0 | 2019-10-16 08:17:01 | [diff] [blame] | 63 | } |
| 64 | |
Christian Dullweber | b3d12fc | 2020-05-20 08:52:46 | [diff] [blame^] | 65 | const char* CookieControlsHandler::GetEnforcementIcon( |
| 66 | CookieControlsEnforcement enforcement) { |
| 67 | switch (enforcement) { |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 68 | case CookieControlsEnforcement::kEnforcedByPolicy: |
| 69 | return kPolicyIcon; |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 70 | case CookieControlsEnforcement::kEnforcedByExtension: |
| 71 | return kExtensionIcon; |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 72 | case CookieControlsEnforcement::kEnforcedByCookieSetting: |
| 73 | return kSettingsIcon; |
| 74 | case CookieControlsEnforcement::kNoEnforcement: |
| 75 | return ""; |
| 76 | } |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 77 | } |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 78 | |
| 79 | void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() { |
| 80 | SendCookieControlsUIChanges(); |
| 81 | } |
| 82 | |
| 83 | void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() { |
| 84 | SendCookieControlsUIChanges(); |
| 85 | } |
| 86 | |
| 87 | void CookieControlsHandler::SendCookieControlsUIChanges() { |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 88 | base::DictionaryValue dict; |
| 89 | dict.SetBoolKey("enforced", service_->ShouldEnforceCookieControls()); |
| 90 | dict.SetBoolKey("checked", service_->GetToggleCheckedValue()); |
Christian Dullweber | b3d12fc | 2020-05-20 08:52:46 | [diff] [blame^] | 91 | dict.SetStringKey( |
| 92 | "icon", GetEnforcementIcon(service_->GetCookieControlsEnforcement())); |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 93 | 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 Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 98 | FireWebUIListener("cookie-controls-changed", dict); |
| 99 | } |