Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 9c7635523fe8714489d7c7aafd50e2f96a924997..69767a442e64516b272ecd6200b9504c98e520da 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -2460,9 +2460,14 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame, |
// exists). |
if (!ServiceWorkerNetworkProvider::FromDocumentState( |
DocumentState::FromDataSource(datasource))) { |
+ ServiceWorkerProviderType provider_type = |
+ SERVICE_WORKER_PROVIDER_FOR_WINDOW; |
+ if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == |
+ blink::WebSandboxFlags::Origin) { |
+ provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; |
+ } |
scoped_ptr<ServiceWorkerNetworkProvider> network_provider( |
- new ServiceWorkerNetworkProvider(routing_id_, |
- SERVICE_WORKER_PROVIDER_FOR_WINDOW)); |
+ new ServiceWorkerNetworkProvider(routing_id_, provider_type)); |
ServiceWorkerNetworkProvider::AttachToDocumentState( |
DocumentState::FromDataSource(datasource), |
network_provider.Pass()); |
@@ -3669,6 +3674,8 @@ bool RenderFrameImpl::isControlledByServiceWorker(WebDataSource& data_source) { |
ServiceWorkerNetworkProvider* provider = |
ServiceWorkerNetworkProvider::FromDocumentState( |
DocumentState::FromDataSource(&data_source)); |
+ if (!provider->context()) |
+ return false; |
return provider->context()->controller_handle_id() != |
kInvalidServiceWorkerHandleId; |
} |
@@ -3677,8 +3684,7 @@ int64_t RenderFrameImpl::serviceWorkerID(WebDataSource& data_source) { |
ServiceWorkerNetworkProvider* provider = |
ServiceWorkerNetworkProvider::FromDocumentState( |
DocumentState::FromDataSource(&data_source)); |
- |
- if (provider->context()->controller()) |
+ if (provider->context() && provider->context()->controller()) |
return provider->context()->controller()->version_id(); |
return kInvalidServiceWorkerVersionId; |
} |