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

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

Issue 1399363004: PlzNavigate: Make ServiceWorker work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments 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 2528 matching lines...) Expand 10 before | Expand all | Expand 10 after
2583 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 2584 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY);
2584 break; 2585 break;
2585 default: 2586 default:
2586 NOTREACHED(); 2587 NOTREACHED();
2587 } 2588 }
2588 } 2589 }
2589 2590
2590 // Create the serviceworker's per-document network observing object if it 2591 // Create the serviceworker's per-document network observing object if it
2591 // does not exist (When navigation happens within a page, the provider already 2592 // does not exist (When navigation happens within a page, the provider already
2592 // exists). 2593 // exists).
2593 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2594 if (ServiceWorkerNetworkProvider::FromDocumentState(
2594 DocumentState::FromDataSource(datasource))) { 2595 DocumentState::FromDataSource(datasource)))
2595 ServiceWorkerProviderType provider_type = 2596 return;
2596 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2597
2597 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2598 bool browser_side_navigation =
2598 blink::WebSandboxFlags::Origin) { 2599 base::CommandLine::ForCurrentProcess()->HasSwitch(
2599 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2600 switches::kEnableBrowserSideNavigation);
2601 scoped_ptr<ServiceWorkerNetworkProvider> network_provider;
2602
2603 // Determine if a ServiceWorkerNetworkProvider should be created and properly
2604 // initialized for the navigation. A default ServiceWorkerNetworkProvider
2605 // will always be created since it is expected in a certain number of places,
2606 // however it will have an invalid id.
2607 // PlzNavigate: |service_worker_provider_id| can be sent by the browser, if
2608 // it already created the SeviceWorkerProviderHost.
2609 bool should_create_provider_for_window = false;
2610 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2611 if (browser_side_navigation && !content_initiated) {
2612 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2613 DocumentState::FromDataSource(datasource)->navigation_state());
2614 should_create_provider_for_window =
2615 navigation_state->request_params().should_create_service_worker;
2616 service_worker_provider_id =
2617 navigation_state->request_params().service_worker_provider_id;
2618 DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
2619 service_worker_provider_id) ||
2620 service_worker_provider_id == kInvalidServiceWorkerProviderId);
2621 } else {
2622 should_create_provider_for_window =
2623 (frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) !=
2624 blink::WebSandboxFlags::Origin;
2625 }
2626
2627 // Now create the ServiceWorkerNetworkProvider (with invalid id if needed).
2628 if (should_create_provider_for_window) {
2629 if (service_worker_provider_id == kInvalidServiceWorkerProviderId) {
2630 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2631 new ServiceWorkerNetworkProvider(routing_id_,
2632 SERVICE_WORKER_PROVIDER_FOR_WINDOW));
2633 } else {
2634 CHECK(browser_side_navigation);
2635 DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
2636 service_worker_provider_id));
2637 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2638 new ServiceWorkerNetworkProvider(routing_id_,
2639 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
2640 service_worker_provider_id));
2600 } 2641 }
2601 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2642 } else {
2602 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2643 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2603 ServiceWorkerNetworkProvider::AttachToDocumentState( 2644 new ServiceWorkerNetworkProvider());
2604 DocumentState::FromDataSource(datasource),
2605 network_provider.Pass());
2606 } 2645 }
kinuko 2015/10/23 02:37:45 Could this part be maybe factored out as a utility
clamy 2015/10/27 14:46:13 Done. This is now a static method in ServiceWorker
2646
2647 ServiceWorkerNetworkProvider::AttachToDocumentState(
2648 DocumentState::FromDataSource(datasource), network_provider.Pass());
2607 } 2649 }
2608 2650
2609 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2651 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2610 double triggering_event_time) { 2652 double triggering_event_time) {
2611 DCHECK(!frame_ || frame_ == frame); 2653 DCHECK(!frame_ || frame_ == frame);
2612 WebDataSource* ds = frame->provisionalDataSource(); 2654 WebDataSource* ds = frame->provisionalDataSource();
2613 2655
2614 // In fast/loader/stop-provisional-loads.html, we abort the load before this 2656 // In fast/loader/stop-provisional-loads.html, we abort the load before this
2615 // callback is invoked. 2657 // callback is invoked.
2616 if (!ds) 2658 if (!ds)
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
3345 3387
3346 int provider_id = kInvalidServiceWorkerProviderId; 3388 int provider_id = kInvalidServiceWorkerProviderId;
3347 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3389 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
3348 request.frameType() == blink::WebURLRequest::FrameTypeNested) { 3390 request.frameType() == blink::WebURLRequest::FrameTypeNested) {
3349 // |provisionalDataSource| may be null in some content::ResourceFetcher 3391 // |provisionalDataSource| may be null in some content::ResourceFetcher
3350 // use cases, we don't hook those requests. 3392 // use cases, we don't hook those requests.
3351 if (frame->provisionalDataSource()) { 3393 if (frame->provisionalDataSource()) {
3352 ServiceWorkerNetworkProvider* provider = 3394 ServiceWorkerNetworkProvider* provider =
3353 ServiceWorkerNetworkProvider::FromDocumentState( 3395 ServiceWorkerNetworkProvider::FromDocumentState(
3354 DocumentState::FromDataSource(frame->provisionalDataSource())); 3396 DocumentState::FromDataSource(frame->provisionalDataSource()));
3397 DCHECK(provider);
3355 provider_id = provider->provider_id(); 3398 provider_id = provider->provider_id();
3356 } 3399 }
3357 } else if (frame->dataSource()) { 3400 } else if (frame->dataSource()) {
3358 ServiceWorkerNetworkProvider* provider = 3401 ServiceWorkerNetworkProvider* provider =
3359 ServiceWorkerNetworkProvider::FromDocumentState( 3402 ServiceWorkerNetworkProvider::FromDocumentState(
3360 DocumentState::FromDataSource(frame->dataSource())); 3403 DocumentState::FromDataSource(frame->dataSource()));
3404 DCHECK(provider);
3361 provider_id = provider->provider_id(); 3405 provider_id = provider->provider_id();
3362 // Explicitly set the SkipServiceWorker flag here if the renderer process 3406 // Explicitly set the SkipServiceWorker flag here if the renderer process
3363 // hasn't received SetControllerServiceWorker message. 3407 // hasn't received SetControllerServiceWorker message.
3364 if (!provider->IsControlledByServiceWorker()) 3408 if (!provider->IsControlledByServiceWorker())
3365 request.setSkipServiceWorker(true); 3409 request.setSkipServiceWorker(true);
3366 } 3410 }
3367 3411
3368 WebFrame* parent = frame->parent(); 3412 WebFrame* parent = frame->parent();
3369 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1; 3413 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1;
3370 3414
(...skipping 1837 matching lines...) Expand 10 before | Expand all | Expand 10 after
5208 mojo::ServiceProviderPtr service_provider; 5252 mojo::ServiceProviderPtr service_provider;
5209 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5253 mojo::URLRequestPtr request(mojo::URLRequest::New());
5210 request->url = mojo::String::From(url); 5254 request->url = mojo::String::From(url);
5211 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5255 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5212 nullptr, nullptr, 5256 nullptr, nullptr,
5213 base::Bind(&OnGotContentHandlerID)); 5257 base::Bind(&OnGotContentHandlerID));
5214 return service_provider.Pass(); 5258 return service_provider.Pass();
5215 } 5259 }
5216 5260
5217 } // namespace content 5261 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698