Chromium Code Reviews| 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( |