1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/safety_hub/notification_permission_review_result.h"
#include <set>
#include "chrome/app/chrome_command_ids.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
NotificationPermissions::NotificationPermissions(
const ContentSettingsPattern& primary_pattern,
const ContentSettingsPattern& secondary_pattern,
int notification_count)
: primary_pattern(primary_pattern),
secondary_pattern(secondary_pattern),
notification_count(notification_count) {}
NotificationPermissions::~NotificationPermissions() = default;
NotificationPermissionsReviewResult::NotificationPermissionsReviewResult() =
default;
NotificationPermissionsReviewResult::~NotificationPermissionsReviewResult() =
default;
NotificationPermissionsReviewResult::NotificationPermissionsReviewResult(
const NotificationPermissionsReviewResult&) = default;
void NotificationPermissionsReviewResult::AddNotificationPermission(
const NotificationPermissions& notification_permission) {
notification_permissions_.push_back(std::move(notification_permission));
}
base::Value::List
NotificationPermissionsReviewResult::GetSortedListValueForUI() {
base::Value::List result;
// Setting up the list for UI is done on the Android side.
#if !BUILDFLAG(IS_ANDROID)
const auto sorted_notification_permissions =
GetSortedNotificationPermissions();
// Each entry is a dictionary with origin as key and notification count as
// value.
for (const auto& notification_permission : sorted_notification_permissions) {
base::Value::Dict permission;
permission.Set(kSafetyHubOriginKey,
notification_permission.primary_pattern.ToString());
std::string notification_info_string = l10n_util::GetPluralStringFUTF8(
IDS_SETTINGS_SAFETY_CHECK_REVIEW_NOTIFICATION_PERMISSIONS_COUNT_LABEL,
notification_permission.notification_count);
permission.Set(kSafetyHubNotificationInfoString, notification_info_string);
result.Append(std::move(permission));
}
#endif
return result;
}
std::vector<NotificationPermissions>
NotificationPermissionsReviewResult::GetSortedNotificationPermissions() {
// Sort notification permissions by their priority for surfacing to the user.
auto notification_permission_ordering = [](const auto& left,
const auto& right) {
return left.notification_count > right.notification_count;
};
std::sort(notification_permissions_.begin(), notification_permissions_.end(),
notification_permission_ordering);
std::vector<NotificationPermissions> result(notification_permissions_);
return result;
}
std::set<ContentSettingsPattern>
NotificationPermissionsReviewResult::GetOrigins() const {
std::set<ContentSettingsPattern> origins;
for (const auto& permission : notification_permissions_) {
origins.insert(permission.primary_pattern);
}
return origins;
}
std::unique_ptr<SafetyHubService::Result>
NotificationPermissionsReviewResult::Clone() const {
return std::make_unique<NotificationPermissionsReviewResult>(*this);
}
base::Value::Dict NotificationPermissionsReviewResult::ToDictValue() const {
base::Value::Dict result = BaseToDictValue();
base::Value::List notification_permissions;
for (const auto& permission : notification_permissions_) {
base::Value::Dict permission_dict;
permission_dict.Set(kSafetyHubOriginKey,
permission.primary_pattern.ToString());
notification_permissions.Append(std::move(permission_dict));
}
result.Set(kSafetyHubNotificationPermissionsReviewResultKey,
std::move(notification_permissions));
return result;
}
bool NotificationPermissionsReviewResult::IsTriggerForMenuNotification() const {
return !notification_permissions_.empty();
}
bool NotificationPermissionsReviewResult::WarrantsNewMenuNotification(
const base::Value::Dict& previous_result_dict) const {
std::set<ContentSettingsPattern> old_origins;
for (const base::Value& permission : *previous_result_dict.FindList(
kSafetyHubNotificationPermissionsReviewResultKey)) {
const base::Value::Dict& notification_permission = permission.GetDict();
old_origins.insert(ContentSettingsPattern::FromString(
*notification_permission.FindString(kSafetyHubOriginKey)));
}
std::set<ContentSettingsPattern> new_origins = GetOrigins();
return !std::ranges::includes(old_origins, new_origins);
}
std::u16string NotificationPermissionsReviewResult::GetNotificationString()
const {
if (notification_permissions_.empty()) {
return std::u16string();
}
return l10n_util::GetPluralStringFUTF16(
IDS_SETTINGS_SAFETY_HUB_REVIEW_NOTIFICATION_PERMISSIONS_MENU_NOTIFICATION,
GetOrigins().size());
}
int NotificationPermissionsReviewResult::GetNotificationCommandId() const {
return IDC_OPEN_SAFETY_HUB;
}
|