summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/browser/push_messaging/push_messaging_router.cc30
-rw-r--r--content/browser/service_worker/service_worker_registration_status.cc1
-rw-r--r--content/browser/service_worker/service_worker_version.cc8
-rw-r--r--content/browser/service_worker/service_worker_version.h3
-rw-r--r--content/common/service_worker/service_worker_messages.h5
-rw-r--r--content/common/service_worker/service_worker_status_code.cc3
-rw-r--r--content/common/service_worker/service_worker_status_code.h3
-rw-r--r--content/public/common/push_messaging_status.h6
-rw-r--r--content/renderer/service_worker/service_worker_script_context.cc3
9 files changed, 51 insertions, 11 deletions
diff --git a/content/browser/push_messaging/push_messaging_router.cc b/content/browser/push_messaging/push_messaging_router.cc
index fc5218a..2fe0538 100644
--- a/content/browser/push_messaging/push_messaging_router.cc
+++ b/content/browser/push_messaging/push_messaging_router.cc
@@ -8,6 +8,7 @@
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/browser/service_worker/service_worker_storage.h"
+#include "content/common/service_worker/service_worker_status_code.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/storage_partition.h"
@@ -92,9 +93,32 @@ void PushMessagingRouter::DeliverMessageEnd(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
// TODO(mvanouwerkerk): UMA logging.
PushDeliveryStatus delivery_status =
- service_worker_status == SERVICE_WORKER_OK
- ? PUSH_DELIVERY_STATUS_SUCCESS
- : PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR;
+ PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR;
+ switch (service_worker_status) {
+ case SERVICE_WORKER_OK:
+ delivery_status = PUSH_DELIVERY_STATUS_SUCCESS;
+ break;
+ case SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED:
+ delivery_status = PUSH_DELIVERY_STATUS_EVENT_WAITUNTIL_REJECTED;
+ break;
+ case SERVICE_WORKER_ERROR_FAILED:
+ case SERVICE_WORKER_ERROR_ABORT:
+ case SERVICE_WORKER_ERROR_START_WORKER_FAILED:
+ case SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND:
+ case SERVICE_WORKER_ERROR_NOT_FOUND:
+ case SERVICE_WORKER_ERROR_IPC_FAILED:
+ delivery_status = PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR;
+ break;
+ case SERVICE_WORKER_ERROR_EXISTS:
+ case SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED:
+ case SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED:
+ case SERVICE_WORKER_ERROR_NETWORK:
+ case SERVICE_WORKER_ERROR_SECURITY:
+ NOTREACHED() << "Got unexpected error code: " << service_worker_status
+ << " " << ServiceWorkerStatusToString(service_worker_status);
+ delivery_status = PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR;
+ break;
+ }
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
diff --git a/content/browser/service_worker/service_worker_registration_status.cc b/content/browser/service_worker/service_worker_registration_status.cc
index e67b833..250fb3b 100644
--- a/content/browser/service_worker/service_worker_registration_status.cc
+++ b/content/browser/service_worker/service_worker_registration_status.cc
@@ -48,6 +48,7 @@ void GetServiceWorkerRegistrationStatusResponse(
case SERVICE_WORKER_ERROR_FAILED:
case SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND:
case SERVICE_WORKER_ERROR_EXISTS:
+ case SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED:
// Unexpected, or should have bailed out before calling this, or we don't
// have a corresponding blink error code yet.
break; // Fall through to NOTREACHED().
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index bea893b..ea621e5 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -737,7 +737,8 @@ void ServiceWorkerVersion::OnSyncEventFinished(
}
void ServiceWorkerVersion::OnPushEventFinished(
- int request_id) {
+ int request_id,
+ blink::WebServiceWorkerEventResult result) {
TRACE_EVENT1("ServiceWorker",
"ServiceWorkerVersion::OnPushEventFinished",
"Request id", request_id);
@@ -746,9 +747,12 @@ void ServiceWorkerVersion::OnPushEventFinished(
NOTREACHED() << "Got unexpected message: " << request_id;
return;
}
+ ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
+ if (result == blink::WebServiceWorkerEventResultRejected)
+ status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
scoped_refptr<ServiceWorkerVersion> protect(this);
- callback->Run(SERVICE_WORKER_OK);
+ callback->Run(status);
push_callbacks_.Remove(request_id);
}
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index fd8db5a..01383064 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -287,7 +287,8 @@ class CONTENT_EXPORT ServiceWorkerVersion
ServiceWorkerFetchEventResult result,
const ServiceWorkerResponse& response);
void OnSyncEventFinished(int request_id);
- void OnPushEventFinished(int request_id);
+ void OnPushEventFinished(int request_id,
+ blink::WebServiceWorkerEventResult result);
void OnGeofencingEventFinished(int request_id);
void OnPostMessageToDocument(int client_id,
const base::string16& message,
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h
index 7672048..f9ebecc 100644
--- a/content/common/service_worker/service_worker_messages.h
+++ b/content/common/service_worker/service_worker_messages.h
@@ -187,8 +187,9 @@ IPC_MESSAGE_ROUTED3(ServiceWorkerHostMsg_FetchEventFinished,
content::ServiceWorkerResponse)
IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_SyncEventFinished,
int /* request_id */)
-IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_PushEventFinished,
- int /* request_id */)
+IPC_MESSAGE_ROUTED2(ServiceWorkerHostMsg_PushEventFinished,
+ int /* request_id */,
+ blink::WebServiceWorkerEventResult)
IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_GeofencingEventFinished,
int /* request_id */)
diff --git a/content/common/service_worker/service_worker_status_code.cc b/content/common/service_worker/service_worker_status_code.cc
index a402a8a..f5c1e02 100644
--- a/content/common/service_worker/service_worker_status_code.cc
+++ b/content/common/service_worker/service_worker_status_code.cc
@@ -34,6 +34,9 @@ const char* ServiceWorkerStatusToString(ServiceWorkerStatusCode status) {
return "Operation failed by network issue";
case SERVICE_WORKER_ERROR_SECURITY:
return "Operation failed by security issue";
+ case SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED:
+ return "ServiceWorker failed to handle event (event.waitUntil "
+ "Promise rejected)";
}
NOTREACHED();
return "";
diff --git a/content/common/service_worker/service_worker_status_code.h b/content/common/service_worker/service_worker_status_code.h
index 953d533..e87e5c3 100644
--- a/content/common/service_worker/service_worker_status_code.h
+++ b/content/common/service_worker/service_worker_status_code.h
@@ -48,6 +48,9 @@ enum ServiceWorkerStatusCode {
// Operation is failed by security issue.
SERVICE_WORKER_ERROR_SECURITY,
+
+ // Event handling failed (event.waitUntil Promise rejected).
+ SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED,
};
CONTENT_EXPORT const char* ServiceWorkerStatusToString(
diff --git a/content/public/common/push_messaging_status.h b/content/public/common/push_messaging_status.h
index 22351ca..6ac9d96 100644
--- a/content/public/common/push_messaging_status.h
+++ b/content/public/common/push_messaging_status.h
@@ -51,10 +51,14 @@ enum PushDeliveryStatus {
// The message could not be delivered because of a service worker error.
PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR,
+ // The message was delivered, but the Service Worker passed a Promise to
+ // event.waitUntil that got rejected.
+ PUSH_DELIVERY_STATUS_EVENT_WAITUNTIL_REJECTED,
+
// When making changes, update PUSH_DELIVERY_STATUS_LAST below.
// Used for IPC message range checks.
- PUSH_DELIVERY_STATUS_LAST = PUSH_DELIVERY_STATUS_SERVICE_WORKER_ERROR
+ PUSH_DELIVERY_STATUS_LAST = PUSH_DELIVERY_STATUS_EVENT_WAITUNTIL_REJECTED
};
const char* PushRegistrationStatusToString(PushRegistrationStatus status);
diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc
index 33f4dd0..baf9060 100644
--- a/content/renderer/service_worker/service_worker_script_context.cc
+++ b/content/renderer/service_worker/service_worker_script_context.cc
@@ -132,7 +132,6 @@ void ServiceWorkerScriptContext::DidHandleFetchEvent(
void ServiceWorkerScriptContext::DidHandlePushEvent(
int request_id,
blink::WebServiceWorkerEventResult result) {
- // TODO(johnme): Plumb through the result.
if (result == blink::WebServiceWorkerEventResultCompleted) {
UMA_HISTOGRAM_TIMES(
"ServiceWorker.PushEventExecutionTime",
@@ -141,7 +140,7 @@ void ServiceWorkerScriptContext::DidHandlePushEvent(
push_start_timings_.erase(request_id);
Send(new ServiceWorkerHostMsg_PushEventFinished(
- GetRoutingID(), request_id));
+ GetRoutingID(), request_id, result));
}
void ServiceWorkerScriptContext::DidHandleSyncEvent(int request_id) {