Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 1294243004: PlzNavigate: Make ServiceWorker work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missed a spot. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 2558 matching lines...) Expand 10 before | Expand all | Expand 10 after
2569 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK); 2569 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK);
2570 break; 2570 break;
2571 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. 2571 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post.
2572 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 2572 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY);
2573 break; 2573 break;
2574 default: 2574 default:
2575 NOTREACHED(); 2575 NOTREACHED();
2576 } 2576 }
2577 } 2577 }
2578 2578
2579 // Create the serviceworker's per-document network observing object if it 2579 bool browser_side_navigation =
michaeln 2015/10/01 23:11:12 this block of code is still tricky to follow and e
Fabrice (no longer in Chrome) 2015/10/02 16:37:34 Refactored a bit. WDYT?
2580 // does not exist (When navigation happens within a page, the provider already 2580 base::CommandLine::ForCurrentProcess()->HasSwitch(
2581 // exists). 2581 switches::kEnableBrowserSideNavigation);
2582 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2582 if ((browser_side_navigation && content_initiated) ||
michaeln 2015/10/01 23:11:12 We end up w/o having created a ServiceWorkerNetwor
Fabrice (no longer in Chrome) 2015/10/02 16:37:34 In PlzNavigate, this methods ends up being called
2583 DocumentState::FromDataSource(datasource))) { 2583 (!browser_side_navigation &&
2584 ServiceWorkerProviderType provider_type = 2584 ServiceWorkerNetworkProvider::FromDocumentState(
michaeln 2015/10/01 23:11:12 i think u could put this up top (at line) as an ea
Fabrice (no longer in Chrome) 2015/10/02 16:37:34 I am not 100% sure about that since we end up crea
2585 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2585 DocumentState::FromDataSource(datasource))))
2586 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2586 return;
2587 blink::WebSandboxFlags::Origin) { 2587
2588 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2589 ServiceWorkerProviderType provider_type =
2590 SERVICE_WORKER_PROVIDER_FOR_WINDOW;
2591
2592 // PlzNavigate
2593 // Retrieve the service_worker_provider_id from the RequestNavigationParams.
2594 if (browser_side_navigation) {
2595 NavigationStateImpl* navigation_state =
2596 static_cast<NavigationStateImpl*>(
2597 DocumentState::FromDataSource(datasource)->navigation_state());
2598 service_worker_provider_id =
2599 navigation_state->request_params().service_worker_provider_id;
2600 if (service_worker_provider_id == kInvalidServiceWorkerProviderId)
2588 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2601 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
michaeln 2015/10/01 23:11:12 The provider_type is only used by the ServiceWorke
Fabrice (no longer in Chrome) 2015/10/02 16:37:34 Thanks, I moved the logic up here. Done.
2589 }
2590 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2591 new ServiceWorkerNetworkProvider(routing_id_, provider_type));
2592 ServiceWorkerNetworkProvider::AttachToDocumentState(
2593 DocumentState::FromDataSource(datasource),
2594 network_provider.Pass());
2595 } 2602 }
2603
2604 if (!browser_side_navigation) {
michaeln 2015/10/01 23:11:12 this could be an else clause
Fabrice (no longer in Chrome) 2015/10/02 16:37:34 ... Yes. I feel silly.
2605 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) ==
2606 blink::WebSandboxFlags::Origin) {
2607 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2608 }
2609 }
2610
2611 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2612 new ServiceWorkerNetworkProvider(routing_id_, provider_type,
2613 service_worker_provider_id));
2614 ServiceWorkerNetworkProvider::AttachToDocumentState(
2615 DocumentState::FromDataSource(datasource),
2616 network_provider.Pass());
2596 } 2617 }
2597 2618
2598 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2619 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2599 double triggering_event_time) { 2620 double triggering_event_time) {
2600 DCHECK(!frame_ || frame_ == frame); 2621 DCHECK(!frame_ || frame_ == frame);
2601 WebDataSource* ds = frame->provisionalDataSource(); 2622 WebDataSource* ds = frame->provisionalDataSource();
2602 2623
2603 // In fast/loader/stop-provisional-loads.html, we abort the load before this 2624 // In fast/loader/stop-provisional-loads.html, we abort the load before this
2604 // callback is invoked. 2625 // callback is invoked.
2605 if (!ds) 2626 if (!ds)
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
3325 3346
3326 int provider_id = kInvalidServiceWorkerProviderId; 3347 int provider_id = kInvalidServiceWorkerProviderId;
3327 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3348 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
3328 request.frameType() == blink::WebURLRequest::FrameTypeNested) { 3349 request.frameType() == blink::WebURLRequest::FrameTypeNested) {
3329 // |provisionalDataSource| may be null in some content::ResourceFetcher 3350 // |provisionalDataSource| may be null in some content::ResourceFetcher
3330 // use cases, we don't hook those requests. 3351 // use cases, we don't hook those requests.
3331 if (frame->provisionalDataSource()) { 3352 if (frame->provisionalDataSource()) {
3332 ServiceWorkerNetworkProvider* provider = 3353 ServiceWorkerNetworkProvider* provider =
3333 ServiceWorkerNetworkProvider::FromDocumentState( 3354 ServiceWorkerNetworkProvider::FromDocumentState(
3334 DocumentState::FromDataSource(frame->provisionalDataSource())); 3355 DocumentState::FromDataSource(frame->provisionalDataSource()));
3335 provider_id = provider->provider_id(); 3356 if (provider)
3357 provider_id = provider->provider_id();
3336 } 3358 }
3337 } else if (frame->dataSource()) { 3359 } else if (frame->dataSource()) {
3338 ServiceWorkerNetworkProvider* provider = 3360 ServiceWorkerNetworkProvider* provider =
3339 ServiceWorkerNetworkProvider::FromDocumentState( 3361 ServiceWorkerNetworkProvider::FromDocumentState(
3340 DocumentState::FromDataSource(frame->dataSource())); 3362 DocumentState::FromDataSource(frame->dataSource()));
3341 provider_id = provider->provider_id(); 3363 if (provider) {
3342 // Explicitly set the SkipServiceWorker flag here if the renderer process 3364 provider_id = provider->provider_id();
3343 // hasn't received SetControllerServiceWorker message. 3365 // Explicitly set the SkipServiceWorker flag here if the renderer process
3344 if (!provider->IsControlledByServiceWorker()) 3366 // hasn't received SetControllerServiceWorker message.
3345 request.setSkipServiceWorker(true); 3367 if (!provider->IsControlledByServiceWorker())
3368 request.setSkipServiceWorker(true);
3369 }
3346 } 3370 }
3347 3371
3348 WebFrame* parent = frame->parent(); 3372 WebFrame* parent = frame->parent();
3349 int parent_routing_id = MSG_ROUTING_NONE; 3373 int parent_routing_id = MSG_ROUTING_NONE;
3350 if (!parent) { 3374 if (!parent) {
3351 parent_routing_id = -1; 3375 parent_routing_id = -1;
3352 } else if (parent->isWebLocalFrame()) { 3376 } else if (parent->isWebLocalFrame()) {
3353 parent_routing_id = FromWebFrame(parent)->GetRoutingID(); 3377 parent_routing_id = FromWebFrame(parent)->GetRoutingID();
3354 } else { 3378 } else {
3355 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id(); 3379 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id();
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
4896 WebDataSource* provisional_data_source = frame_->provisionalDataSource(); 4920 WebDataSource* provisional_data_source = frame_->provisionalDataSource();
4897 WebDataSource* current_data_source = frame_->dataSource(); 4921 WebDataSource* current_data_source = frame_->dataSource();
4898 WebDataSource* data_source = 4922 WebDataSource* data_source =
4899 provisional_data_source ? provisional_data_source : current_data_source; 4923 provisional_data_source ? provisional_data_source : current_data_source;
4900 4924
4901 // The current entry can only be replaced if there already is an entry in the 4925 // The current entry can only be replaced if there already is an entry in the
4902 // history list. 4926 // history list.
4903 if (data_source && render_view_->history_list_length_ > 0) { 4927 if (data_source && render_view_->history_list_length_ > 0) {
4904 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 4928 should_replace_current_entry = data_source->replacesCurrentHistoryItem();
4905 } 4929 }
4930
4931 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN,
4932 GetFetchRequestModeForWebURLRequest(*request));
4933 DCHECK_EQ(FETCH_CREDENTIALS_MODE_INCLUDE,
4934 GetFetchCredentialsModeForWebURLRequest(*request));
4935 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) ==
4936 FetchRedirectMode::MANUAL_MODE);
4937 DCHECK_IMPLIES(!frame_->parent(),
4938 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4939 REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL);
4940 DCHECK_IMPLIES(frame_->parent(),
4941 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4942 REQUEST_CONTEXT_FRAME_TYPE_NESTED);
4943
4906 Send(new FrameHostMsg_BeginNavigation( 4944 Send(new FrameHostMsg_BeginNavigation(
4907 routing_id_, 4945 routing_id_,
4908 MakeCommonNavigationParams(request, should_replace_current_entry), 4946 MakeCommonNavigationParams(request, should_replace_current_entry),
4909 BeginNavigationParams( 4947 BeginNavigationParams(
4910 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), 4948 request->httpMethod().latin1(),
4911 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture()), 4949 GetWebURLRequestHeaders(*request),
4950 GetLoadFlagsForWebURLRequest(*request),
4951 request->hasUserGesture(),
4952 request->skipServiceWorker(),
4953 GetRequestContextTypeForWebURLRequest(*request)),
4912 GetRequestBodyForWebURLRequest(*request))); 4954 GetRequestBodyForWebURLRequest(*request)));
4913 } 4955 }
4914 4956
4915 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, 4957 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params,
4916 WebFrame* frame) { 4958 WebFrame* frame) {
4917 // A loadData request with a specified base URL. 4959 // A loadData request with a specified base URL.
4918 std::string mime_type, charset, data; 4960 std::string mime_type, charset, data;
4919 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) { 4961 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) {
4920 const GURL base_url = params.base_url_for_data_url.is_empty() ? 4962 const GURL base_url = params.base_url_for_data_url.is_empty() ?
4921 params.url : params.base_url_for_data_url; 4963 params.url : params.base_url_for_data_url;
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
5173 mojo::ServiceProviderPtr service_provider; 5215 mojo::ServiceProviderPtr service_provider;
5174 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5216 mojo::URLRequestPtr request(mojo::URLRequest::New());
5175 request->url = mojo::String::From(url); 5217 request->url = mojo::String::From(url);
5176 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5218 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5177 nullptr, nullptr, 5219 nullptr, nullptr,
5178 base::Bind(&OnGotContentHandlerID)); 5220 base::Bind(&OnGotContentHandlerID));
5179 return service_provider.Pass(); 5221 return service_provider.Pass();
5180 } 5222 }
5181 5223
5182 } // namespace content 5224 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698