| 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 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 size_t size) { | 643 size_t size) { |
| 644 std::vector<char> copy(data, data + size); | 644 std::vector<char> copy(data, data + size); |
| 645 Send(new ServiceWorkerHostMsg_SetCachedMetadata(GetRoutingID(), url, copy)); | 645 Send(new ServiceWorkerHostMsg_SetCachedMetadata(GetRoutingID(), url, copy)); |
| 646 } | 646 } |
| 647 | 647 |
| 648 void ServiceWorkerContextClient::ClearCachedMetadata(const blink::WebURL& url) { | 648 void ServiceWorkerContextClient::ClearCachedMetadata(const blink::WebURL& url) { |
| 649 Send(new ServiceWorkerHostMsg_ClearCachedMetadata(GetRoutingID(), url)); | 649 Send(new ServiceWorkerHostMsg_ClearCachedMetadata(GetRoutingID(), url)); |
| 650 } | 650 } |
| 651 | 651 |
| 652 void ServiceWorkerContextClient::WorkerReadyForInspection() { | 652 void ServiceWorkerContextClient::WorkerReadyForInspection() { |
| 653 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 653 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 654 (*instance_host_)->OnReadyForInspection(); | 654 (*instance_host_)->OnReadyForInspection(); |
| 655 } | 655 } |
| 656 | 656 |
| 657 void ServiceWorkerContextClient::WorkerContextFailedToStart() { | 657 void ServiceWorkerContextClient::WorkerContextFailedToStart() { |
| 658 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 658 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 659 DCHECK(!proxy_); | 659 DCHECK(!proxy_); |
| 660 | 660 |
| 661 (*instance_host_)->OnScriptLoadFailed(); | 661 (*instance_host_)->OnScriptLoadFailed(); |
| 662 (*instance_host_)->OnStopped(); | 662 (*instance_host_)->OnStopped(); |
| 663 | 663 |
| 664 DCHECK(embedded_worker_client_); | 664 DCHECK(embedded_worker_client_); |
| 665 embedded_worker_client_->WorkerContextDestroyed(); | 665 embedded_worker_client_->WorkerContextDestroyed(); |
| 666 } | 666 } |
| 667 | 667 |
| 668 void ServiceWorkerContextClient::WorkerScriptLoaded() { | 668 void ServiceWorkerContextClient::WorkerScriptLoaded() { |
| 669 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 669 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 670 DCHECK(!proxy_); | 670 DCHECK(!proxy_); |
| 671 | 671 |
| 672 (*instance_host_)->OnScriptLoaded(); | 672 (*instance_host_)->OnScriptLoaded(); |
| 673 } | 673 } |
| 674 | 674 |
| 675 bool ServiceWorkerContextClient::HasAssociatedRegistration() { | 675 bool ServiceWorkerContextClient::HasAssociatedRegistration() { |
| 676 return provider_context_ && provider_context_->HasAssociatedRegistration(); | 676 return provider_context_ && provider_context_->HasAssociatedRegistration(); |
| 677 } | 677 } |
| 678 | 678 |
| 679 void ServiceWorkerContextClient::WorkerContextStarted( | 679 void ServiceWorkerContextClient::WorkerContextStarted( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 provider_context_->provider_id()); | 712 provider_context_->provider_id()); |
| 713 | 713 |
| 714 TRACE_EVENT_ASYNC_STEP_INTO0( | 714 TRACE_EVENT_ASYNC_STEP_INTO0( |
| 715 "ServiceWorker", | 715 "ServiceWorker", |
| 716 "ServiceWorkerContextClient::StartingWorkerContext", | 716 "ServiceWorkerContextClient::StartingWorkerContext", |
| 717 this, | 717 this, |
| 718 "ExecuteScript"); | 718 "ExecuteScript"); |
| 719 } | 719 } |
| 720 | 720 |
| 721 void ServiceWorkerContextClient::DidEvaluateWorkerScript(bool success) { | 721 void ServiceWorkerContextClient::DidEvaluateWorkerScript(bool success) { |
| 722 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 722 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
| 723 (*instance_host_)->OnScriptEvaluated(success); | 723 (*instance_host_)->OnScriptEvaluated(success); |
| 724 | 724 |
| 725 // Schedule a task to send back WorkerStarted asynchronously, | 725 // Schedule a task to send back WorkerStarted asynchronously, |
| 726 // so that at the time we send it we can be sure that the | 726 // so that at the time we send it we can be sure that the |
| 727 // worker run loop has been started. | 727 // worker run loop has been started. |
| 728 worker_task_runner_->PostTask( | 728 worker_task_runner_->PostTask( |
| 729 FROM_HERE, base::Bind(&ServiceWorkerContextClient::SendWorkerStarted, | 729 FROM_HERE, base::Bind(&ServiceWorkerContextClient::SendWorkerStarted, |
| 730 GetWeakPtr())); | 730 GetWeakPtr())); |
| 731 } | 731 } |
| 732 | 732 |
| 733 void ServiceWorkerContextClient::DidInitializeWorkerContext( | 733 void ServiceWorkerContextClient::DidInitializeWorkerContext( |
| 734 v8::Local<v8::Context> context) { | 734 v8::Local<v8::Context> context) { |
| 735 GetContentClient() | 735 GetContentClient() |
| 736 ->renderer() | 736 ->renderer() |
| 737 ->DidInitializeServiceWorkerContextOnWorkerThread( | 737 ->DidInitializeServiceWorkerContextOnWorkerThread( |
| 738 context, service_worker_version_id_, script_url_); | 738 context, service_worker_version_id_, script_url_); |
| 739 } | 739 } |
| 740 | 740 |
| 741 void ServiceWorkerContextClient::WillDestroyWorkerContext( | 741 void ServiceWorkerContextClient::WillDestroyWorkerContext( |
| 742 v8::Local<v8::Context> context) { | 742 v8::Local<v8::Context> context) { |
| 743 // At this point WillStopCurrentWorkerThread is already called, so | 743 // At this point WillStopCurrentWorkerThread is already called, so |
| 744 // worker_task_runner_->RunsTasksOnCurrentThread() returns false | 744 // worker_task_runner_->RunsTasksInCurrentSequence() returns false |
| 745 // (while we're still on the worker thread). | 745 // (while we're still on the worker thread). |
| 746 proxy_ = NULL; | 746 proxy_ = NULL; |
| 747 | 747 |
| 748 // Aborts all the pending events callbacks. | 748 // Aborts all the pending events callbacks. |
| 749 AbortPendingEventCallbacks(context_->install_event_callbacks, | 749 AbortPendingEventCallbacks(context_->install_event_callbacks, |
| 750 false /* has_fetch_handler */); | 750 false /* has_fetch_handler */); |
| 751 AbortPendingEventCallbacks(context_->activate_event_callbacks); | 751 AbortPendingEventCallbacks(context_->activate_event_callbacks); |
| 752 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); | 752 AbortPendingEventCallbacks(context_->background_fetch_abort_event_callbacks); |
| 753 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); | 753 AbortPendingEventCallbacks(context_->background_fetch_click_event_callbacks); |
| 754 AbortPendingEventCallbacks(context_->background_fetch_fail_event_callbacks); | 754 AbortPendingEventCallbacks(context_->background_fetch_fail_event_callbacks); |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 double event_dispatch_time) { | 1076 double event_dispatch_time) { |
| 1077 DispatchPaymentRequestEventCallback callback = | 1077 DispatchPaymentRequestEventCallback callback = |
| 1078 std::move(context_->payment_request_event_callbacks[payment_request_id]); | 1078 std::move(context_->payment_request_event_callbacks[payment_request_id]); |
| 1079 std::move(callback).Run(EventResultToStatus(result), | 1079 std::move(callback).Run(EventResultToStatus(result), |
| 1080 base::Time::FromDoubleT(event_dispatch_time)); | 1080 base::Time::FromDoubleT(event_dispatch_time)); |
| 1081 context_->payment_request_event_callbacks.erase(payment_request_id); | 1081 context_->payment_request_event_callbacks.erase(payment_request_id); |
| 1082 } | 1082 } |
| 1083 | 1083 |
| 1084 std::unique_ptr<blink::WebServiceWorkerNetworkProvider> | 1084 std::unique_ptr<blink::WebServiceWorkerNetworkProvider> |
| 1085 ServiceWorkerContextClient::CreateServiceWorkerNetworkProvider() { | 1085 ServiceWorkerContextClient::CreateServiceWorkerNetworkProvider() { |
| 1086 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 1086 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 1087 | 1087 |
| 1088 // Create a content::ServiceWorkerNetworkProvider for this data source so | 1088 // Create a content::ServiceWorkerNetworkProvider for this data source so |
| 1089 // we can observe its requests. | 1089 // we can observe its requests. |
| 1090 std::unique_ptr<ServiceWorkerNetworkProvider> provider = | 1090 std::unique_ptr<ServiceWorkerNetworkProvider> provider = |
| 1091 base::MakeUnique<ServiceWorkerNetworkProvider>( | 1091 base::MakeUnique<ServiceWorkerNetworkProvider>( |
| 1092 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER, | 1092 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER, |
| 1093 true /* is_parent_frame_secure */); | 1093 true /* is_parent_frame_secure */); |
| 1094 provider_context_ = provider->context(); | 1094 provider_context_ = provider->context(); |
| 1095 network_provider_id_ = provider->provider_id(); | 1095 network_provider_id_ = provider->provider_id(); |
| 1096 | 1096 |
| 1097 // Tell the network provider about which version to load. | 1097 // Tell the network provider about which version to load. |
| 1098 provider->SetServiceWorkerVersionId(service_worker_version_id_, | 1098 provider->SetServiceWorkerVersionId(service_worker_version_id_, |
| 1099 embedded_worker_id_); | 1099 embedded_worker_id_); |
| 1100 | 1100 |
| 1101 // Blink is responsible for deleting the returned object. | 1101 // Blink is responsible for deleting the returned object. |
| 1102 return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>( | 1102 return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>( |
| 1103 std::move(provider)); | 1103 std::move(provider)); |
| 1104 } | 1104 } |
| 1105 | 1105 |
| 1106 std::unique_ptr<blink::WebWorkerFetchContext> | 1106 std::unique_ptr<blink::WebWorkerFetchContext> |
| 1107 ServiceWorkerContextClient::CreateServiceWorkerFetchContext() { | 1107 ServiceWorkerContextClient::CreateServiceWorkerFetchContext() { |
| 1108 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 1108 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 1109 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); | 1109 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); |
| 1110 mojom::WorkerURLLoaderFactoryProviderPtr worker_url_loader_factory_provider; | 1110 mojom::WorkerURLLoaderFactoryProviderPtr worker_url_loader_factory_provider; |
| 1111 RenderThreadImpl::current() | 1111 RenderThreadImpl::current() |
| 1112 ->blink_platform_impl() | 1112 ->blink_platform_impl() |
| 1113 ->GetInterfaceProvider() | 1113 ->GetInterfaceProvider() |
| 1114 ->GetInterface(mojo::MakeRequest(&worker_url_loader_factory_provider)); | 1114 ->GetInterface(mojo::MakeRequest(&worker_url_loader_factory_provider)); |
| 1115 | 1115 |
| 1116 // Blink is responsible for deleting the returned object. | 1116 // Blink is responsible for deleting the returned object. |
| 1117 return base::MakeUnique<ServiceWorkerFetchContextImpl>( | 1117 return base::MakeUnique<ServiceWorkerFetchContextImpl>( |
| 1118 worker_url_loader_factory_provider.PassInterface(), network_provider_id_); | 1118 worker_url_loader_factory_provider.PassInterface(), network_provider_id_); |
| 1119 } | 1119 } |
| 1120 | 1120 |
| 1121 std::unique_ptr<blink::WebServiceWorkerProvider> | 1121 std::unique_ptr<blink::WebServiceWorkerProvider> |
| 1122 ServiceWorkerContextClient::CreateServiceWorkerProvider() { | 1122 ServiceWorkerContextClient::CreateServiceWorkerProvider() { |
| 1123 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 1123 DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); |
| 1124 DCHECK(provider_context_); | 1124 DCHECK(provider_context_); |
| 1125 | 1125 |
| 1126 // Blink is responsible for deleting the returned object. | 1126 // Blink is responsible for deleting the returned object. |
| 1127 return base::MakeUnique<WebServiceWorkerProviderImpl>( | 1127 return base::MakeUnique<WebServiceWorkerProviderImpl>( |
| 1128 sender_.get(), provider_context_.get()); | 1128 sender_.get(), provider_context_.get()); |
| 1129 } | 1129 } |
| 1130 | 1130 |
| 1131 void ServiceWorkerContextClient::PostMessageToClient( | 1131 void ServiceWorkerContextClient::PostMessageToClient( |
| 1132 const blink::WebString& uuid, | 1132 const blink::WebString& uuid, |
| 1133 const blink::WebString& message, | 1133 const blink::WebString& message, |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 blink::WebPaymentAppRequest webAppRequest = | 1215 blink::WebPaymentAppRequest webAppRequest = |
| 1216 mojo::ConvertTo<blink::WebPaymentAppRequest>(std::move(app_request)); | 1216 mojo::ConvertTo<blink::WebPaymentAppRequest>(std::move(app_request)); |
| 1217 proxy_->DispatchPaymentRequestEvent(payment_request_id, webAppRequest); | 1217 proxy_->DispatchPaymentRequestEvent(payment_request_id, webAppRequest); |
| 1218 } | 1218 } |
| 1219 | 1219 |
| 1220 void ServiceWorkerContextClient::Send(IPC::Message* message) { | 1220 void ServiceWorkerContextClient::Send(IPC::Message* message) { |
| 1221 sender_->Send(message); | 1221 sender_->Send(message); |
| 1222 } | 1222 } |
| 1223 | 1223 |
| 1224 void ServiceWorkerContextClient::SendWorkerStarted() { | 1224 void ServiceWorkerContextClient::SendWorkerStarted() { |
| 1225 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1225 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
| 1226 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 1226 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
| 1227 "ServiceWorkerContextClient::StartingWorkerContext", | 1227 "ServiceWorkerContextClient::StartingWorkerContext", |
| 1228 this); | 1228 this); |
| 1229 (*instance_host_)->OnStarted(); | 1229 (*instance_host_)->OnStarted(); |
| 1230 } | 1230 } |
| 1231 | 1231 |
| 1232 void ServiceWorkerContextClient::SetRegistrationInServiceWorkerGlobalScope( | 1232 void ServiceWorkerContextClient::SetRegistrationInServiceWorkerGlobalScope( |
| 1233 const ServiceWorkerRegistrationObjectInfo& info, | 1233 const ServiceWorkerRegistrationObjectInfo& info, |
| 1234 const ServiceWorkerVersionAttributes& attrs) { | 1234 const ServiceWorkerVersionAttributes& attrs) { |
| 1235 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1235 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
| 1236 ServiceWorkerDispatcher* dispatcher = | 1236 ServiceWorkerDispatcher* dispatcher = |
| 1237 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 1237 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
| 1238 sender_.get(), main_thread_task_runner_.get()); | 1238 sender_.get(), main_thread_task_runner_.get()); |
| 1239 | 1239 |
| 1240 // Register a registration and its version attributes with the dispatcher | 1240 // Register a registration and its version attributes with the dispatcher |
| 1241 // living on the worker thread. | 1241 // living on the worker thread. |
| 1242 scoped_refptr<WebServiceWorkerRegistrationImpl> registration( | 1242 scoped_refptr<WebServiceWorkerRegistrationImpl> registration( |
| 1243 dispatcher->GetOrCreateRegistration(info, attrs)); | 1243 dispatcher->GetOrCreateRegistration(info, attrs)); |
| 1244 | 1244 |
| 1245 proxy_->SetRegistration( | 1245 proxy_->SetRegistration( |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1679 int64_t encoded_body_length, | 1679 int64_t encoded_body_length, |
| 1680 int64_t decoded_body_length) { | 1680 int64_t decoded_body_length) { |
| 1681 proxy_->OnNavigationPreloadComplete( | 1681 proxy_->OnNavigationPreloadComplete( |
| 1682 fetch_event_id, (completion_time - base::TimeTicks()).InSecondsF(), | 1682 fetch_event_id, (completion_time - base::TimeTicks()).InSecondsF(), |
| 1683 encoded_data_length, encoded_body_length, decoded_body_length); | 1683 encoded_data_length, encoded_body_length, decoded_body_length); |
| 1684 context_->preload_requests.Remove(fetch_event_id); | 1684 context_->preload_requests.Remove(fetch_event_id); |
| 1685 } | 1685 } |
| 1686 | 1686 |
| 1687 base::WeakPtr<ServiceWorkerContextClient> | 1687 base::WeakPtr<ServiceWorkerContextClient> |
| 1688 ServiceWorkerContextClient::GetWeakPtr() { | 1688 ServiceWorkerContextClient::GetWeakPtr() { |
| 1689 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1689 DCHECK(worker_task_runner_->RunsTasksInCurrentSequence()); |
| 1690 DCHECK(context_); | 1690 DCHECK(context_); |
| 1691 return context_->weak_factory.GetWeakPtr(); | 1691 return context_->weak_factory.GetWeakPtr(); |
| 1692 } | 1692 } |
| 1693 | 1693 |
| 1694 } // namespace content | 1694 } // namespace content |
| OLD | NEW |