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

Unified Diff: content/child/service_worker/service_worker_network_provider.cc

Issue 2733283004: Expose WebServiceWorkerNetworkProvider on DataSource (Closed)
Patch Set: consistency 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/child/service_worker/service_worker_network_provider.cc
diff --git a/content/child/service_worker/service_worker_network_provider.cc b/content/child/service_worker/service_worker_network_provider.cc
index 555f50913af750755f3f146362e70e2ea01a9c99..7a13d728ffa6025200147054498d52b2893e79e7 100644
--- a/content/child/service_worker/service_worker_network_provider.cc
+++ b/content/child/service_worker/service_worker_network_provider.cc
@@ -6,6 +6,8 @@
#include "base/atomic_sequence_num.h"
#include "content/child/child_thread_impl.h"
+#include "content/child/request_extra_data.h"
+#include "content/child/service_worker/service_worker_handle_reference.h"
#include "content/child/service_worker/service_worker_provider_context.h"
#include "content/common/navigation_params.h"
#include "content/common/service_worker/service_worker_messages.h"
@@ -14,6 +16,7 @@
#include "content/public/common/browser_side_navigation_policy.h"
#include "ipc/ipc_sync_channel.h"
#include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
+#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "third_party/WebKit/public/web/WebSandboxFlags.h"
@@ -21,8 +24,6 @@ namespace content {
namespace {
-const char kUserDataKey[] = "SWProviderKey";
-
// Must be unique in the child process.
int GetNextProviderId() {
static base::StaticAtomicSequenceNumber sequence;
@@ -42,22 +43,44 @@ bool IsFrameSecure(blink::WebFrame* frame) {
return true;
}
-} // namespace
+// An WebServiceWorkerNetworkProvider for frame. This wraps
+// ServiceWorkerNetworkProvider implementation and is owned by blink.
+class WebServiceWorkerNetworkProviderForFrame
+ : public blink::WebServiceWorkerNetworkProvider {
+ public:
+ WebServiceWorkerNetworkProviderForFrame(
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider)
+ : provider_(std::move(provider)) {}
+
+ void willSendRequest(blink::WebURLRequest& request) override {
+ RequestExtraData* extra_data =
+ static_cast<RequestExtraData*>(request.getExtraData());
+ if (!extra_data)
+ extra_data = new RequestExtraData();
+ extra_data->set_service_worker_provider_id(provider_->provider_id());
+ request.setExtraData(extra_data);
+ }
-void ServiceWorkerNetworkProvider::AttachToDocumentState(
- base::SupportsUserData* datasource_userdata,
- std::unique_ptr<ServiceWorkerNetworkProvider> network_provider) {
- datasource_userdata->SetUserData(&kUserDataKey, network_provider.release());
-}
+ bool isControlledByServiceWorker() override {
+ return provider_->IsControlledByServiceWorker();
+ }
-ServiceWorkerNetworkProvider* ServiceWorkerNetworkProvider::FromDocumentState(
- base::SupportsUserData* datasource_userdata) {
- return static_cast<ServiceWorkerNetworkProvider*>(
- datasource_userdata->GetUserData(&kUserDataKey));
-}
+ int64_t serviceWorkerID() override {
+ if (provider_->context() && provider_->context()->controller())
+ return provider_->context()->controller()->version_id();
+ return kInvalidServiceWorkerVersionId;
+ }
+
+ ServiceWorkerNetworkProvider* provider() { return provider_.get(); }
+
+ private:
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider_;
+};
+
+} // namespace
// static
-std::unique_ptr<ServiceWorkerNetworkProvider>
+std::unique_ptr<blink::WebServiceWorkerNetworkProvider>
ServiceWorkerNetworkProvider::CreateForNavigation(
int route_id,
const RequestNavigationParams& request_params,
@@ -114,7 +137,16 @@ ServiceWorkerNetworkProvider::CreateForNavigation(
network_provider = std::unique_ptr<ServiceWorkerNetworkProvider>(
new ServiceWorkerNetworkProvider());
}
- return network_provider;
+ return base::MakeUnique<WebServiceWorkerNetworkProviderForFrame>(
+ std::move(network_provider));
+}
+
+// static
+ServiceWorkerNetworkProvider*
+ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider(
+ blink::WebServiceWorkerNetworkProvider* provider) {
+ return static_cast<WebServiceWorkerNetworkProviderForFrame*>(provider)
+ ->provider();
}
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
« no previous file with comments | « content/child/service_worker/service_worker_network_provider.h ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698