Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |