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

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: Cleanup includes and forward decls. 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 24 matching lines...) Expand all
35 #include "content/child/webmessageportchannel_impl.h" 35 #include "content/child/webmessageportchannel_impl.h"
36 #include "content/child/websocket_bridge.h" 36 #include "content/child/websocket_bridge.h"
37 #include "content/child/weburlresponse_extradata_impl.h" 37 #include "content/child/weburlresponse_extradata_impl.h"
38 #include "content/common/accessibility_messages.h" 38 #include "content/common/accessibility_messages.h"
39 #include "content/common/clipboard_messages.h" 39 #include "content/common/clipboard_messages.h"
40 #include "content/common/frame_messages.h" 40 #include "content/common/frame_messages.h"
41 #include "content/common/frame_replication_state.h" 41 #include "content/common/frame_replication_state.h"
42 #include "content/common/input_messages.h" 42 #include "content/common/input_messages.h"
43 #include "content/common/navigation_params.h" 43 #include "content/common/navigation_params.h"
44 #include "content/common/service_worker/service_worker_types.h" 44 #include "content/common/service_worker/service_worker_types.h"
45 #include "content/common/service_worker/service_worker_utils.h"
45 #include "content/common/site_isolation_policy.h" 46 #include "content/common/site_isolation_policy.h"
46 #include "content/common/swapped_out_messages.h" 47 #include "content/common/swapped_out_messages.h"
47 #include "content/common/view_messages.h" 48 #include "content/common/view_messages.h"
48 #include "content/public/common/bindings_policy.h" 49 #include "content/public/common/bindings_policy.h"
49 #include "content/public/common/content_constants.h" 50 #include "content/public/common/content_constants.h"
50 #include "content/public/common/content_switches.h" 51 #include "content/public/common/content_switches.h"
51 #include "content/public/common/context_menu_params.h" 52 #include "content/public/common/context_menu_params.h"
52 #include "content/public/common/isolated_world_ids.h" 53 #include "content/public/common/isolated_world_ids.h"
53 #include "content/public/common/page_state.h" 54 #include "content/public/common/page_state.h"
54 #include "content/public/common/resource_response.h" 55 #include "content/public/common/resource_response.h"
(...skipping 2519 matching lines...) Expand 10 before | Expand all | Expand 10 after
2574 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK); 2575 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK);
2575 break; 2576 break;
2576 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. 2577 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post.
2577 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 2578 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY);
2578 break; 2579 break;
2579 default: 2580 default:
2580 NOTREACHED(); 2581 NOTREACHED();
2581 } 2582 }
2582 } 2583 }
2583 2584
2584 // Create the serviceworker's per-document network observing object if it 2585 bool browser_side_navigation =
2585 // does not exist (When navigation happens within a page, the provider already 2586 base::CommandLine::ForCurrentProcess()->HasSwitch(
2586 // exists). 2587 switches::kEnableBrowserSideNavigation);
michaeln 2015/10/07 01:16:44 please keep this comment about when/why a provider
Fabrice (no longer in Chrome) 2015/10/07 12:59:43 Done.
2587 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2588
2588 DocumentState::FromDataSource(datasource))) { 2589 if (ServiceWorkerNetworkProvider::FromDocumentState(
2589 ServiceWorkerProviderType provider_type = 2590 DocumentState::FromDataSource(datasource)))
2590 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2591 return;
2592
2593 // PlzNavigate
2594 // The RequestNavigationParams are required to initialize the
2595 // ServiceWorkerNetworkProvider.
2596 if (browser_side_navigation && content_initiated)
michaeln 2015/10/07 01:16:44 There are a serveral callsites where a non-null pr
Fabrice (no longer in Chrome) 2015/10/07 12:59:43 Done.
2597 return;
2598
2599 ServiceWorkerProviderType provider_type = SERVICE_WORKER_PROVIDER_FOR_WINDOW;
2600 scoped_ptr<ServiceWorkerNetworkProvider> network_provider;
2601
2602 if (browser_side_navigation) {
2603 // PlzNavigate
2604 // Retrieve the service_worker_provider_id from the RequestNavigationParams.
2605 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2606 DocumentState::FromDataSource(datasource)->navigation_state());
2607 int service_worker_provider_id =
2608 navigation_state->request_params().service_worker_provider_id;
2609
2610 // The browser sets service_worker_provider_id to
2611 // kInvalidServiceWorkerProviderId for sandboxed frames.
2612 if (service_worker_provider_id == kInvalidServiceWorkerProviderId) {
2613 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
michaeln 2015/10/07 01:16:44 we could use the empty ctor here too
Fabrice (no longer in Chrome) 2015/10/07 12:59:43 Done.
2614 } else {
2615 DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
2616 service_worker_provider_id));
2617 }
2618
2619 // Initalize a new ServiceWorkerNetworkProvider.
2620 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2621 new ServiceWorkerNetworkProvider(routing_id_, provider_type,
2622 service_worker_provider_id));
2623 } else {
2591 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2624 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) ==
2592 blink::WebSandboxFlags::Origin) { 2625 blink::WebSandboxFlags::Origin) {
2593 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2626 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2594 } 2627 }
2595 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2628 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2596 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2629 new ServiceWorkerNetworkProvider(routing_id_, provider_type));
2597 ServiceWorkerNetworkProvider::AttachToDocumentState(
2598 DocumentState::FromDataSource(datasource),
2599 network_provider.Pass());
2600 } 2630 }
2631
2632 ServiceWorkerNetworkProvider::AttachToDocumentState(
2633 DocumentState::FromDataSource(datasource), network_provider.Pass());
2601 } 2634 }
2602 2635
2603 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2636 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2604 double triggering_event_time) { 2637 double triggering_event_time) {
2605 DCHECK(!frame_ || frame_ == frame); 2638 DCHECK(!frame_ || frame_ == frame);
2606 WebDataSource* ds = frame->provisionalDataSource(); 2639 WebDataSource* ds = frame->provisionalDataSource();
2607 2640
2608 // In fast/loader/stop-provisional-loads.html, we abort the load before this 2641 // In fast/loader/stop-provisional-loads.html, we abort the load before this
2609 // callback is invoked. 2642 // callback is invoked.
2610 if (!ds) 2643 if (!ds)
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
3338 3371
3339 int provider_id = kInvalidServiceWorkerProviderId; 3372 int provider_id = kInvalidServiceWorkerProviderId;
3340 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3373 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
3341 request.frameType() == blink::WebURLRequest::FrameTypeNested) { 3374 request.frameType() == blink::WebURLRequest::FrameTypeNested) {
3342 // |provisionalDataSource| may be null in some content::ResourceFetcher 3375 // |provisionalDataSource| may be null in some content::ResourceFetcher
3343 // use cases, we don't hook those requests. 3376 // use cases, we don't hook those requests.
3344 if (frame->provisionalDataSource()) { 3377 if (frame->provisionalDataSource()) {
3345 ServiceWorkerNetworkProvider* provider = 3378 ServiceWorkerNetworkProvider* provider =
3346 ServiceWorkerNetworkProvider::FromDocumentState( 3379 ServiceWorkerNetworkProvider::FromDocumentState(
3347 DocumentState::FromDataSource(frame->provisionalDataSource())); 3380 DocumentState::FromDataSource(frame->provisionalDataSource()));
3348 provider_id = provider->provider_id(); 3381 if (provider)
michaeln 2015/10/07 01:16:44 provided the existing invariant is maintained, thi
Fabrice (no longer in Chrome) 2015/10/07 12:59:43 I DCHECK'd it instead. SIGSEGV crashes tend to not
3382 provider_id = provider->provider_id();
3349 } 3383 }
3350 } else if (frame->dataSource()) { 3384 } else if (frame->dataSource()) {
3351 ServiceWorkerNetworkProvider* provider = 3385 ServiceWorkerNetworkProvider* provider =
3352 ServiceWorkerNetworkProvider::FromDocumentState( 3386 ServiceWorkerNetworkProvider::FromDocumentState(
3353 DocumentState::FromDataSource(frame->dataSource())); 3387 DocumentState::FromDataSource(frame->dataSource()));
3354 provider_id = provider->provider_id(); 3388 if (provider) {
michaeln 2015/10/07 01:16:44 ditto
Fabrice (no longer in Chrome) 2015/10/07 12:59:43 Done.
3355 // Explicitly set the SkipServiceWorker flag here if the renderer process 3389 provider_id = provider->provider_id();
3356 // hasn't received SetControllerServiceWorker message. 3390 // Explicitly set the SkipServiceWorker flag here if the renderer process
3357 if (!provider->IsControlledByServiceWorker()) 3391 // hasn't received SetControllerServiceWorker message.
3358 request.setSkipServiceWorker(true); 3392 if (!provider->IsControlledByServiceWorker())
3393 request.setSkipServiceWorker(true);
3394 }
3359 } 3395 }
3360 3396
3361 WebFrame* parent = frame->parent(); 3397 WebFrame* parent = frame->parent();
3362 int parent_routing_id = MSG_ROUTING_NONE; 3398 int parent_routing_id = MSG_ROUTING_NONE;
3363 if (!parent) { 3399 if (!parent) {
3364 parent_routing_id = -1; 3400 parent_routing_id = -1;
3365 } else if (parent->isWebLocalFrame()) { 3401 } else if (parent->isWebLocalFrame()) {
3366 parent_routing_id = FromWebFrame(parent)->GetRoutingID(); 3402 parent_routing_id = FromWebFrame(parent)->GetRoutingID();
3367 } else { 3403 } else {
3368 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id(); 3404 parent_routing_id = RenderFrameProxy::FromWebFrame(parent)->routing_id();
(...skipping 1845 matching lines...) Expand 10 before | Expand all | Expand 10 after
5214 mojo::ServiceProviderPtr service_provider(21); 5250 mojo::ServiceProviderPtr service_provider(21);
5215 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5251 mojo::URLRequestPtr request(mojo::URLRequest::New());
5216 request->url = mojo::String::From(url); 5252 request->url = mojo::String::From(url);
5217 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5253 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5218 nullptr, nullptr, 5254 nullptr, nullptr,
5219 base::Bind(&OnGotContentHandlerID)); 5255 base::Bind(&OnGotContentHandlerID));
5220 return service_provider.Pass(); 5256 return service_provider.Pass();
5221 } 5257 }
5222 5258
5223 } // namespace content 5259 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698