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..7ed7d51c8a5da2468a742ef71921da21b392e04c 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -2059,9 +2059,10 @@ blink::WebServiceWorkerProvider* RenderFrameImpl::createServiceWorkerProvider( |
ServiceWorkerNetworkProvider* provider = |
ServiceWorkerNetworkProvider::FromDocumentState( |
DocumentState::FromDataSource(frame->dataSource())); |
+ DCHECK(provider); |
return new WebServiceWorkerProviderImpl( |
ChildThreadImpl::current()->thread_safe_sender(), |
- provider ? provider->context() : NULL); |
+ provider->context()); |
} |
void RenderFrameImpl::didAccessInitialDocument(blink::WebLocalFrame* frame) { |
@@ -2460,9 +2461,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 +3675,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 +3685,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; |
} |