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..9f448c9d65f0dc2fd6052078acc8f8edfa07159e 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,42 @@ bool IsFrameSecure(blink::WebFrame* frame) { |
return true; |
} |
-} // namespace |
+// An WebServiceWorkerNetworkProvider for frame. This wraps |
+// ServiceWorkerNetworkProvider implementation and is owned by blink. |
+class WebServiceWorkerNetworkProviderForNavigation |
horo
2017/03/10 04:43:28
"ForNavigation" looks misleading. I think "ForFram
kinuko
2017/03/10 05:52:28
Done. (Does it make sense to CreateForNavigation
horo
2017/03/10 07:35:33
I think the method name CreateForNavigation is OK.
|
+ : public blink::WebServiceWorkerNetworkProvider { |
+ public: |
+ WebServiceWorkerNetworkProviderForNavigation( |
+ std::unique_ptr<ServiceWorkerNetworkProvider> provider) |
+ : provider_(std::move(provider)) {} |
+ |
+ void willSendRequest(blink::WebURLRequest& request) override { |
+ RequestExtraData* extra_data = |
+ static_cast<RequestExtraData*>(request.getExtraData()); |
+ DCHECK(extra_data); |
+ extra_data->set_service_worker_provider_id(provider_->provider_id()); |
+ } |
-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 +135,16 @@ ServiceWorkerNetworkProvider::CreateForNavigation( |
network_provider = std::unique_ptr<ServiceWorkerNetworkProvider>( |
new ServiceWorkerNetworkProvider()); |
} |
- return network_provider; |
+ return base::MakeUnique<WebServiceWorkerNetworkProviderForNavigation>( |
+ std::move(network_provider)); |
+} |
+ |
+// static |
+ServiceWorkerNetworkProvider* |
+ServiceWorkerNetworkProvider::GetInwardProviderForNavigation( |
+ blink::WebServiceWorkerNetworkProvider* provider) { |
+ return static_cast<WebServiceWorkerNetworkProviderForNavigation*>(provider) |
+ ->provider(); |
} |
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( |