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

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

Issue 2746783002: [ServiceWorker] Mojofy InstallEvent of Service Worker (Closed)
Patch Set: Address shimazu's comment #66 and leon's #69 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/strong_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 mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo
40 CreateAndBindInterface() {
41 mojom::ServiceWorkerInstallEventMethodsAssociatedPtrInfo ptr_info;
42 install_methods_binding_.Bind(&ptr_info);
43 return ptr_info;
44 }
45
46 // mojom::ServiceWorkerInstallEventMethod implementation.
47 void RegisterForeignFetchScopes(
48 const std::vector<GURL>& sub_scopes,
49 const std::vector<url::Origin>& origins) override {
50 if (!version_)
leonhsl(Using Gerrit) 2017/04/25 06:53:27 Instead of if-clause here, add a 'DCHECK(version_)
xiaofengzhang 2017/04/25 07:18:15 Acknowledged.
xiaofengzhang 2017/04/25 09:13:32 Done.
51 return;
52 version_->RegisterForeignFetchScopes(sub_scopes, origins);
53 }
54
55 private:
56 ServiceWorkerVersion* version_;
57
58 // Binding for ServiceWorkerInstallEventMethods.
59 mojo::AssociatedBinding<ServiceWorkerInstallEventMethods>
60 install_methods_binding_;
61 };
62
30 void RunSoon(const base::Closure& closure) { 63 void RunSoon(const base::Closure& closure) {
31 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure); 64 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure);
32 } 65 }
33 66
34 } // namespace 67 } // namespace
35 68
36 typedef ServiceWorkerRegisterJobBase::RegistrationJobType RegistrationJobType; 69 typedef ServiceWorkerRegisterJobBase::RegistrationJobType RegistrationJobType;
37 70
38 ServiceWorkerRegisterJob::ServiceWorkerRegisterJob( 71 ServiceWorkerRegisterJob::ServiceWorkerRegisterJob(
39 base::WeakPtr<ServiceWorkerContextCore> context, 72 base::WeakPtr<ServiceWorkerContextCore> context,
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 457
425 void ServiceWorkerRegisterJob::DispatchInstallEvent() { 458 void ServiceWorkerRegisterJob::DispatchInstallEvent() {
426 DCHECK_EQ(ServiceWorkerVersion::INSTALLING, new_version()->status()) 459 DCHECK_EQ(ServiceWorkerVersion::INSTALLING, new_version()->status())
427 << new_version()->status(); 460 << new_version()->status();
428 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, new_version()->running_status()) 461 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, new_version()->running_status())
429 << "Worker stopped too soon after it was started."; 462 << "Worker stopped too soon after it was started.";
430 int request_id = new_version()->StartRequest( 463 int request_id = new_version()->StartRequest(
431 ServiceWorkerMetrics::EventType::INSTALL, 464 ServiceWorkerMetrics::EventType::INSTALL,
432 base::Bind(&ServiceWorkerRegisterJob::OnInstallFailed, 465 base::Bind(&ServiceWorkerRegisterJob::OnInstallFailed,
433 weak_factory_.GetWeakPtr())); 466 weak_factory_.GetWeakPtr()));
434 new_version() 467
435 ->RegisterRequestCallback<ServiceWorkerHostMsg_InstallEventFinished>( 468 auto install_event_methods =
436 request_id, base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished, 469 base::MakeUnique<InstallEventMethodsReceiver>(new_version());
437 weak_factory_.GetWeakPtr())); 470 new_version()->event_dispatcher()->DispatchInstallEvent(
438 new_version()->DispatchEvent({request_id}, 471 install_event_methods->CreateAndBindInterface(),
439 ServiceWorkerMsg_InstallEvent(request_id)); 472 base::Bind(&ServiceWorkerRegisterJob::OnInstallFinished,
473 weak_factory_.GetWeakPtr(), request_id,
474 base::Passed(&install_event_methods)));
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_event_methods,
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_event_methods.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

Powered by Google App Engine
This is Rietveld 408576698