OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/renderer/service_worker/service_worker_context_client.h" | 5 #include "content/renderer/service_worker/service_worker_context_client.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
547 return g_worker_client_tls.Pointer()->Get(); | 547 return g_worker_client_tls.Pointer()->Get(); |
548 } | 548 } |
549 | 549 |
550 ServiceWorkerContextClient::ServiceWorkerContextClient( | 550 ServiceWorkerContextClient::ServiceWorkerContextClient( |
551 int embedded_worker_id, | 551 int embedded_worker_id, |
552 int64_t service_worker_version_id, | 552 int64_t service_worker_version_id, |
553 const GURL& service_worker_scope, | 553 const GURL& service_worker_scope, |
554 const GURL& script_url, | 554 const GURL& script_url, |
555 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request, | 555 mojom::ServiceWorkerEventDispatcherRequest dispatcher_request, |
556 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, | 556 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, |
557 mojom::ServiceWorkerProviderClientInfoPtr provider_client_info, | |
557 std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker_client) | 558 std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker_client) |
558 : embedded_worker_id_(embedded_worker_id), | 559 : embedded_worker_id_(embedded_worker_id), |
559 service_worker_version_id_(service_worker_version_id), | 560 service_worker_version_id_(service_worker_version_id), |
560 service_worker_scope_(service_worker_scope), | 561 service_worker_scope_(service_worker_scope), |
561 script_url_(script_url), | 562 script_url_(script_url), |
562 sender_(ChildThreadImpl::current()->thread_safe_sender()), | 563 sender_(ChildThreadImpl::current()->thread_safe_sender()), |
563 main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 564 main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
564 proxy_(nullptr), | 565 proxy_(nullptr), |
565 pending_dispatcher_request_(std::move(dispatcher_request)), | 566 pending_dispatcher_request_(std::move(dispatcher_request)), |
566 embedded_worker_client_(std::move(embedded_worker_client)) { | 567 embedded_worker_client_(std::move(embedded_worker_client)) { |
567 instance_host_ = | 568 instance_host_ = |
568 mojom::ThreadSafeEmbeddedWorkerInstanceHostAssociatedPtr::Create( | 569 mojom::ThreadSafeEmbeddedWorkerInstanceHostAssociatedPtr::Create( |
569 std::move(instance_host), main_thread_task_runner_); | 570 std::move(instance_host), main_thread_task_runner_); |
570 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", | 571 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", |
571 "ServiceWorkerContextClient::StartingWorkerContext", | 572 "ServiceWorkerContextClient::StartingWorkerContext", |
572 this); | 573 this); |
573 TRACE_EVENT_ASYNC_STEP_INTO0( | 574 TRACE_EVENT_ASYNC_STEP_INTO0( |
574 "ServiceWorker", | 575 "ServiceWorker", |
575 "ServiceWorkerContextClient::StartingWorkerContext", | 576 "ServiceWorkerContextClient::StartingWorkerContext", |
576 this, | 577 this, |
577 "PrepareWorker"); | 578 "PrepareWorker"); |
579 // Create a content::ServiceWorkerNetworkProvider for this data source so | |
580 // we can observe its requests. | |
581 pending_network_provider_ = base::MakeUnique<ServiceWorkerNetworkProvider>( | |
582 std::move(provider_client_info)); | |
583 provider_context_ = pending_network_provider_->context(); | |
578 } | 584 } |
579 | 585 |
580 ServiceWorkerContextClient::~ServiceWorkerContextClient() {} | 586 ServiceWorkerContextClient::~ServiceWorkerContextClient() {} |
581 | 587 |
582 void ServiceWorkerContextClient::OnMessageReceived( | 588 void ServiceWorkerContextClient::OnMessageReceived( |
583 int thread_id, | 589 int thread_id, |
584 int embedded_worker_id, | 590 int embedded_worker_id, |
585 const IPC::Message& message) { | 591 const IPC::Message& message) { |
586 CHECK_EQ(embedded_worker_id_, embedded_worker_id); | 592 CHECK_EQ(embedded_worker_id_, embedded_worker_id); |
587 bool handled = true; | 593 bool handled = true; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
702 DCHECK_NE(registration_info.registration_id, | 708 DCHECK_NE(registration_info.registration_id, |
703 kInvalidServiceWorkerRegistrationId); | 709 kInvalidServiceWorkerRegistrationId); |
704 | 710 |
705 DCHECK(pending_dispatcher_request_.is_pending()); | 711 DCHECK(pending_dispatcher_request_.is_pending()); |
706 DCHECK(!context_->event_dispatcher_binding.is_bound()); | 712 DCHECK(!context_->event_dispatcher_binding.is_bound()); |
707 context_->event_dispatcher_binding.Bind( | 713 context_->event_dispatcher_binding.Bind( |
708 std::move(pending_dispatcher_request_)); | 714 std::move(pending_dispatcher_request_)); |
709 | 715 |
710 SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs); | 716 SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs); |
711 | 717 |
712 (*instance_host_) | 718 (*instance_host_)->OnThreadStarted(WorkerThread::GetCurrentId()); |
713 ->OnThreadStarted(WorkerThread::GetCurrentId(), | |
714 provider_context_->provider_id()); | |
715 | 719 |
716 TRACE_EVENT_ASYNC_STEP_INTO0( | 720 TRACE_EVENT_ASYNC_STEP_INTO0( |
717 "ServiceWorker", | 721 "ServiceWorker", |
718 "ServiceWorkerContextClient::StartingWorkerContext", | 722 "ServiceWorkerContextClient::StartingWorkerContext", |
719 this, | 723 this, |
720 "ExecuteScript"); | 724 "ExecuteScript"); |
721 } | 725 } |
722 | 726 |
723 void ServiceWorkerContextClient::DidEvaluateWorkerScript(bool success) { | 727 void ServiceWorkerContextClient::DidEvaluateWorkerScript(bool success) { |
724 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); | 728 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1080 DispatchPaymentRequestEventCallback callback = | 1084 DispatchPaymentRequestEventCallback callback = |
1081 std::move(context_->payment_request_event_callbacks[payment_request_id]); | 1085 std::move(context_->payment_request_event_callbacks[payment_request_id]); |
1082 std::move(callback).Run(EventResultToStatus(result), | 1086 std::move(callback).Run(EventResultToStatus(result), |
1083 base::Time::FromDoubleT(event_dispatch_time)); | 1087 base::Time::FromDoubleT(event_dispatch_time)); |
1084 context_->payment_request_event_callbacks.erase(payment_request_id); | 1088 context_->payment_request_event_callbacks.erase(payment_request_id); |
1085 } | 1089 } |
1086 | 1090 |
1087 std::unique_ptr<blink::WebServiceWorkerNetworkProvider> | 1091 std::unique_ptr<blink::WebServiceWorkerNetworkProvider> |
1088 ServiceWorkerContextClient::CreateServiceWorkerNetworkProvider() { | 1092 ServiceWorkerContextClient::CreateServiceWorkerNetworkProvider() { |
1089 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); | 1093 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
1090 | |
1091 // Create a content::ServiceWorkerNetworkProvider for this data source so | |
1092 // we can observe its requests. | |
1093 std::unique_ptr<ServiceWorkerNetworkProvider> provider = | |
1094 base::MakeUnique<ServiceWorkerNetworkProvider>( | |
1095 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER, | |
1096 true /* is_parent_frame_secure */); | |
1097 provider_context_ = provider->context(); | |
1098 network_provider_id_ = provider->provider_id(); | |
1099 | |
1100 // Tell the network provider about which version to load. | |
1101 provider->SetServiceWorkerVersionId(service_worker_version_id_, | |
1102 embedded_worker_id_); | |
1103 | |
1104 // Blink is responsible for deleting the returned object. | 1094 // Blink is responsible for deleting the returned object. |
1105 return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>( | 1095 return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>( |
1106 std::move(provider)); | 1096 std::move(pending_network_provider_)); |
xiaofengzhang
2017/06/06 03:22:23
I have a stupid question here:
CreateServiceWorker
shimazu
2017/06/06 04:16:56
It might be a complicated part of starting up.
Em
| |
1107 } | 1097 } |
1108 | 1098 |
1109 std::unique_ptr<blink::WebWorkerFetchContext> | 1099 std::unique_ptr<blink::WebWorkerFetchContext> |
1110 ServiceWorkerContextClient::CreateServiceWorkerFetchContext() { | 1100 ServiceWorkerContextClient::CreateServiceWorkerFetchContext() { |
1111 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); | 1101 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
1112 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); | 1102 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); |
1113 mojom::WorkerURLLoaderFactoryProviderPtr worker_url_loader_factory_provider; | 1103 mojom::WorkerURLLoaderFactoryProviderPtr worker_url_loader_factory_provider; |
1114 RenderThreadImpl::current() | 1104 RenderThreadImpl::current() |
1115 ->blink_platform_impl() | 1105 ->blink_platform_impl() |
1116 ->GetInterfaceProvider() | 1106 ->GetInterfaceProvider() |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1689 } | 1679 } |
1690 | 1680 |
1691 base::WeakPtr<ServiceWorkerContextClient> | 1681 base::WeakPtr<ServiceWorkerContextClient> |
1692 ServiceWorkerContextClient::GetWeakPtr() { | 1682 ServiceWorkerContextClient::GetWeakPtr() { |
1693 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); | 1683 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
1694 DCHECK(context_); | 1684 DCHECK(context_); |
1695 return context_->weak_factory.GetWeakPtr(); | 1685 return context_->weak_factory.GetWeakPtr(); |
1696 } | 1686 } |
1697 | 1687 |
1698 } // namespace content | 1688 } // namespace content |
OLD | NEW |