Index: content/browser/push_messaging/push_messaging_message_filter.cc |
diff --git a/content/browser/push_messaging/push_messaging_message_filter.cc b/content/browser/push_messaging/push_messaging_message_filter.cc |
index ab3b96af9d6cb10083f7acabdfbd1d8758274ef2..bd67fc9c8cfeeb6c3dab9611035295f93b61e51d 100644 |
--- a/content/browser/push_messaging/push_messaging_message_filter.cc |
+++ b/content/browser/push_messaging/push_messaging_message_filter.cc |
@@ -367,18 +367,66 @@ void PushMessagingMessageFilter::OnUnregister( |
service_worker_context_->context()->storage()->GetUserData( |
service_worker_registration_id, |
kPushRegistrationIdServiceWorkerKey, |
- base::Bind(&PushMessagingMessageFilter::DoUnregister, |
+ base::Bind(&PushMessagingMessageFilter::UnregisterWithPushRegistrationId, |
weak_factory_io_to_io_.GetWeakPtr(), |
request_id, |
service_worker_registration_id, |
service_worker_registration->pattern().GetOrigin())); |
} |
-void PushMessagingMessageFilter::DoUnregister( |
+void PushMessagingMessageFilter::UnregisterWithPushRegistrationId( |
int request_id, |
int64 service_worker_registration_id, |
const GURL& requesting_origin, |
- const std::string& push_registration_id, |
+ const std::string& push_registration_id, // Unused, we just want the status |
+ ServiceWorkerStatusCode service_worker_status) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ switch (service_worker_status) { |
+ case SERVICE_WORKER_OK: |
+ service_worker_context_->context()->storage()->GetUserData( |
+ service_worker_registration_id, |
+ kSenderIdServiceWorkerKey, |
+ base::Bind( |
+ &PushMessagingMessageFilter::UnregisterWithSenderId, |
+ weak_factory_io_to_io_.GetWeakPtr(), |
+ request_id, |
+ service_worker_registration_id, |
+ requesting_origin)); |
+ return; |
+ case SERVICE_WORKER_ERROR_NOT_FOUND: |
+ // We did not find a registration, stop here and notify the renderer that |
+ // it was a success even though we did not unregister. |
+ DidUnregister(request_id, |
+ PUSH_UNREGISTRATION_STATUS_SUCCESS_WAS_NOT_REGISTERED); |
+ return; |
+ case SERVICE_WORKER_ERROR_FAILED: |
+ DidUnregister(request_id, |
+ PUSH_UNREGISTRATION_STATUS_UNKNOWN_ERROR); |
+ return; |
+ case SERVICE_WORKER_ERROR_ABORT: |
+ case SERVICE_WORKER_ERROR_START_WORKER_FAILED: |
+ case SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND: |
+ case SERVICE_WORKER_ERROR_EXISTS: |
+ case SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED: |
+ case SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED: |
+ case SERVICE_WORKER_ERROR_IPC_FAILED: |
+ case SERVICE_WORKER_ERROR_NETWORK: |
+ case SERVICE_WORKER_ERROR_SECURITY: |
+ case SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED: |
+ case SERVICE_WORKER_ERROR_STATE: |
+ NOTREACHED() << "Got unexpected error code: " << service_worker_status |
+ << " " << ServiceWorkerStatusToString(service_worker_status); |
+ DidUnregister(request_id, PUSH_UNREGISTRATION_STATUS_UNKNOWN_ERROR); |
+ return; |
+ } |
+} |
+ |
+void PushMessagingMessageFilter::UnregisterWithSenderId( |
+ int request_id, |
+ int64 service_worker_registration_id, |
+ const GURL& requesting_origin, |
+ const std::string& sender_id, |
ServiceWorkerStatusCode service_worker_status) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -390,7 +438,8 @@ void PushMessagingMessageFilter::DoUnregister( |
this, |
request_id, |
service_worker_registration_id, |
- requesting_origin)); |
+ requesting_origin, |
+ sender_id)); |
return; |
case SERVICE_WORKER_ERROR_NOT_FOUND: |
// We did not find a registration, stop here and notify the renderer that |
@@ -423,14 +472,16 @@ void PushMessagingMessageFilter::DoUnregister( |
void PushMessagingMessageFilter::UnregisterFromService( |
int request_id, |
int64 service_worker_registration_id, |
- const GURL& requesting_origin) { |
+ const GURL& requesting_origin, |
+ const std::string& sender_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!service()) { |
DidUnregister(request_id, PUSH_UNREGISTRATION_STATUS_UNKNOWN_ERROR); |
return; |
} |
- service()->Unregister(requesting_origin, service_worker_registration_id, |
+ service()->Unregister( |
+ requesting_origin, service_worker_registration_id, sender_id, |
base::Bind(&PushMessagingMessageFilter::DidUnregisterFromService, |
weak_factory_ui_to_ui_.GetWeakPtr(), |
request_id, |