Chromium Code Reviews| 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))); |
| } |