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 0075650634acd47807f74ea2b277aefb8234ec91..64b3409c82278f64b36fe4356665a34ea7e1e009 100644 |
--- a/content/child/push_messaging/push_provider.cc |
+++ b/content/child/push_messaging/push_provider.cc |
@@ -13,7 +13,6 @@ |
#include "content/child/thread_safe_sender.h" |
#include "content/child/worker_task_runner.h" |
#include "content/common/push_messaging_messages.h" |
-#include "third_party/WebKit/public/platform/WebPushError.h" |
#include "third_party/WebKit/public/platform/WebPushRegistration.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
@@ -78,6 +77,21 @@ void PushProvider::registerPushMessaging( |
request_id, service_worker_registration_id)); |
} |
+void PushProvider::unregister( |
+ blink::WebServiceWorkerRegistration* service_worker_registration, |
+ blink::WebPushUnregisterCallbacks* callbacks) { |
+ DCHECK(service_worker_registration); |
+ DCHECK(callbacks); |
+ |
+ int request_id = push_dispatcher_->GenerateRequestId(CurrentWorkerId()); |
+ unregister_callbacks_.AddWithID(callbacks, request_id); |
+ |
+ int64 service_worker_registration_id = |
+ GetServiceWorkerRegistrationId(service_worker_registration); |
+ thread_safe_sender_->Send(new PushMessagingHostMsg_Unregister( |
+ request_id, service_worker_registration_id)); |
+} |
+ |
void PushProvider::getPermissionStatus( |
blink::WebServiceWorkerRegistration* service_worker_registration, |
blink::WebPushPermissionStatusCallbacks* callbacks) { |
@@ -98,6 +112,10 @@ bool PushProvider::OnMessageReceived(const IPC::Message& message) { |
OnRegisterFromWorkerSuccess); |
IPC_MESSAGE_HANDLER(PushMessagingMsg_RegisterFromWorkerError, |
OnRegisterFromWorkerError); |
+ IPC_MESSAGE_HANDLER(PushMessagingMsg_UnregisterSuccess, |
+ OnUnregisterSuccess); |
+ IPC_MESSAGE_HANDLER(PushMessagingMsg_UnregisterError, |
+ OnUnregisterError); |
IPC_MESSAGE_HANDLER(PushMessagingMsg_GetPermissionStatusSuccess, |
OnGetPermissionStatusSuccess); |
IPC_MESSAGE_HANDLER(PushMessagingMsg_GetPermissionStatusError, |
@@ -141,6 +159,33 @@ void PushProvider::OnRegisterFromWorkerError(int request_id, |
registration_callbacks_.Remove(request_id); |
} |
+void PushProvider::OnUnregisterSuccess(int request_id, bool did_unregister) { |
+ blink::WebPushUnregisterCallbacks* callbacks = |
+ unregister_callbacks_.Lookup(request_id); |
+ if (!callbacks) |
+ return; |
+ |
+ callbacks->onSuccess(&did_unregister); |
+ |
+ unregister_callbacks_.Remove(request_id); |
+} |
+ |
+void PushProvider::OnUnregisterError( |
+ int request_id, |
+ blink::WebPushError::ErrorType error_type, |
+ const std::string& error_message) { |
+ blink::WebPushUnregisterCallbacks* callbacks = |
+ unregister_callbacks_.Lookup(request_id); |
+ if (!callbacks) |
+ return; |
+ |
+ scoped_ptr<blink::WebPushError> error(new blink::WebPushError( |
+ error_type, blink::WebString::fromUTF8(error_message))); |
+ callbacks->onError(error.release()); |
+ |
+ unregister_callbacks_.Remove(request_id); |
+} |
+ |
void PushProvider::OnGetPermissionStatusSuccess( |
int request_id, |
blink::WebPushPermissionStatus status) { |