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

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: 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 2516 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 2572 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY);
2572 break; 2573 break;
2573 default: 2574 default:
2574 NOTREACHED(); 2575 NOTREACHED();
2575 } 2576 }
2576 } 2577 }
2577 2578
2578 // Create the serviceworker's per-document network observing object if it 2579 // Create the serviceworker's per-document network observing object if it
2579 // does not exist (When navigation happens within a page, the provider already 2580 // does not exist (When navigation happens within a page, the provider already
2580 // exists). 2581 // exists).
2581 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2582 if (ServiceWorkerNetworkProvider::FromDocumentState(
2582 DocumentState::FromDataSource(datasource))) { 2583 DocumentState::FromDataSource(datasource)))
2583 ServiceWorkerProviderType provider_type = 2584 return;
2584 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2585
2585 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2586 bool browser_side_navigation =
2586 blink::WebSandboxFlags::Origin) { 2587 base::CommandLine::ForCurrentProcess()->HasSwitch(
2587 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2588 switches::kEnableBrowserSideNavigation);
2589 scoped_ptr<ServiceWorkerNetworkProvider> network_provider;
2590
2591 // Determine if a ServiceWorkerNetworkProvider should be created and properly
2592 // initialized for the navigation. A default ServiceWorkerNetworkProvider
2593 // will always be created since it is expected in a certain number of places,
2594 // however it will have an invalid id.
2595 // PlzNavigate: |service_worker_provider_id| can be sent by the browser, if
2596 // it already created the SeviceWorkerProviderHost.
2597 bool should_create_provider_for_window = false;
2598 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2599 if (browser_side_navigation && !content_initiated) {
2600 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2601 DocumentState::FromDataSource(datasource)->navigation_state());
2602 should_create_provider_for_window =
2603 navigation_state->request_params().should_create_service_worker;
2604 service_worker_provider_id =
2605 navigation_state->request_params().service_worker_provider_id;
2606 DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
2607 service_worker_provider_id) ||
2608 service_worker_provider_id == kInvalidServiceWorkerProviderId);
2609 } else {
2610 should_create_provider_for_window =
2611 (frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) !=
2612 blink::WebSandboxFlags::Origin;
2613 }
2614
2615 // Now create the ServiceWorkerNetworkProvider (with invalid id if needed).
2616 if (should_create_provider_for_window) {
2617 if (service_worker_provider_id == kInvalidServiceWorkerProviderId) {
2618 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2619 new ServiceWorkerNetworkProvider(routing_id_,
2620 SERVICE_WORKER_PROVIDER_FOR_WINDOW));
2621 } else {
2622 CHECK(browser_side_navigation);
2623 DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
2624 service_worker_provider_id));
2625 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2626 new ServiceWorkerNetworkProvider(routing_id_,
2627 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
2628 service_worker_provider_id));
2588 } 2629 }
2589 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2630 } else {
2590 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2631 network_provider = scoped_ptr<ServiceWorkerNetworkProvider>(
2591 ServiceWorkerNetworkProvider::AttachToDocumentState( 2632 new ServiceWorkerNetworkProvider());
2592 DocumentState::FromDataSource(datasource),
2593 network_provider.Pass());
2594 } 2633 }
2634
2635 ServiceWorkerNetworkProvider::AttachToDocumentState(
2636 DocumentState::FromDataSource(datasource), network_provider.Pass());
2595 } 2637 }
2596 2638
2597 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2639 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2598 double triggering_event_time) { 2640 double triggering_event_time) {
2599 DCHECK(!frame_ || frame_ == frame); 2641 DCHECK(!frame_ || frame_ == frame);
2600 WebDataSource* ds = frame->provisionalDataSource(); 2642 WebDataSource* ds = frame->provisionalDataSource();
2601 2643
2602 // In fast/loader/stop-provisional-loads.html, we abort the load before this 2644 // In fast/loader/stop-provisional-loads.html, we abort the load before this
2603 // callback is invoked. 2645 // callback is invoked.
2604 if (!ds) 2646 if (!ds)
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
3333 3375
3334 int provider_id = kInvalidServiceWorkerProviderId; 3376 int provider_id = kInvalidServiceWorkerProviderId;
3335 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || 3377 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel ||
3336 request.frameType() == blink::WebURLRequest::FrameTypeNested) { 3378 request.frameType() == blink::WebURLRequest::FrameTypeNested) {
3337 // |provisionalDataSource| may be null in some content::ResourceFetcher 3379 // |provisionalDataSource| may be null in some content::ResourceFetcher
3338 // use cases, we don't hook those requests. 3380 // use cases, we don't hook those requests.
3339 if (frame->provisionalDataSource()) { 3381 if (frame->provisionalDataSource()) {
3340 ServiceWorkerNetworkProvider* provider = 3382 ServiceWorkerNetworkProvider* provider =
3341 ServiceWorkerNetworkProvider::FromDocumentState( 3383 ServiceWorkerNetworkProvider::FromDocumentState(
3342 DocumentState::FromDataSource(frame->provisionalDataSource())); 3384 DocumentState::FromDataSource(frame->provisionalDataSource()));
3385 DCHECK(provider);
3343 provider_id = provider->provider_id(); 3386 provider_id = provider->provider_id();
3344 } 3387 }
3345 } else if (frame->dataSource()) { 3388 } else if (frame->dataSource()) {
3346 ServiceWorkerNetworkProvider* provider = 3389 ServiceWorkerNetworkProvider* provider =
3347 ServiceWorkerNetworkProvider::FromDocumentState( 3390 ServiceWorkerNetworkProvider::FromDocumentState(
3348 DocumentState::FromDataSource(frame->dataSource())); 3391 DocumentState::FromDataSource(frame->dataSource()));
3392 DCHECK(provider);
3349 provider_id = provider->provider_id(); 3393 provider_id = provider->provider_id();
3350 // Explicitly set the SkipServiceWorker flag here if the renderer process 3394 // Explicitly set the SkipServiceWorker flag here if the renderer process
3351 // hasn't received SetControllerServiceWorker message. 3395 // hasn't received SetControllerServiceWorker message.
3352 if (!provider->IsControlledByServiceWorker()) 3396 if (!provider->IsControlledByServiceWorker())
3353 request.setSkipServiceWorker(true); 3397 request.setSkipServiceWorker(true);
3354 } 3398 }
3355 3399
3356 WebFrame* parent = frame->parent(); 3400 WebFrame* parent = frame->parent();
3357 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1; 3401 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1;
3358 3402
(...skipping 1838 matching lines...) Expand 10 before | Expand all | Expand 10 after
5197 mojo::ServiceProviderPtr service_provider; 5241 mojo::ServiceProviderPtr service_provider;
5198 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5242 mojo::URLRequestPtr request(mojo::URLRequest::New());
5199 request->url = mojo::String::From(url); 5243 request->url = mojo::String::From(url);
5200 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5244 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5201 nullptr, nullptr, 5245 nullptr, nullptr,
5202 base::Bind(&OnGotContentHandlerID)); 5246 base::Bind(&OnGotContentHandlerID));
5203 return service_provider.Pass(); 5247 return service_provider.Pass();
5204 } 5248 }
5205 5249
5206 } // namespace content 5250 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698