| Index: content/browser/service_worker/service_worker_version.h
|
| diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
|
| index 2b7009d48d6e57f74dcb814e85136822c1270c88..6372237a1bd0748d3eae3c3ac9871b950ac5cc86 100644
|
| --- a/content/browser/service_worker/service_worker_version.h
|
| +++ b/content/browser/service_worker/service_worker_version.h
|
| @@ -226,6 +226,17 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| const IPC::Message& message,
|
| const ResponseCallbackType& callback);
|
|
|
| + // Combines StartRequest and DispatchEvent, and automatically calls
|
| + // FinishRequest before passing a response to the response callback.
|
| + // ResponseMessage must have a int request_id and
|
| + // blink::WebServiceWorkerEventResult.
|
| + template <typename EventMessage,
|
| + typename ResponseMessage,
|
| + typename... EventArgs>
|
| + int DispatchSimpleEvent(ServiceWorkerMetrics::EventType event_type,
|
| + const StatusCallback& callback,
|
| + EventArgs... event_args);
|
| +
|
| // Sends a message event to the associated embedded worker.
|
| void DispatchMessageEvent(
|
| const base::string16& message,
|
| @@ -272,14 +283,6 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| const PlatformNotificationData& notification_data,
|
| int action_index);
|
|
|
| - // Sends push event to the associated embedded worker and asynchronously calls
|
| - // |callback| when it errors out or it gets a response from the worker to
|
| - // notify completion.
|
| - //
|
| - // This must be called when the status() is ACTIVATED.
|
| - void DispatchPushEvent(const StatusCallback& callback,
|
| - const std::string& data);
|
| -
|
| // Sends a cross origin message event to the associated embedded worker and
|
| // asynchronously calls |callback| when the message was sent (or failed to
|
| // sent).
|
| @@ -406,7 +409,6 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| REQUEST_INSTALL,
|
| REQUEST_FETCH,
|
| REQUEST_NOTIFICATION_CLICK,
|
| - REQUEST_PUSH,
|
| REQUEST_CUSTOM,
|
| NUM_REQUEST_TYPES
|
| };
|
| @@ -568,8 +570,6 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| ServiceWorkerFetchEventResult result,
|
| const ServiceWorkerResponse& response);
|
| void OnNotificationClickEventFinished(int request_id);
|
| - void OnPushEventFinished(int request_id,
|
| - blink::WebServiceWorkerEventResult result);
|
| void OnOpenWindow(int request_id, GURL url);
|
| void OnOpenWindowFinished(int request_id,
|
| ServiceWorkerStatusCode status,
|
| @@ -679,6 +679,19 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| // event ended).
|
| void OnBeginEvent();
|
|
|
| + void ResponseCallbackWrapper(const StatusCallback& callback,
|
| + int request_id,
|
| + blink::WebServiceWorkerEventResult result) {
|
| + // TODO(mek): trace?
|
| + if (!FinishRequest(request_id))
|
| + NOTREACHED() << "Should only receive one reply per event";
|
| +
|
| + ServiceWorkerStatusCode status = SERVICE_WORKER_OK;
|
| + if (result == blink::WebServiceWorkerEventResultRejected)
|
| + status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
|
| + callback.Run(status);
|
| + }
|
| +
|
| const int64_t version_id_;
|
| const int64_t registration_id_;
|
| const GURL script_url_;
|
| @@ -698,7 +711,6 @@ class CONTENT_EXPORT ServiceWorkerVersion
|
| IDMap<PendingRequest<FetchCallback>, IDMapOwnPointer> fetch_requests_;
|
| IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer>
|
| notification_click_requests_;
|
| - IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer> push_requests_;
|
| IDMap<PendingRequest<StatusCallback>, IDMapOwnPointer> custom_requests_;
|
|
|
| // Stores all open connections to mojo services. Maps the service name to
|
| @@ -810,6 +822,21 @@ void ServiceWorkerVersion::DispatchEvent(int request_id,
|
| }
|
| }
|
|
|
| +template <typename EventMessage,
|
| + typename ResponseMessage,
|
| + typename... EventArgs>
|
| +int ServiceWorkerVersion::DispatchSimpleEvent(
|
| + ServiceWorkerMetrics::EventType event_type,
|
| + const StatusCallback& callback,
|
| + EventArgs... event_args) {
|
| + int request_id = StartRequest(event_type, callback);
|
| + DispatchEvent<ResponseMessage>(
|
| + request_id, EventMessage(request_id, event_args...),
|
| + base::Bind(&ServiceWorkerVersion::ResponseCallbackWrapper, this,
|
| + callback));
|
| + return request_id;
|
| +}
|
| +
|
| template <typename ResponseMessage, typename CallbackType>
|
| bool ServiceWorkerVersion::EventResponseHandler<ResponseMessage, CallbackType>::
|
| OnMessageReceived(const IPC::Message& message) {
|
| @@ -820,6 +847,7 @@ bool ServiceWorkerVersion::EventResponseHandler<ResponseMessage, CallbackType>::
|
| if (!result || received_request_id != request_id_)
|
| return false;
|
|
|
| + CallbackType protect(callback_);
|
| // Essentially same code as what IPC_MESSAGE_FORWARD expands to.
|
| void* param = nullptr;
|
| if (!ResponseMessage::Dispatch(&message, &callback_, this, param,
|
|
|