| Index: content/child/push_messaging/push_provider.cc
|
| diff --git a/content/child/push_messaging/push_provider.cc b/content/child/push_messaging/push_provider.cc
|
| index 6829d3869071f5e368e7405a45fdd5bc71e13c8b..e2965989f8dde895017b25655d764510354254a4 100644
|
| --- a/content/child/push_messaging/push_provider.cc
|
| +++ b/content/child/push_messaging/push_provider.cc
|
| @@ -51,6 +51,9 @@ PushProvider::~PushProvider() {
|
| STLDeleteContainerPairSecondPointers(permission_status_callbacks_.begin(),
|
| permission_status_callbacks_.end());
|
| permission_status_callbacks_.clear();
|
| + STLDeleteContainerPairSecondPointers(unregister_callbacks_.begin(),
|
| + unregister_callbacks_.end());
|
| + unregister_callbacks_.clear();
|
| g_push_provider_tls.Pointer()->Set(nullptr);
|
| }
|
|
|
| @@ -97,6 +100,21 @@ void PushProvider::getPermissionStatus(
|
| request_id, service_worker_registration_id));
|
| }
|
|
|
| +void PushProvider::unregister(
|
| + blink::WebServiceWorkerRegistration* service_worker_registration,
|
| + blink::WebPushUnregisterCallbacks* callback) {
|
| + DCHECK(service_worker_registration);
|
| + DCHECK(callback);
|
| +
|
| + int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId());
|
| + unregister_callbacks_[request_id] = callback;
|
| +
|
| + int64 service_worker_registration_id =
|
| + GetServiceWorkerRegistrationId(service_worker_registration);
|
| + thread_safe_sender_->Send(new PushMessagingHostMsg_Unregister(
|
| + request_id, service_worker_registration_id));
|
| +}
|
| +
|
| bool PushProvider::OnMessageReceived(const IPC::Message& message) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(PushProvider, message)
|
| @@ -108,6 +126,8 @@ bool PushProvider::OnMessageReceived(const IPC::Message& message) {
|
| OnGetPermissionStatusSuccess);
|
| IPC_MESSAGE_HANDLER(PushMessagingMsg_GetPermissionStatusError,
|
| OnGetPermissionStatusError);
|
| + IPC_MESSAGE_HANDLER(PushMessagingMsg_UnregisterResponse,
|
| + OnUnregisterResponse);
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
|
|
| @@ -171,4 +191,15 @@ void PushProvider::OnGetPermissionStatusError(int request_id) {
|
| callbacks->onError();
|
| }
|
|
|
| +void PushProvider::OnUnregisterResponse(int request_id, bool unregistered) {
|
| + const auto& it = unregister_callbacks_.find(request_id);
|
| + if (it == unregister_callbacks_.end())
|
| + return;
|
| +
|
| + scoped_ptr<blink::WebPushUnregisterCallbacks> callback(it->second);
|
| + unregister_callbacks_.erase(it);
|
| +
|
| + callback->onSuccess(&unregistered);
|
| +}
|
| +
|
| } // namespace content
|
|
|