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 <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 class WebServiceWorkerNetworkProviderImpl | 90 class WebServiceWorkerNetworkProviderImpl |
91 : public blink::WebServiceWorkerNetworkProvider { | 91 : public blink::WebServiceWorkerNetworkProvider { |
92 public: | 92 public: |
93 // Blink calls this method for each request starting with the main script, | 93 // Blink calls this method for each request starting with the main script, |
94 // we tag them with the provider id. | 94 // we tag them with the provider id. |
95 void willSendRequest(blink::WebDataSource* data_source, | 95 void willSendRequest(blink::WebDataSource* data_source, |
96 blink::WebURLRequest& request) override { | 96 blink::WebURLRequest& request) override { |
97 ServiceWorkerNetworkProvider* provider = | 97 ServiceWorkerNetworkProvider* provider = |
98 ServiceWorkerNetworkProvider::FromDocumentState( | 98 ServiceWorkerNetworkProvider::FromDocumentState( |
99 static_cast<DataSourceExtraData*>(data_source->getExtraData())); | 99 static_cast<DataSourceExtraData*>(data_source->getExtraData())); |
100 scoped_ptr<RequestExtraData> extra_data(new RequestExtraData); | 100 std::unique_ptr<RequestExtraData> extra_data(new RequestExtraData); |
101 extra_data->set_service_worker_provider_id(provider->provider_id()); | 101 extra_data->set_service_worker_provider_id(provider->provider_id()); |
102 extra_data->set_originated_from_service_worker(true); | 102 extra_data->set_originated_from_service_worker(true); |
103 request.setExtraData(extra_data.release()); | 103 request.setExtraData(extra_data.release()); |
104 } | 104 } |
105 }; | 105 }; |
106 | 106 |
107 void SendPostMessageToClientOnMainThread( | 107 void SendPostMessageToClientOnMainThread( |
108 ThreadSafeSender* sender, | 108 ThreadSafeSender* sender, |
109 int routing_id, | 109 int routing_id, |
110 const std::string& uuid, | 110 const std::string& uuid, |
111 const base::string16& message, | 111 const base::string16& message, |
112 scoped_ptr<blink::WebMessagePortChannelArray> channels) { | 112 std::unique_ptr<blink::WebMessagePortChannelArray> channels) { |
113 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( | 113 sender->Send(new ServiceWorkerHostMsg_PostMessageToClient( |
114 routing_id, uuid, message, | 114 routing_id, uuid, message, |
115 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); | 115 WebMessagePortChannelImpl::ExtractMessagePortIDs(std::move(channels)))); |
116 } | 116 } |
117 | 117 |
118 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( | 118 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( |
119 FetchRequestMode mode) { | 119 FetchRequestMode mode) { |
120 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); | 120 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); |
121 } | 121 } |
122 | 122 |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 context_->sync_event_callbacks.Remove(request_id); | 560 context_->sync_event_callbacks.Remove(request_id); |
561 } | 561 } |
562 | 562 |
563 blink::WebServiceWorkerNetworkProvider* | 563 blink::WebServiceWorkerNetworkProvider* |
564 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( | 564 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( |
565 blink::WebDataSource* data_source) { | 565 blink::WebDataSource* data_source) { |
566 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); | 566 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); |
567 | 567 |
568 // Create a content::ServiceWorkerNetworkProvider for this data source so | 568 // Create a content::ServiceWorkerNetworkProvider for this data source so |
569 // we can observe its requests. | 569 // we can observe its requests. |
570 scoped_ptr<ServiceWorkerNetworkProvider> provider( | 570 std::unique_ptr<ServiceWorkerNetworkProvider> provider( |
571 new ServiceWorkerNetworkProvider( | 571 new ServiceWorkerNetworkProvider(MSG_ROUTING_NONE, |
572 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER)); | 572 SERVICE_WORKER_PROVIDER_FOR_CONTROLLER)); |
573 provider_context_ = provider->context(); | 573 provider_context_ = provider->context(); |
574 | 574 |
575 // Tell the network provider about which version to load. | 575 // Tell the network provider about which version to load. |
576 provider->SetServiceWorkerVersionId(service_worker_version_id_); | 576 provider->SetServiceWorkerVersionId(service_worker_version_id_); |
577 | 577 |
578 // The provider is kept around for the lifetime of the DataSource | 578 // The provider is kept around for the lifetime of the DataSource |
579 // and ownership is transferred to the DataSource. | 579 // and ownership is transferred to the DataSource. |
580 DataSourceExtraData* extra_data = new DataSourceExtraData(); | 580 DataSourceExtraData* extra_data = new DataSourceExtraData(); |
581 data_source->setExtraData(extra_data); | 581 data_source->setExtraData(extra_data); |
582 ServiceWorkerNetworkProvider::AttachToDocumentState(extra_data, | 582 ServiceWorkerNetworkProvider::AttachToDocumentState(extra_data, |
(...skipping 14 matching lines...) Expand all Loading... |
597 } | 597 } |
598 | 598 |
599 void ServiceWorkerContextClient::postMessageToClient( | 599 void ServiceWorkerContextClient::postMessageToClient( |
600 const blink::WebString& uuid, | 600 const blink::WebString& uuid, |
601 const blink::WebString& message, | 601 const blink::WebString& message, |
602 blink::WebMessagePortChannelArray* channels) { | 602 blink::WebMessagePortChannelArray* channels) { |
603 // This may send channels for MessagePorts, and all internal book-keeping | 603 // This may send channels for MessagePorts, and all internal book-keeping |
604 // messages for MessagePort (e.g. QueueMessages) are sent from main thread | 604 // messages for MessagePort (e.g. QueueMessages) are sent from main thread |
605 // (with thread hopping), so we need to do the same thread hopping here not | 605 // (with thread hopping), so we need to do the same thread hopping here not |
606 // to overtake those messages. | 606 // to overtake those messages. |
607 scoped_ptr<blink::WebMessagePortChannelArray> channel_array(channels); | 607 std::unique_ptr<blink::WebMessagePortChannelArray> channel_array(channels); |
608 main_thread_task_runner_->PostTask( | 608 main_thread_task_runner_->PostTask( |
609 FROM_HERE, base::Bind(&SendPostMessageToClientOnMainThread, | 609 FROM_HERE, base::Bind(&SendPostMessageToClientOnMainThread, |
610 base::RetainedRef(sender_), GetRoutingID(), | 610 base::RetainedRef(sender_), GetRoutingID(), |
611 base::UTF16ToUTF8(base::StringPiece16(uuid)), | 611 base::UTF16ToUTF8(base::StringPiece16(uuid)), |
612 static_cast<base::string16>(message), | 612 static_cast<base::string16>(message), |
613 base::Passed(&channel_array))); | 613 base::Passed(&channel_array))); |
614 } | 614 } |
615 | 615 |
616 void ServiceWorkerContextClient::postMessageToCrossOriginClient( | 616 void ServiceWorkerContextClient::postMessageToCrossOriginClient( |
617 const blink::WebCrossOriginServiceWorkerClient&, | 617 const blink::WebCrossOriginServiceWorkerClient&, |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
724 main_thread_task_runner_); | 724 main_thread_task_runner_); |
725 if (params.source.client_info.IsValid()) { | 725 if (params.source.client_info.IsValid()) { |
726 blink::WebServiceWorkerClientInfo web_client = | 726 blink::WebServiceWorkerClientInfo web_client = |
727 ToWebServiceWorkerClientInfo(params.source.client_info); | 727 ToWebServiceWorkerClientInfo(params.source.client_info); |
728 proxy_->dispatchExtendableMessageEvent( | 728 proxy_->dispatchExtendableMessageEvent( |
729 request_id, params.message, params.source_origin, ports, web_client); | 729 request_id, params.message, params.source_origin, ports, web_client); |
730 return; | 730 return; |
731 } | 731 } |
732 | 732 |
733 DCHECK(params.source.service_worker_info.IsValid()); | 733 DCHECK(params.source.service_worker_info.IsValid()); |
734 scoped_ptr<ServiceWorkerHandleReference> handle = | 734 std::unique_ptr<ServiceWorkerHandleReference> handle = |
735 ServiceWorkerHandleReference::Adopt(params.source.service_worker_info, | 735 ServiceWorkerHandleReference::Adopt(params.source.service_worker_info, |
736 sender_.get()); | 736 sender_.get()); |
737 ServiceWorkerDispatcher* dispatcher = | 737 ServiceWorkerDispatcher* dispatcher = |
738 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( | 738 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( |
739 sender_.get(), main_thread_task_runner_.get()); | 739 sender_.get(), main_thread_task_runner_.get()); |
740 scoped_refptr<WebServiceWorkerImpl> worker = | 740 scoped_refptr<WebServiceWorkerImpl> worker = |
741 dispatcher->GetOrCreateServiceWorker(std::move(handle)); | 741 dispatcher->GetOrCreateServiceWorker(std::move(handle)); |
742 proxy_->dispatchExtendableMessageEvent( | 742 proxy_->dispatchExtendableMessageEvent( |
743 request_id, params.message, params.source_origin, ports, | 743 request_id, params.message, params.source_origin, ports, |
744 WebServiceWorkerImpl::CreateHandle(worker)); | 744 WebServiceWorkerImpl::CreateHandle(worker)); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
860 void ServiceWorkerContextClient::OnDidGetClient( | 860 void ServiceWorkerContextClient::OnDidGetClient( |
861 int request_id, | 861 int request_id, |
862 const ServiceWorkerClientInfo& client) { | 862 const ServiceWorkerClientInfo& client) { |
863 TRACE_EVENT0("ServiceWorker", "ServiceWorkerContextClient::OnDidGetClient"); | 863 TRACE_EVENT0("ServiceWorker", "ServiceWorkerContextClient::OnDidGetClient"); |
864 blink::WebServiceWorkerClientCallbacks* callbacks = | 864 blink::WebServiceWorkerClientCallbacks* callbacks = |
865 context_->client_callbacks.Lookup(request_id); | 865 context_->client_callbacks.Lookup(request_id); |
866 if (!callbacks) { | 866 if (!callbacks) { |
867 NOTREACHED() << "Got stray response: " << request_id; | 867 NOTREACHED() << "Got stray response: " << request_id; |
868 return; | 868 return; |
869 } | 869 } |
870 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client; | 870 std::unique_ptr<blink::WebServiceWorkerClientInfo> web_client; |
871 if (!client.IsEmpty()) { | 871 if (!client.IsEmpty()) { |
872 DCHECK(client.IsValid()); | 872 DCHECK(client.IsValid()); |
873 web_client.reset(new blink::WebServiceWorkerClientInfo( | 873 web_client.reset(new blink::WebServiceWorkerClientInfo( |
874 ToWebServiceWorkerClientInfo(client))); | 874 ToWebServiceWorkerClientInfo(client))); |
875 } | 875 } |
876 callbacks->onSuccess(std::move(web_client)); | 876 callbacks->onSuccess(std::move(web_client)); |
877 context_->client_callbacks.Remove(request_id); | 877 context_->client_callbacks.Remove(request_id); |
878 } | 878 } |
879 | 879 |
880 void ServiceWorkerContextClient::OnDidGetClients( | 880 void ServiceWorkerContextClient::OnDidGetClients( |
(...skipping 20 matching lines...) Expand all Loading... |
901 int request_id, | 901 int request_id, |
902 const ServiceWorkerClientInfo& client) { | 902 const ServiceWorkerClientInfo& client) { |
903 TRACE_EVENT0("ServiceWorker", | 903 TRACE_EVENT0("ServiceWorker", |
904 "ServiceWorkerContextClient::OnOpenWindowResponse"); | 904 "ServiceWorkerContextClient::OnOpenWindowResponse"); |
905 blink::WebServiceWorkerClientCallbacks* callbacks = | 905 blink::WebServiceWorkerClientCallbacks* callbacks = |
906 context_->client_callbacks.Lookup(request_id); | 906 context_->client_callbacks.Lookup(request_id); |
907 if (!callbacks) { | 907 if (!callbacks) { |
908 NOTREACHED() << "Got stray response: " << request_id; | 908 NOTREACHED() << "Got stray response: " << request_id; |
909 return; | 909 return; |
910 } | 910 } |
911 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client; | 911 std::unique_ptr<blink::WebServiceWorkerClientInfo> web_client; |
912 if (!client.IsEmpty()) { | 912 if (!client.IsEmpty()) { |
913 DCHECK(client.IsValid()); | 913 DCHECK(client.IsValid()); |
914 web_client.reset(new blink::WebServiceWorkerClientInfo( | 914 web_client.reset(new blink::WebServiceWorkerClientInfo( |
915 ToWebServiceWorkerClientInfo(client))); | 915 ToWebServiceWorkerClientInfo(client))); |
916 } | 916 } |
917 callbacks->onSuccess(std::move(web_client)); | 917 callbacks->onSuccess(std::move(web_client)); |
918 context_->client_callbacks.Remove(request_id); | 918 context_->client_callbacks.Remove(request_id); |
919 } | 919 } |
920 | 920 |
921 void ServiceWorkerContextClient::OnOpenWindowError( | 921 void ServiceWorkerContextClient::OnOpenWindowError( |
(...skipping 18 matching lines...) Expand all Loading... |
940 TRACE_EVENT0("ServiceWorker", | 940 TRACE_EVENT0("ServiceWorker", |
941 "ServiceWorkerContextClient::OnFocusClientResponse"); | 941 "ServiceWorkerContextClient::OnFocusClientResponse"); |
942 blink::WebServiceWorkerClientCallbacks* callback = | 942 blink::WebServiceWorkerClientCallbacks* callback = |
943 context_->client_callbacks.Lookup(request_id); | 943 context_->client_callbacks.Lookup(request_id); |
944 if (!callback) { | 944 if (!callback) { |
945 NOTREACHED() << "Got stray response: " << request_id; | 945 NOTREACHED() << "Got stray response: " << request_id; |
946 return; | 946 return; |
947 } | 947 } |
948 if (!client.IsEmpty()) { | 948 if (!client.IsEmpty()) { |
949 DCHECK(client.IsValid()); | 949 DCHECK(client.IsValid()); |
950 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client ( | 950 std::unique_ptr<blink::WebServiceWorkerClientInfo> web_client( |
951 new blink::WebServiceWorkerClientInfo( | 951 new blink::WebServiceWorkerClientInfo( |
952 ToWebServiceWorkerClientInfo(client))); | 952 ToWebServiceWorkerClientInfo(client))); |
953 callback->onSuccess(std::move(web_client)); | 953 callback->onSuccess(std::move(web_client)); |
954 } else { | 954 } else { |
955 callback->onError(blink::WebServiceWorkerError( | 955 callback->onError(blink::WebServiceWorkerError( |
956 blink::WebServiceWorkerError::ErrorTypeNotFound, | 956 blink::WebServiceWorkerError::ErrorTypeNotFound, |
957 "The WindowClient was not found.")); | 957 "The WindowClient was not found.")); |
958 } | 958 } |
959 | 959 |
960 context_->client_callbacks.Remove(request_id); | 960 context_->client_callbacks.Remove(request_id); |
961 } | 961 } |
962 | 962 |
963 void ServiceWorkerContextClient::OnNavigateClientResponse( | 963 void ServiceWorkerContextClient::OnNavigateClientResponse( |
964 int request_id, | 964 int request_id, |
965 const ServiceWorkerClientInfo& client) { | 965 const ServiceWorkerClientInfo& client) { |
966 TRACE_EVENT0("ServiceWorker", | 966 TRACE_EVENT0("ServiceWorker", |
967 "ServiceWorkerContextClient::OnNavigateClientResponse"); | 967 "ServiceWorkerContextClient::OnNavigateClientResponse"); |
968 blink::WebServiceWorkerClientCallbacks* callbacks = | 968 blink::WebServiceWorkerClientCallbacks* callbacks = |
969 context_->client_callbacks.Lookup(request_id); | 969 context_->client_callbacks.Lookup(request_id); |
970 if (!callbacks) { | 970 if (!callbacks) { |
971 NOTREACHED() << "Got stray response: " << request_id; | 971 NOTREACHED() << "Got stray response: " << request_id; |
972 return; | 972 return; |
973 } | 973 } |
974 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client; | 974 std::unique_ptr<blink::WebServiceWorkerClientInfo> web_client; |
975 if (!client.IsEmpty()) { | 975 if (!client.IsEmpty()) { |
976 DCHECK(client.IsValid()); | 976 DCHECK(client.IsValid()); |
977 web_client.reset(new blink::WebServiceWorkerClientInfo( | 977 web_client.reset(new blink::WebServiceWorkerClientInfo( |
978 ToWebServiceWorkerClientInfo(client))); | 978 ToWebServiceWorkerClientInfo(client))); |
979 } | 979 } |
980 callbacks->onSuccess(std::move(web_client)); | 980 callbacks->onSuccess(std::move(web_client)); |
981 context_->client_callbacks.Remove(request_id); | 981 context_->client_callbacks.Remove(request_id); |
982 } | 982 } |
983 | 983 |
984 void ServiceWorkerContextClient::OnNavigateClientError(int request_id, | 984 void ServiceWorkerContextClient::OnNavigateClientError(int request_id, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 } | 1045 } |
1046 | 1046 |
1047 base::WeakPtr<ServiceWorkerContextClient> | 1047 base::WeakPtr<ServiceWorkerContextClient> |
1048 ServiceWorkerContextClient::GetWeakPtr() { | 1048 ServiceWorkerContextClient::GetWeakPtr() { |
1049 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); | 1049 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |
1050 DCHECK(context_); | 1050 DCHECK(context_); |
1051 return context_->weak_factory.GetWeakPtr(); | 1051 return context_->weak_factory.GetWeakPtr(); |
1052 } | 1052 } |
1053 | 1053 |
1054 } // namespace content | 1054 } // namespace content |
OLD | NEW |