Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index b2e454f4cdece95127e38118fd56c6f05e9fb887..8c3234924c265603b62481739546ae75ff90962d 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -2576,22 +2576,53 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame, |
} |
} |
- // Create the serviceworker's per-document network observing object if it |
- // does not exist (When navigation happens within a page, the provider already |
- // exists). |
- if (!ServiceWorkerNetworkProvider::FromDocumentState( |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation)) { |
+ // PlzNavigate |
+ // Create a new ServiceWorker's network observing object for every |
+ // navigation. |
+ if (!content_initiated) { |
+ ServiceWorkerProviderType provider_type = |
clamy
2015/10/01 12:41:27
There's a lot of repeated code here. How about:
bo
Fabrice (no longer in Chrome)
2015/10/01 18:29:56
I reworked the whole part here.
|
+ SERVICE_WORKER_PROVIDER_FOR_WINDOW; |
+ if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == |
+ blink::WebSandboxFlags::Origin) { |
+ provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; |
michaeln
2015/10/01 01:42:16
Are the effectiveSandboxFlags() sent as part of th
Fabrice (no longer in Chrome)
2015/10/01 18:29:56
That's my mistake. I'm setting the provider_id to
|
+ } |
+ |
+ NavigationStateImpl* navigation_state = |
+ static_cast<NavigationStateImpl*>( |
+ DocumentState::FromDataSource(datasource)->navigation_state()); |
+ int service_worker_provider_id = |
+ navigation_state->request_params().service_worker_provider_id; |
+ scoped_ptr<ServiceWorkerNetworkProvider> network_provider( |
+ new ServiceWorkerNetworkProvider(routing_id_, provider_type, |
+ service_worker_provider_id)); |
+ |
+ ServiceWorkerNetworkProvider::AttachToDocumentState( |
+ DocumentState::FromDataSource(datasource), |
+ network_provider.Pass()); |
+ } |
+ } else { |
+ // Create the ServiceWorker's per-document network observing object if it |
+ // does not exist (When navigation happens within a page, the provider |
+ // already 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; |
+ 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_, provider_type, |
+ kInvalidServiceWorkerProviderId)); |
+ |
+ ServiceWorkerNetworkProvider::AttachToDocumentState( |
+ DocumentState::FromDataSource(datasource), |
+ network_provider.Pass()); |
} |
- scoped_ptr<ServiceWorkerNetworkProvider> network_provider( |
- new ServiceWorkerNetworkProvider(routing_id_, provider_type)); |
- ServiceWorkerNetworkProvider::AttachToDocumentState( |
- DocumentState::FromDataSource(datasource), |
- network_provider.Pass()); |
} |
} |
@@ -4903,12 +4934,30 @@ void RenderFrameImpl::BeginNavigation(blink::WebURLRequest* request) { |
if (data_source && render_view_->history_list_length_ > 0) { |
should_replace_current_entry = data_source->replacesCurrentHistoryItem(); |
} |
+ |
+ DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN, |
+ GetFetchRequestModeForWebURLRequest(*request)); |
+ DCHECK_EQ(FETCH_CREDENTIALS_MODE_INCLUDE, |
+ GetFetchCredentialsModeForWebURLRequest(*request)); |
+ DCHECK(GetFetchRedirectModeForWebURLRequest(*request) == |
+ FetchRedirectMode::MANUAL_MODE); |
+ DCHECK_IMPLIES(!frame_->parent(), |
+ GetRequestContextFrameTypeForWebURLRequest(*request) == |
+ REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); |
+ DCHECK_IMPLIES(frame_->parent(), |
+ GetRequestContextFrameTypeForWebURLRequest(*request) == |
+ REQUEST_CONTEXT_FRAME_TYPE_NESTED); |
+ |
Send(new FrameHostMsg_BeginNavigation( |
routing_id_, |
MakeCommonNavigationParams(request, should_replace_current_entry), |
BeginNavigationParams( |
- request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), |
- GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture()), |
+ request->httpMethod().latin1(), |
+ GetWebURLRequestHeaders(*request), |
+ GetLoadFlagsForWebURLRequest(*request), |
+ request->hasUserGesture(), |
+ request->skipServiceWorker(), |
+ GetRequestContextTypeForWebURLRequest(*request)), |
GetRequestBodyForWebURLRequest(*request))); |
} |