// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_PUSH_MESSAGING_PUSH_MESSAGING_NOTIFICATION_MANAGER_H_ #define CHROME_BROWSER_PUSH_MESSAGING_PUSH_MESSAGING_NOTIFICATION_MANAGER_H_ #include #include #include "base/callback_forward.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" class GURL; class Profile; namespace content { struct NotificationDatabaseData; struct PlatformNotificationData; } // Developers may be required to display a Web Notification in response to an // incoming push message in order to clarify to the user that something has // happened in the background. When they forget to do so, a default notification // has to be displayed on their behalf. // // This class implements the heuristics for determining whether the default // notification is necessary, as well as the functionality of displaying the // default notification when it is. // // See the following document and bug for more context: // https://docs.google.com/document/d/13VxFdLJbMwxHrvnpDm8RXnU41W2ZlcP0mdWWe9zXQT8/edit // https://crbug.com/437277 class PushMessagingNotificationManager { public: explicit PushMessagingNotificationManager(Profile* profile); ~PushMessagingNotificationManager(); // Enforces the requirements implied for push subscriptions which must display // a Web Notification in response to an incoming message. void EnforceUserVisibleOnlyRequirements( const GURL& requesting_origin, int64_t service_worker_registration_id, const base::Closure& message_handled_closure); private: static void DidGetNotificationsFromDatabaseIOProxy( const base::WeakPtr& ui_weak_ptr, const GURL& requesting_origin, int64_t service_worker_registration_id, const base::Closure& message_handled_closure, bool success, const std::vector& data); void DidGetNotificationsFromDatabase( const GURL& requesting_origin, int64_t service_worker_registration_id, const base::Closure& message_handled_closure, bool success, const std::vector& data); void DidGetNotificationsShownAndNeeded( const GURL& requesting_origin, int64_t service_worker_registration_id, bool notification_shown, bool notification_needed, const base::Closure& message_handled_closure, const std::string& data, bool success, bool not_found); static void DidWriteNotificationDataIOProxy( const base::WeakPtr& ui_weak_ptr, const GURL& requesting_origin, const content::PlatformNotificationData& notification_data, const base::Closure& message_handled_closure, bool success, int64_t persistent_notification_id); void DidWriteNotificationData( const GURL& requesting_origin, const content::PlatformNotificationData& notification_data, const base::Closure& message_handled_closure, bool success, int64_t persistent_notification_id); // Weak. This manager is owned by a keyed service on this profile. Profile* profile_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(PushMessagingNotificationManager); }; #endif // CHROME_BROWSER_PUSH_MESSAGING_PUSH_MESSAGING_NOTIFICATION_MANAGER_H_