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

Unified Diff: content/renderer/shared_worker/embedded_shared_worker_stub.cc

Issue 2733283004: Expose WebServiceWorkerNetworkProvider on DataSource (Closed)
Patch Set: crash fix Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/shared_worker/embedded_shared_worker_stub.cc
diff --git a/content/renderer/shared_worker/embedded_shared_worker_stub.cc b/content/renderer/shared_worker/embedded_shared_worker_stub.cc
index eb8d6e33d68a6a42660212760d8fac5ab568c68d..cb5ef55d60ed0b612fc78644f0dcec74b8f0eaf0 100644
--- a/content/renderer/shared_worker/embedded_shared_worker_stub.cc
+++ b/content/renderer/shared_worker/embedded_shared_worker_stub.cc
@@ -26,10 +26,9 @@
#include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/platform/URLConversion.h"
#include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
-#include "third_party/WebKit/public/web/WebDataSource.h"
+#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h"
#include "third_party/WebKit/public/web/WebSharedWorker.h"
#include "third_party/WebKit/public/web/WebSharedWorkerClient.h"
-#include "third_party/WebKit/public/web/modules/serviceworker/WebServiceWorkerNetworkProvider.h"
#include "url/origin.h"
namespace content {
@@ -66,33 +65,21 @@ class SharedWorkerWebApplicationCacheHostImpl
}
};
-// 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 {}
- bool is_secure_context = false;
-};
-
// Called on the main thread only and blink owns it.
class WebServiceWorkerNetworkProviderImpl
: public blink::WebServiceWorkerNetworkProvider {
public:
+ WebServiceWorkerNetworkProviderImpl(
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider,
+ bool is_secure_context)
+ : provider_(std::move(provider)), is_secure_context_(is_secure_context) {}
+
// 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 =
- GetNetworkProviderFromDataSource(data_source);
+ 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_initiated_in_secure_context(
- static_cast<DataSourceExtraData*>(data_source->getExtraData())
- ->is_secure_context);
+ extra_data->set_service_worker_provider_id(provider_->provider_id());
+ extra_data->set_initiated_in_secure_context(is_secure_context_);
request.setExtraData(extra_data.release());
// If the provider does not have a controller at this point, the renderer
// expects subresource requests to never be handled by a controlling service
@@ -102,7 +89,7 @@ class WebServiceWorkerNetworkProviderImpl
// request and break the assumptions of the renderer.
if (request.getRequestContext() !=
blink::WebURLRequest::RequestContextSharedWorker &&
- !provider->IsControlledByServiceWorker() &&
+ !provider_->IsControlledByServiceWorker() &&
request.getServiceWorkerMode() !=
blink::WebURLRequest::ServiceWorkerMode::None) {
request.setServiceWorkerMode(
@@ -110,26 +97,19 @@ class WebServiceWorkerNetworkProviderImpl
}
}
- bool isControlledByServiceWorker(blink::WebDataSource& data_source) override {
- ServiceWorkerNetworkProvider* provider =
- GetNetworkProviderFromDataSource(&data_source);
- return provider->IsControlledByServiceWorker();
+ bool isControlledByServiceWorker() override {
+ return provider_->IsControlledByServiceWorker();
}
- int64_t serviceWorkerID(blink::WebDataSource& data_source) override {
- ServiceWorkerNetworkProvider* provider =
- GetNetworkProviderFromDataSource(&data_source);
- if (provider->context()->controller())
- return provider->context()->controller()->version_id();
+ int64_t serviceWorkerID() override {
+ if (provider_->context()->controller())
+ return provider_->context()->controller()->version_id();
return kInvalidServiceWorkerVersionId;
}
private:
- ServiceWorkerNetworkProvider* GetNetworkProviderFromDataSource(
- const blink::WebDataSource* data_source) {
- return ServiceWorkerNetworkProvider::FromDocumentState(
- static_cast<DataSourceExtraData*>(data_source->getExtraData()));
- }
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider_;
+ const bool is_secure_context_;
};
} // namespace
@@ -245,8 +225,7 @@ blink::WebWorkerContentSettingsClientProxy*
}
blink::WebServiceWorkerNetworkProvider*
-EmbeddedSharedWorkerStub::createServiceWorkerNetworkProvider(
- blink::WebDataSource* data_source) {
+EmbeddedSharedWorkerStub::createServiceWorkerNetworkProvider() {
// Create a content::ServiceWorkerNetworkProvider for this data source so
// we can observe its requests.
std::unique_ptr<ServiceWorkerNetworkProvider> provider(
@@ -254,16 +233,9 @@ EmbeddedSharedWorkerStub::createServiceWorkerNetworkProvider(
route_id_, SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER,
true /* is_parent_frame_secure */));
- // The provider is kept around for the lifetime of the DataSource
- // and ownership is transferred to the DataSource.
- DataSourceExtraData* extra_data = new DataSourceExtraData();
- extra_data->is_secure_context = IsOriginSecure(url_);
- 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),
+ IsOriginSecure(url_));
}
void EmbeddedSharedWorkerStub::sendDevToolsMessage(

Powered by Google App Engine
This is Rietveld 408576698