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 | |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 65 | const char* CookieControlsHandler::GetEnforcementIcon(Profile* profile) { |
| 66 | CookieControlsService* service = |
| 67 | CookieControlsServiceFactory::GetForProfile(profile); |
| 68 | switch (service->GetCookieControlsEnforcement()) { |
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; |
| 75 | case CookieControlsEnforcement::kNoEnforcement: |
| 76 | return ""; |
| 77 | } |
Huanzhong Huang | 04f8f4c5 | 2019-10-14 10:22:19 | [diff] [blame] | 78 | } |
Ehimare Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 79 | |
| 80 | void CookieControlsHandler::OnThirdPartyCookieBlockingPrefChanged() { |
| 81 | SendCookieControlsUIChanges(); |
| 82 | } |
| 83 | |
| 84 | void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged() { |
| 85 | SendCookieControlsUIChanges(); |
| 86 | } |
| 87 | |
| 88 | void 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 Dullweber | cce1b27b | 2020-04-01 00:15:39 | [diff] [blame] | 94 | 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 Okoyomon | 3fc4c3c | 2020-02-03 21:50:37 | [diff] [blame] | 99 | FireWebUIListener("cookie-controls-changed", dict); |
| 100 | } |