1 // Copyright 2014 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.
5 #ifndef CONTENT_PUBLIC_BROWSER_PUSH_MESSAGING_SERVICE_H_
6 #define CONTENT_PUBLIC_BROWSER_PUSH_MESSAGING_SERVICE_H_
10 #include "base/callback_forward.h"
11 #include "content/common/content_export.h"
12 #include "content/public/common/push_messaging_status.h"
13 #include "third_party/WebKit/public/platform/modules/push_messaging/WebPushPermissionStatus.h"
19 class ServiceWorkerContext
;
21 // A push service-agnostic interface that the Push API uses for talking to
22 // push messaging services like GCM. Must only be used on the UI thread.
23 class CONTENT_EXPORT PushMessagingService
{
25 using RegisterCallback
=
26 base::Callback
<void(const std::string
& /* registration_id */,
27 PushRegistrationStatus
/* status */)>;
28 using UnregisterCallback
= base::Callback
<void(PushUnregistrationStatus
)>;
30 using StringCallback
= base::Callback
<void(const std::string
& data
,
34 using ResultCallback
= base::Callback
<void(bool success
)>;
36 virtual ~PushMessagingService() {}
38 // Returns the absolute URL exposed by the push server where the webapp server
39 // can send push messages. This is currently assumed to be the same for all
40 // origins and push registrations.
41 virtual GURL
GetPushEndpoint() = 0;
43 // Register the given |sender_id| with the push messaging service in a
44 // document context. The frame is known and a permission UI may be displayed
46 virtual void RegisterFromDocument(const GURL
& requesting_origin
,
47 int64 service_worker_registration_id
,
48 const std::string
& sender_id
,
52 const RegisterCallback
& callback
) = 0;
54 // Register the given |sender_id| with the push messaging service. The frame
55 // is not known so if permission was not previously granted by the user this
56 // request should fail.
57 virtual void RegisterFromWorker(const GURL
& requesting_origin
,
58 int64 service_worker_registration_id
,
59 const std::string
& sender_id
,
61 const RegisterCallback
& callback
) = 0;
63 // Unregister the given |sender_id| from the push messaging service. The
64 // registration will be synchronously deactivated locally, and asynchronously
65 // sent to the push service, with automatic retry.
66 virtual void Unregister(const GURL
& requesting_origin
,
67 int64 service_worker_registration_id
,
68 const std::string
& sender_id
,
69 const UnregisterCallback
& callback
) = 0;
71 // Checks the permission status for the requesting origin. Permission is only
72 // ever granted when the requesting origin matches the top level embedding
73 // origin. The |user_visible| boolean indicates whether the permission status
74 // only has to cover push messages resulting in visible effects to the user.
75 virtual blink::WebPushPermissionStatus
GetPermissionStatus(
76 const GURL
& requesting_origin
,
77 const GURL
& embedding_origin
,
78 bool user_visible
) = 0;
81 // Provide a storage mechanism to read/write an opaque
82 // "notifications_shown_by_last_few_pushes" string associated with a Service
83 // Worker registration. Stored data is deleted when the associated
84 // registration is deleted.
85 static void GetNotificationsShownByLastFewPushes(
86 ServiceWorkerContext
* service_worker_context
,
87 int64 service_worker_registration_id
,
88 const StringCallback
& callback
);
89 static void SetNotificationsShownByLastFewPushes(
90 ServiceWorkerContext
* service_worker_context
,
91 int64 service_worker_registration_id
,
93 const std::string
& notifications_shown
,
94 const ResultCallback
& callback
);
96 static void GetSenderId(BrowserContext
* browser_context
,
98 int64 service_worker_registration_id
,
99 const StringCallback
& callback
);
101 // Clear the push registration id stored in the service worker with the given
102 // |service_worker_registration_id| for the given |origin|.
103 static void ClearPushRegistrationID(BrowserContext
* browser_context
,
105 int64 service_worker_registration_id
,
106 const base::Closure
& callback
);
109 } // namespace content
111 #endif // CONTENT_PUBLIC_BROWSER_PUSH_MESSAGING_SERVICE_H_