Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(514)

Side by Side Diff: content/browser/service_worker/service_worker_register_job.cc

Issue 2746783002: [ServiceWorker] Mojofy InstallEvent of Service Worker (Closed)
Patch Set: Just delete a useless line Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_register_job.h" 5 #include "content/browser/service_worker/service_worker_register_job.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "content/browser/service_worker/embedded_worker_status.h" 13 #include "content/browser/service_worker/embedded_worker_status.h"
14 #include "content/browser/service_worker/service_worker_context_core.h" 14 #include "content/browser/service_worker/service_worker_context_core.h"
15 #include "content/browser/service_worker/service_worker_job_coordinator.h" 15 #include "content/browser/service_worker/service_worker_job_coordinator.h"
16 #include "content/browser/service_worker/service_worker_metrics.h" 16 #include "content/browser/service_worker/service_worker_metrics.h"
17 #include "content/browser/service_worker/service_worker_registration.h" 17 #include "content/browser/service_worker/service_worker_registration.h"
18 #include "content/browser/service_worker/service_worker_storage.h" 18 #include "content/browser/service_worker/service_worker_storage.h"
19 #include "content/browser/service_worker/service_worker_write_to_cache_job.h" 19 #include "content/browser/service_worker/service_worker_write_to_cache_job.h"
20 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
20 #include "content/common/service_worker/service_worker_messages.h" 21 #include "content/common/service_worker/service_worker_messages.h"
21 #include "content/common/service_worker/service_worker_types.h" 22 #include "content/common/service_worker/service_worker_types.h"
22 #include "content/common/service_worker/service_worker_utils.h" 23 #include "content/common/service_worker/service_worker_utils.h"
23 #include "content/public/browser/browser_thread.h" 24 #include "content/public/browser/browser_thread.h"
25 #include "mojo/public/cpp/bindings/associated_binding.h"
24 #include "net/base/net_errors.h" 26 #include "net/base/net_errors.h"
25 27
26 namespace content { 28 namespace content {
27 29
28 namespace { 30 namespace {
29 31
32 class InstallEventMethodsReceiver
33 : public mojom::ServiceWorkerInstallEventMethods {
34 public:
35 InstallEventMethodsReceiver(ServiceWorkerVersion* version)
36 : version_(version), install_methods_binding_(this) {}
37 ~InstallEventMethodsReceiver() override {}
38
39 void BindInterface(
40 mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo* ptr_info) {
41 install_methods_binding_.Bind(ptr_info);
42 }
43
44 // Implements mojom::ServiceWorkerInstallEventMethod.
45 void RegisterForeignFetchScopes(
46 const std::vector<GURL>& sub_scopes,
47 const std::vector<url::Origin>& origins) override {
48 DCHECK(version_);
49 version_->RegisterForeignFetchScopes(sub_scopes, origins);
50 }
51
52 private:
53 ServiceWorkerVersion* version_;
54
55 mojo::AssociatedBinding<mojom::ServiceWorkerInstallEventMethods>
56 install_methods_binding_;
57
58 DISALLOW_COPY_AND_ASSIGN(InstallEventMethodsReceiver);
59 };
60
30 void RunSoon(const base::Closure& closure) { 61 void RunSoon(const base::Closure& closure) {
31 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure); 62 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure);
32 } 63 }
33 64
34 } // namespace 65 } // namespace
35 66
36 typedef ServiceWorkerRegisterJobBase::RegistrationJobType RegistrationJobType; 67 typedef ServiceWorkerRegisterJobBase::RegistrationJobType RegistrationJobType;
37 68
38 ServiceWorkerRegisterJob::ServiceWorkerRegisterJob( 69 ServiceWorkerRegisterJob::ServiceWorkerRegisterJob(
39 base::WeakPtr<ServiceWorkerContextCore> context, 70 base::WeakPtr<ServiceWorkerContextCore> context,
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 455
425 void ServiceWorkerRegisterJob::DispatchInstallEvent() { 456 void ServiceWorkerRegisterJob::DispatchInstallEvent() {
426 DCHECK_EQ(ServiceWorkerVersion::INSTALLING, new_version()->status()) 457 DCHECK_EQ(ServiceWorkerVersion::INSTALLING, new_version()->status())
427 << new_version()->status(); 458 << new_version()->status();
428 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, new_version()->running_status()) 459 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, new_version()->running_status())
429 << "Worker stopped too soon after it was started."; 460 << "Worker stopped too soon after it was started.";
430 int request_id = new_version()->StartRequest( 461 int request_id = new_version()->StartRequest(
431 ServiceWorkerMetrics::EventType::INSTALL, 462 ServiceWorkerMetrics::EventType::INSTALL,
432 base::Bind(&ServiceWorkerRegisterJob::OnInstallFailed, 463 base::Bind(&ServiceWorkerRegisterJob::OnInstallFailed,
433 weak_factory_.GetWeakPtr())); 464 weak_factory_.GetWeakPtr()));
434 new_version() 465
435 ->RegisterRequestCallback<ServiceWorkerHostMsg_InstallEventFinished>( 466 std::unique_ptr<InstallEventMethodsReceiver> install_methods_receiver =
436 request_id, base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished, 467 base::MakeUnique<InstallEventMethodsReceiver>(new_version());
437 weak_factory_.GetWeakPtr())); 468 mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo ptr_info;
438 new_version()->DispatchEvent({request_id}, 469 install_methods_receiver->BindInterface(&ptr_info);
439 ServiceWorkerMsg_InstallEvent(request_id)); 470 new_version()->event_dispatcher()->DispatchInstallEvent(
471 std::move(ptr_info),
472 base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished,
473 weak_factory_.GetWeakPtr(), request_id,
474 base::Passed(&install_methods_receiver)));
440 } 475 }
441 476
442 void ServiceWorkerRegisterJob::OnInstallFinished( 477 void ServiceWorkerRegisterJob::OnInstallFinished(
443 int request_id, 478 int request_id,
444 blink::WebServiceWorkerEventResult result, 479 std::unique_ptr<InstallEventMethodsReceiver> install_methods_receiver,
480 ServiceWorkerStatusCode status,
445 bool has_fetch_handler, 481 bool has_fetch_handler,
446 base::Time dispatch_event_time) { 482 base::Time dispatch_event_time) {
447 new_version()->FinishRequest( 483 install_methods_receiver.reset();
448 request_id, result == blink::kWebServiceWorkerEventResultCompleted, 484 new_version()->FinishRequest(request_id, status == SERVICE_WORKER_OK,
449 dispatch_event_time); 485 dispatch_event_time);
450
451 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
452 switch (result) {
453 case blink::kWebServiceWorkerEventResultCompleted:
454 status = SERVICE_WORKER_OK;
455 break;
456 case blink::kWebServiceWorkerEventResultRejected:
457 status = SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
458 break;
459 default:
460 NOTREACHED();
461 }
462 486
463 if (status != SERVICE_WORKER_OK) { 487 if (status != SERVICE_WORKER_OK) {
464 OnInstallFailed(status); 488 OnInstallFailed(status);
465 return; 489 return;
466 } 490 }
467 491
468 ServiceWorkerMetrics::RecordInstallEventStatus(status); 492 ServiceWorkerMetrics::RecordInstallEventStatus(status);
469 ServiceWorkerMetrics::RecordForeignFetchRegistrationCount( 493 ServiceWorkerMetrics::RecordForeignFetchRegistrationCount(
470 new_version()->foreign_fetch_scopes().size(), 494 new_version()->foreign_fetch_scopes().size(),
471 new_version()->foreign_fetch_origins().size()); 495 new_version()->foreign_fetch_origins().size());
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 new_version()->force_bypass_cache_for_scripts() || 672 new_version()->force_bypass_cache_for_scripts() ||
649 registration()->last_update_check().is_null()) { 673 registration()->last_update_check().is_null()) {
650 registration()->set_last_update_check(base::Time::Now()); 674 registration()->set_last_update_check(base::Time::Now());
651 675
652 if (registration()->has_installed_version()) 676 if (registration()->has_installed_version())
653 context_->storage()->UpdateLastUpdateCheckTime(registration()); 677 context_->storage()->UpdateLastUpdateCheckTime(registration());
654 } 678 }
655 } 679 }
656 680
657 } // namespace content 681 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_register_job.h ('k') | content/browser/service_worker/service_worker_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698