Avi Drissman | 4a8573c | 2022-09-09 19:35:54 | [diff] [blame] | 1 | // Copyright 2019 The Chromium Authors |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 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 | |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 9 | #include "base/feature_list.h" |
Avi Drissman | 9269d4ed | 2023-01-07 01:38:06 | [diff] [blame] | 10 | #include "base/functional/bind.h" |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 11 | #include "base/values.h" |
| 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" |
Sean Harrison | c6968847 | 2021-02-19 17:08:20 | [diff] [blame] | 16 | #include "chrome/common/webui_url_constants.h" |
Mugdha Lakhani | 47e07fe | 2020-04-17 19:06:01 | [diff] [blame] | 17 | #include "components/content_settings/core/common/cookie_controls_enforcement.h" |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 18 | |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 19 | namespace { |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 20 | static const char* kPolicyIcon = "cr20:domain"; |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 21 | static const char* kExtensionIcon = "cr:extension"; |
| 22 | static const char* kSettingsIcon = "cr:settings_icon"; |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 23 | } // namespace |
| 24 | |
Ehimare Okoyomon | b57d396b | 2020-03-06 14:51:10 | [diff] [blame] | 25 | CookieControlsHandler::CookieControlsHandler(Profile* profile) |
| 26 | : service_(CookieControlsServiceFactory::GetForProfile(profile)) {} |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 27 | |
Ehimare Okoyomon | b57d396b | 2020-03-06 14:51:10 | [diff] [blame] | 28 | CookieControlsHandler::~CookieControlsHandler() { |
| 29 | service_->RemoveObserver(this); |
| 30 | } |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 31 | |
| 32 | void CookieControlsHandler::RegisterMessages() { |
Michael Wilson | f16cccf | 2022-03-28 15:29:10 | [diff] [blame] | 33 | web_ui()->RegisterMessageCallback( |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 34 | "cookieControlsToggleChanged", |
| 35 | base::BindRepeating( |
| 36 | &CookieControlsHandler::HandleCookieControlsToggleChanged, |
| 37 | base::Unretained(this))); |
Michael Wilson | f16cccf | 2022-03-28 15:29:10 | [diff] [blame] | 38 | web_ui()->RegisterMessageCallback( |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 39 | "observeCookieControlsSettingsChanges", |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 40 | base::BindRepeating( |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 41 | &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges, |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 42 | base::Unretained(this))); |
| 43 | } |
| 44 | |
| 45 | void CookieControlsHandler::OnJavascriptAllowed() { |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 46 | service_->AddObserver(this); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | void CookieControlsHandler::OnJavascriptDisallowed() { |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 50 | service_->RemoveObserver(this); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 51 | } |
| 52 | |
| 53 | void CookieControlsHandler::HandleCookieControlsToggleChanged( |
Michael Wilson | f16cccf | 2022-03-28 15:29:10 | [diff] [blame] | 54 | const base::Value::List& args) { |
| 55 | CHECK(!args.empty()); |
| 56 | const bool checked = args[0].GetBool(); |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 57 | service_->HandleCookieControlsToggleChanged(checked); |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 58 | } |
| 59 | |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 60 | void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges( |
Michael Wilson | f16cccf | 2022-03-28 15:29:10 | [diff] [blame] | 61 | const base::Value::List& args) { |
Huanzhong Huang | 8c0fbfa6 | 2019-10-07 10:49:05 | [diff] [blame] | 62 | AllowJavascript(); |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 63 | SendCookieControlsUIChanges(); |
Huanzhong Huang | 2c4aee0 | 2019-10-16 08:17:01 | [diff] [blame] | 64 | } |
| 65 | |
Christian Dullweber | b3d12fc | 2020-05-20 08:52:46 | [diff] [blame] | 66 | const char* CookieControlsHandler::GetEnforcementIcon( |
| 67 | CookieControlsEnforcement enforcement) { |
| 68 | switch (enforcement) { |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 69 | case CookieControlsEnforcement::kEnforcedByPolicy: |
| 70 | return kPolicyIcon; |
Christian Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 71 | case CookieControlsEnforcement::kEnforcedByExtension: |
| 72 | return kExtensionIcon; |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 73 | case CookieControlsEnforcement::kEnforcedByCookieSetting: |
| 74 | return kSettingsIcon; |
Alvin Lam | 0242a42 | 2023-10-17 17:03:07 | [diff] [blame] | 75 | case CookieControlsEnforcement::kEnforcedByTpcdGrant: |
Christian Dullweber | d16bc1a0 | 2019-12-13 12:06:35 | [diff] [blame] | 76 | case CookieControlsEnforcement::kNoEnforcement: |
| 77 | return ""; |
| 78 | } |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 79 | } |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 80 | |
| 81 | void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() { |
| 82 | SendCookieControlsUIChanges(); |
| 83 | } |
| 84 | |
| 85 | void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() { |
| 86 | SendCookieControlsUIChanges(); |
| 87 | } |
| 88 | |
| 89 | void CookieControlsHandler::SendCookieControlsUIChanges() { |
Claudio DeSouza | 2b8bdca | 2022-08-09 09:57:59 | [diff] [blame] | 90 | 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 Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 96 | FireWebUIListener("cookie-controls-changed", dict); |
| 97 | } |