#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "chrome/browser/extensions/api/notifications/notifications_api.h"
#include <stddef.h>
#include <utility>
#include "base/functional/callback.h"
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "base/uuid.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/api/notifications/extension_notification_display_helper.h"
#include "chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.h"
#include "chrome/browser/extensions/api/notifications/extension_notification_handler.h"
#include "chrome/browser/notifications/notification_common.h"
#include "chrome/browser/notifications/notification_handler.h"
#include "chrome/browser/notifications/notifier_state_tracker.h"
#include "chrome/browser/notifications/notifier_state_tracker_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/notifications/notification_style.h"
#include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h"
#include "components/keyed_service/core/keyed_service_shutdown_notifier.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/app_window/app_window.h"
#include "extensions/browser/app_window/app_window_registry.h"
#include "extensions/browser/app_window/native_app_window.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_system_provider.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_id.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/resource/resource_scale_factor.h"
#include "ui/gfx/geometry/skia_conversions.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/image/image_skia_rep.h"
#include "ui/message_center/public/cpp/message_center_constants.h"
#include "ui/message_center/public/cpp/notification.h"
#include "ui/message_center/public/cpp/notification_delegate.h"
#include "ui/message_center/public/cpp/notifier_id.h"
#include "url/gurl.h"
NotifierId;
namespace extensions {
notifications;
namespace {
constexpr int kNotificationIdLengthLimit = …;
const char kMissingRequiredPropertiesForCreateNotification[] = …;
const char kUnableToDecodeIconError[] = …;
const char kUnexpectedProgressValueForNonProgressType[] = …;
const char kInvalidProgressValue[] = …;
const char kExtraListItemsProvided[] = …;
const char kExtraImageProvided[] = …;
const char kNotificationIdTooLong[] = …;
#if !BUILDFLAG(IS_CHROMEOS)
const char kLowPriorityDeprecatedOnPlatform[] = …;
#endif
std::string CreateScopedIdentifier(const ExtensionId& extension_id,
const std::string& id) { … }
std::string StripScopeFromIdentifier(const ExtensionId& extension_id,
const std::string& scoped_id) { … }
bool NotificationBitmapToGfxImage(
float max_scale,
const gfx::Size& target_size_dips,
const notifications::NotificationBitmap& notification_bitmap,
gfx::Image* return_image) { … }
bool ShouldShowOverCurrentFullscreenWindow(Profile* profile,
const GURL& origin) { … }
}
bool NotificationsApiFunction::IsNotificationsApiAvailable() { … }
NotificationsApiFunction::NotificationsApiFunction() { … }
NotificationsApiFunction::~NotificationsApiFunction() { … }
bool NotificationsApiFunction::CreateNotification(
const std::string& id,
api::notifications::NotificationOptions* options,
std::string* error) { … }
bool NotificationsApiFunction::UpdateNotification(
const std::string& id,
api::notifications::NotificationOptions* options,
message_center::Notification* notification,
std::string* error) { … }
bool NotificationsApiFunction::AreExtensionNotificationsAllowed() const { … }
bool NotificationsApiFunction::IsNotificationsApiEnabled() const { … }
bool NotificationsApiFunction::CanRunWhileDisabled() const { … }
ExtensionNotificationDisplayHelper* NotificationsApiFunction::GetDisplayHelper()
const { … }
Profile* NotificationsApiFunction::GetProfile() const { … }
ExtensionFunction::ResponseAction NotificationsApiFunction::Run() { … }
message_center::NotificationType
NotificationsApiFunction::MapApiTemplateTypeToType(
api::notifications::TemplateType type) { … }
NotificationsCreateFunction::NotificationsCreateFunction() { … }
NotificationsCreateFunction::~NotificationsCreateFunction() { … }
ExtensionFunction::ResponseAction
NotificationsCreateFunction::RunNotificationsApi() { … }
NotificationsUpdateFunction::NotificationsUpdateFunction() { … }
NotificationsUpdateFunction::~NotificationsUpdateFunction() { … }
ExtensionFunction::ResponseAction
NotificationsUpdateFunction::RunNotificationsApi() { … }
NotificationsClearFunction::NotificationsClearFunction() { … }
NotificationsClearFunction::~NotificationsClearFunction() { … }
ExtensionFunction::ResponseAction
NotificationsClearFunction::RunNotificationsApi() { … }
NotificationsGetAllFunction::NotificationsGetAllFunction() { … }
NotificationsGetAllFunction::~NotificationsGetAllFunction() { … }
ExtensionFunction::ResponseAction
NotificationsGetAllFunction::RunNotificationsApi() { … }
NotificationsGetPermissionLevelFunction::
NotificationsGetPermissionLevelFunction() { … }
NotificationsGetPermissionLevelFunction::
~NotificationsGetPermissionLevelFunction() { … }
bool NotificationsGetPermissionLevelFunction::CanRunWhileDisabled() const { … }
ExtensionFunction::ResponseAction
NotificationsGetPermissionLevelFunction::RunNotificationsApi() { … }
}