| Index: content/browser/service_worker/service_worker_register_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
|
| index a3c5b69c6803fd001f8002068c1f6eeabc6f19ab..5564f727e88acd2d4a3ccacf407c039bc7783944 100644
|
| --- a/content/browser/service_worker/service_worker_register_job.cc
|
| +++ b/content/browser/service_worker/service_worker_register_job.cc
|
| @@ -17,16 +17,47 @@
|
| #include "content/browser/service_worker/service_worker_registration.h"
|
| #include "content/browser/service_worker/service_worker_storage.h"
|
| #include "content/browser/service_worker/service_worker_write_to_cache_job.h"
|
| +#include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
|
| #include "content/common/service_worker/service_worker_messages.h"
|
| #include "content/common/service_worker/service_worker_types.h"
|
| #include "content/common/service_worker/service_worker_utils.h"
|
| #include "content/public/browser/browser_thread.h"
|
| +#include "mojo/public/cpp/bindings/associated_binding.h"
|
| #include "net/base/net_errors.h"
|
|
|
| namespace content {
|
|
|
| namespace {
|
|
|
| +class InstallEventMethodsReceiver
|
| + : public mojom::ServiceWorkerInstallEventMethods {
|
| + public:
|
| + InstallEventMethodsReceiver(ServiceWorkerVersion* version)
|
| + : version_(version), install_methods_binding_(this) {}
|
| + ~InstallEventMethodsReceiver() override {}
|
| +
|
| + void BindInterface(
|
| + mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo* ptr_info) {
|
| + install_methods_binding_.Bind(ptr_info);
|
| + }
|
| +
|
| + // Implements mojom::ServiceWorkerInstallEventMethod.
|
| + void RegisterForeignFetchScopes(
|
| + const std::vector<GURL>& sub_scopes,
|
| + const std::vector<url::Origin>& origins) override {
|
| + DCHECK(version_);
|
| + version_->RegisterForeignFetchScopes(sub_scopes, origins);
|
| + }
|
| +
|
| + private:
|
| + ServiceWorkerVersion* version_;
|
| +
|
| + mojo::AssociatedBinding<mojom::ServiceWorkerInstallEventMethods>
|
| + install_methods_binding_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(InstallEventMethodsReceiver);
|
| +};
|
| +
|
| void RunSoon(const base::Closure& closure) {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure);
|
| }
|
| @@ -431,34 +462,27 @@ void ServiceWorkerRegisterJob::DispatchInstallEvent() {
|
| ServiceWorkerMetrics::EventType::INSTALL,
|
| base::Bind(&ServiceWorkerRegisterJob::OnInstallFailed,
|
| weak_factory_.GetWeakPtr()));
|
| - new_version()
|
| - ->RegisterRequestCallback<ServiceWorkerHostMsg_InstallEventFinished>(
|
| - request_id, base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished,
|
| - weak_factory_.GetWeakPtr()));
|
| - new_version()->DispatchEvent({request_id},
|
| - ServiceWorkerMsg_InstallEvent(request_id));
|
| +
|
| + std::unique_ptr<InstallEventMethodsReceiver> install_methods_receiver =
|
| + base::MakeUnique<InstallEventMethodsReceiver>(new_version());
|
| + mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo ptr_info;
|
| + install_methods_receiver->BindInterface(&ptr_info);
|
| + new_version()->event_dispatcher()->DispatchInstallEvent(
|
| + std::move(ptr_info),
|
| + base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished,
|
| + weak_factory_.GetWeakPtr(), request_id,
|
| + base::Passed(&install_methods_receiver)));
|
| }
|
|
|
| void ServiceWorkerRegisterJob::OnInstallFinished(
|
| int request_id,
|
| - blink::WebServiceWorkerEventResult result,
|
| + std::unique_ptr<InstallEventMethodsReceiver> install_methods_receiver,
|
| + ServiceWorkerStatusCode status,
|
| bool has_fetch_handler,
|
| base::Time dispatch_event_time) {
|
| - new_version()->FinishRequest(
|
| - request_id, result == blink::kWebServiceWorkerEventResultCompleted,
|
| - dispatch_event_time);
|
| -
|
| - ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
|
| - switch (result) {
|
| - case blink::kWebServiceWorkerEventResultCompleted:
|
| - status = SERVICE_WORKER_OK;
|
| - break;
|
| - case blink::kWebServiceWorkerEventResultRejected:
|
| - status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| + install_methods_receiver.reset();
|
| + new_version()->FinishRequest(request_id, status == SERVICE_WORKER_OK,
|
| + dispatch_event_time);
|
|
|
| if (status != SERVICE_WORKER_OK) {
|
| OnInstallFailed(status);
|
|
|