Index: content/renderer/service_worker/service_worker_context_client.cc |
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc |
index babd858683d03a2c59cc7499b4e784554a2dbe72..838a19b4e2ae3d161a2dc0d9e10c1fe307ab95fb 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -61,12 +61,11 @@ |
#include "third_party/WebKit/public/platform/modules/payments/WebPaymentAppRequest.h" |
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerClientQueryOptions.h" |
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerError.h" |
+#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h" |
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerRequest.h" |
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponse.h" |
-#include "third_party/WebKit/public/web/WebDataSource.h" |
#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerContextClient.h" |
#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerContextProxy.h" |
-#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerNetworkProvider.h" |
namespace content { |
@@ -84,36 +83,28 @@ void CallWorkerContextDestroyedOnMainThread(int embedded_worker_id) { |
WorkerContextDestroyed(embedded_worker_id); |
} |
-// We store an instance of this class in the "extra data" of the WebDataSource |
-// and attach a ServiceWorkerNetworkProvider to it as base::UserData. |
-// (see createServiceWorkerNetworkProvider). |
-class DataSourceExtraData |
- : public blink::WebDataSource::ExtraData, |
- public base::SupportsUserData { |
- public: |
- DataSourceExtraData() {} |
- ~DataSourceExtraData() override {} |
-}; |
- |
// Called on the main thread only and blink owns it. |
class WebServiceWorkerNetworkProviderImpl |
: public blink::WebServiceWorkerNetworkProvider { |
public: |
+ explicit WebServiceWorkerNetworkProviderImpl( |
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider) |
+ : provider_(std::move(provider)) {} |
+ |
// Blink calls this method for each request starting with the main script, |
// we tag them with the provider id. |
- void willSendRequest(blink::WebDataSource* data_source, |
- blink::WebURLRequest& request) override { |
- ServiceWorkerNetworkProvider* provider = |
- ServiceWorkerNetworkProvider::FromDocumentState( |
- static_cast<DataSourceExtraData*>(data_source->getExtraData())); |
+ void willSendRequest(blink::WebURLRequest& request) override { |
std::unique_ptr<RequestExtraData> extra_data(new RequestExtraData); |
- extra_data->set_service_worker_provider_id(provider->provider_id()); |
+ extra_data->set_service_worker_provider_id(provider_->provider_id()); |
extra_data->set_originated_from_service_worker(true); |
// Service workers are only available in secure contexts, so all requests |
// are initiated in a secure context. |
extra_data->set_initiated_in_secure_context(true); |
request.setExtraData(extra_data.release()); |
} |
+ |
+ private: |
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider_; |
}; |
ServiceWorkerStatusCode EventResultToStatus( |
@@ -795,8 +786,7 @@ void ServiceWorkerContextClient::didHandlePaymentRequestEvent( |
} |
blink::WebServiceWorkerNetworkProvider* |
-ServiceWorkerContextClient::createServiceWorkerNetworkProvider( |
- blink::WebDataSource* data_source) { |
+ServiceWorkerContextClient::createServiceWorkerNetworkProvider() { |
DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); |
// Create a content::ServiceWorkerNetworkProvider for this data source so |
@@ -811,15 +801,8 @@ ServiceWorkerContextClient::createServiceWorkerNetworkProvider( |
provider->SetServiceWorkerVersionId(service_worker_version_id_, |
embedded_worker_id_); |
- // The provider is kept around for the lifetime of the DataSource |
- // and ownership is transferred to the DataSource. |
- DataSourceExtraData* extra_data = new DataSourceExtraData(); |
- data_source->setExtraData(extra_data); |
- ServiceWorkerNetworkProvider::AttachToDocumentState(extra_data, |
- std::move(provider)); |
- |
// Blink is responsible for deleting the returned object. |
- return new WebServiceWorkerNetworkProviderImpl(); |
+ return new WebServiceWorkerNetworkProviderImpl(std::move(provider)); |
} |
blink::WebServiceWorkerProvider* |