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

Side by Side Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2779763004: Create ServiceWorkerProviderHost before starting worker (Closed)
Patch Set: Rebased Created 3 years, 6 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 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698