| Index: extensions/browser/extension_service_worker_message_filter.cc
|
| diff --git a/extensions/browser/extension_service_worker_message_filter.cc b/extensions/browser/extension_service_worker_message_filter.cc
|
| index fa3357e7903bf05e56aeef2ca3cf00d0721b5b10..98195f401313b35f708deac4047309b63e3d3679 100644
|
| --- a/extensions/browser/extension_service_worker_message_filter.cc
|
| +++ b/extensions/browser/extension_service_worker_message_filter.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "extensions/browser/extension_service_worker_message_filter.h"
|
|
|
| +#include "content/public/browser/service_worker_context.h"
|
| +#include "extensions/browser/bad_message.h"
|
| #include "extensions/browser/extension_function_dispatcher.h"
|
| #include "extensions/common/extension_messages.h"
|
|
|
| @@ -11,9 +13,11 @@ namespace extensions {
|
|
|
| ExtensionServiceWorkerMessageFilter::ExtensionServiceWorkerMessageFilter(
|
| int render_process_id,
|
| - content::BrowserContext* context)
|
| + content::BrowserContext* context,
|
| + content::ServiceWorkerContext* service_worker_context)
|
| : content::BrowserMessageFilter(ExtensionWorkerMsgStart),
|
| render_process_id_(render_process_id),
|
| + service_worker_context_(service_worker_context),
|
| dispatcher_(new ExtensionFunctionDispatcher(context)) {}
|
|
|
| ExtensionServiceWorkerMessageFilter::~ExtensionServiceWorkerMessageFilter() {
|
| @@ -33,6 +37,10 @@ bool ExtensionServiceWorkerMessageFilter::OnMessageReceived(
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(ExtensionServiceWorkerMessageFilter, message)
|
| IPC_MESSAGE_HANDLER(ExtensionHostMsg_RequestWorker, OnRequestWorker)
|
| + IPC_MESSAGE_HANDLER(ExtensionHostMsg_IncrementServiceWorkerActivity,
|
| + OnIncrementServiceWorkerActivity)
|
| + IPC_MESSAGE_HANDLER(ExtensionHostMsg_DecrementServiceWorkerActivity,
|
| + OnDecrementServiceWorkerActivity)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -44,4 +52,27 @@ void ExtensionServiceWorkerMessageFilter::OnRequestWorker(
|
| dispatcher_->Dispatch(params, nullptr, render_process_id_);
|
| }
|
|
|
| +void ExtensionServiceWorkerMessageFilter::OnIncrementServiceWorkerActivity(
|
| + int64_t service_worker_version_id,
|
| + const std::string& request_uuid) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| + // The worker might have already stopped before we got here, so the increment
|
| + // below might fail legitimately. Therefore, we do not send bad_message to the
|
| + // worker even if it fails.
|
| + service_worker_context_->StartingExternalRequest(service_worker_version_id,
|
| + request_uuid);
|
| +}
|
| +
|
| +void ExtensionServiceWorkerMessageFilter::OnDecrementServiceWorkerActivity(
|
| + int64_t service_worker_version_id,
|
| + const std::string& request_uuid) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
| + bool status = service_worker_context_->FinishedExternalRequest(
|
| + service_worker_version_id, request_uuid);
|
| + if (!status) {
|
| + bad_message::ReceivedBadMessage(
|
| + this, bad_message::ESWMF_INVALID_DECREMENT_ACTIVIY);
|
| + }
|
| +}
|
| +
|
| } // namespace extensions
|
|
|