Add ianwen to watch list for related projects
[chromium-blink-merge.git] / content / public / browser / push_messaging_service.h
blob2d8389f3ebe4951c5d51126ad5f598685bf22609
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_
8 #include <string>
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"
14 #include "url/gurl.h"
16 namespace content {
18 class BrowserContext;
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 {
24 public:
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,
31 bool success,
32 bool not_found)>;
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 // Subscribe 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
45 // to the user.
46 virtual void SubscribeFromDocument(const GURL& requesting_origin,
47 int64 service_worker_registration_id,
48 const std::string& sender_id,
49 int renderer_id,
50 int render_frame_id,
51 bool user_visible,
52 const RegisterCallback& callback) = 0;
54 // Subscribe 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 SubscribeFromWorker(const GURL& requesting_origin,
58 int64 service_worker_registration_id,
59 const std::string& sender_id,
60 bool user_visible,
61 const RegisterCallback& callback) = 0;
63 // Unsubscribe the given |sender_id| from the push messaging service. The
64 // subscription will be synchronously deactivated locally, and asynchronously
65 // sent to the push service, with automatic retry.
66 virtual void Unsubscribe(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;
80 // Returns whether subscriptions that do not mandate user visible UI upon
81 // receiving a push message are supported. Influences permission request and
82 // permission check behaviour.
83 virtual bool SupportNonVisibleMessages() = 0;
85 // Provide a storage mechanism to read/write an opaque
86 // "notifications_shown_by_last_few_pushes" string associated with a Service
87 // Worker registration. Stored data is deleted when the associated
88 // registration is deleted.
89 static void GetNotificationsShownByLastFewPushes(
90 ServiceWorkerContext* service_worker_context,
91 int64 service_worker_registration_id,
92 const StringCallback& callback);
93 static void SetNotificationsShownByLastFewPushes(
94 ServiceWorkerContext* service_worker_context,
95 int64 service_worker_registration_id,
96 const GURL& origin,
97 const std::string& notifications_shown,
98 const ResultCallback& callback);
100 protected:
101 static void GetSenderId(BrowserContext* browser_context,
102 const GURL& origin,
103 int64 service_worker_registration_id,
104 const StringCallback& callback);
106 // Clear the push subscription id stored in the service worker with the given
107 // |service_worker_registration_id| for the given |origin|.
108 static void ClearPushSubscriptionID(BrowserContext* browser_context,
109 const GURL& origin,
110 int64 service_worker_registration_id,
111 const base::Closure& callback);
114 } // namespace content
116 #endif // CONTENT_PUBLIC_BROWSER_PUSH_MESSAGING_SERVICE_H_