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

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: Rebase Created 5 years, 3 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 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( 443 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
444 common_params.referrer.policy, 444 common_params.referrer.policy,
445 common_params.url, 445 common_params.url,
446 WebString::fromUTF8(common_params.referrer.url.spec())); 446 WebString::fromUTF8(common_params.referrer.url.spec()));
447 if (!web_referrer.isEmpty()) 447 if (!web_referrer.isEmpty())
448 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); 448 request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
449 } 449 }
450 450
451 RequestExtraData* extra_data = new RequestExtraData(); 451 RequestExtraData* extra_data = new RequestExtraData();
452 extra_data->set_stream_override(stream_override.Pass()); 452 extra_data->set_stream_override(stream_override.Pass());
453 extra_data->set_service_worker_provider_id(
454 common_params.service_worker_provider_id);
453 request.setExtraData(extra_data); 455 request.setExtraData(extra_data);
454 456
455 // Set the ui timestamp for this navigation. Currently the timestamp here is 457 // Set the ui timestamp for this navigation. Currently the timestamp here is
456 // only non empty when the navigation was triggered by an Android intent. The 458 // only non empty when the navigation was triggered by an Android intent. The
457 // timestamp is converted to a double version supported by blink. It will be 459 // timestamp is converted to a double version supported by blink. It will be
458 // passed back to the browser in the DidCommitProvisionalLoad and the 460 // passed back to the browser in the DidCommitProvisionalLoad and the
459 // DocumentLoadComplete IPCs. 461 // DocumentLoadComplete IPCs.
460 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); 462 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks();
461 request.setUiStartTime(ui_timestamp.InSecondsF()); 463 request.setUiStartTime(ui_timestamp.InSecondsF());
462 request.setInputPerfMetricReportPolicy( 464 request.setInputPerfMetricReportPolicy(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 // CommitNavigation IPC, and then back to the browser again in the 511 // CommitNavigation IPC, and then back to the browser again in the
510 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. 512 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs.
511 base::TimeTicks ui_timestamp = 513 base::TimeTicks ui_timestamp =
512 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); 514 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime());
513 FrameMsg_UILoadMetricsReportType::Value report_type = 515 FrameMsg_UILoadMetricsReportType::Value report_type =
514 static_cast<FrameMsg_UILoadMetricsReportType::Value>( 516 static_cast<FrameMsg_UILoadMetricsReportType::Value>(
515 request->inputPerfMetricReportPolicy()); 517 request->inputPerfMetricReportPolicy());
516 return CommonNavigationParams( 518 return CommonNavigationParams(
517 request->url(), referrer, extra_data->transition_type(), 519 request->url(), referrer, extra_data->transition_type(),
518 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, 520 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry,
519 ui_timestamp, report_type, GURL(), GURL()); 521 ui_timestamp, report_type, GURL(), GURL(),
522 extra_data->service_worker_provider_id());
520 } 523 }
521 524
522 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 525 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
523 media::Context3D GetSharedMainThreadContext3D() { 526 media::Context3D GetSharedMainThreadContext3D() {
524 cc::ContextProvider* provider = 527 cc::ContextProvider* provider =
525 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 528 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
526 if (!provider) 529 if (!provider)
527 return media::Context3D(); 530 return media::Context3D();
528 return media::Context3D(provider->ContextGL(), provider->GrContext()); 531 return media::Context3D(provider->ContextGL(), provider->GrContext());
529 } 532 }
(...skipping 2027 matching lines...) Expand 10 before | Expand all | Expand 10 after
2557 // Create the serviceworker's per-document network observing object if it 2560 // Create the serviceworker's per-document network observing object if it
2558 // does not exist (When navigation happens within a page, the provider already 2561 // does not exist (When navigation happens within a page, the provider already
2559 // exists). 2562 // exists).
2560 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2563 if (!ServiceWorkerNetworkProvider::FromDocumentState(
2561 DocumentState::FromDataSource(datasource))) { 2564 DocumentState::FromDataSource(datasource))) {
2562 ServiceWorkerProviderType provider_type = 2565 ServiceWorkerProviderType provider_type =
2563 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2566 SERVICE_WORKER_PROVIDER_FOR_WINDOW;
2564 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2567 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) ==
2565 blink::WebSandboxFlags::Origin) { 2568 blink::WebSandboxFlags::Origin) {
2566 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2569 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2570 DCHECK(is_subframe_);
2567 } 2571 }
2572 const WebURLRequest& original_request = datasource->originalRequest();
2573
2574 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2575 if (original_request.extraData()) {
2576 RequestExtraData* extra_data =
2577 static_cast<RequestExtraData*>(original_request.extraData());
2578 service_worker_provider_id = extra_data->service_worker_provider_id();
2579 }
2580
2568 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2581 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2569 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2582 new ServiceWorkerNetworkProvider(routing_id_, provider_type,
2583 service_worker_provider_id));
2584
2570 ServiceWorkerNetworkProvider::AttachToDocumentState( 2585 ServiceWorkerNetworkProvider::AttachToDocumentState(
2571 DocumentState::FromDataSource(datasource), 2586 DocumentState::FromDataSource(datasource),
2572 network_provider.Pass()); 2587 network_provider.Pass());
2573 } 2588 }
2574 } 2589 }
2575 2590
2576 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2591 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2577 double triggering_event_time) { 2592 double triggering_event_time) {
2578 DCHECK(!frame_ || frame_ == frame); 2593 DCHECK(!frame_ || frame_ == frame);
2579 WebDataSource* ds = frame->provisionalDataSource(); 2594 WebDataSource* ds = frame->provisionalDataSource();
(...skipping 2262 matching lines...) Expand 10 before | Expand all | Expand 10 after
4842 WebDataSource* provisional_data_source = frame_->provisionalDataSource(); 4857 WebDataSource* provisional_data_source = frame_->provisionalDataSource();
4843 WebDataSource* current_data_source = frame_->dataSource(); 4858 WebDataSource* current_data_source = frame_->dataSource();
4844 WebDataSource* data_source = 4859 WebDataSource* data_source =
4845 provisional_data_source ? provisional_data_source : current_data_source; 4860 provisional_data_source ? provisional_data_source : current_data_source;
4846 4861
4847 // The current entry can only be replaced if there already is an entry in the 4862 // The current entry can only be replaced if there already is an entry in the
4848 // history list. 4863 // history list.
4849 if (data_source && render_view_->history_list_length_ > 0) { 4864 if (data_source && render_view_->history_list_length_ > 0) {
4850 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 4865 should_replace_current_entry = data_source->replacesCurrentHistoryItem();
4851 } 4866 }
4867
4868 DCHECK_EQ(FETCH_REQUEST_MODE_NO_CORS,
4869 GetFetchRequestModeForWebURLRequest(*request));
4870 DCHECK_EQ(FETCH_CREDENTIALS_MODE_SAME_ORIGIN,
4871 GetFetchCredentialsModeForWebURLRequest(*request));
4872 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) ==
4873 FetchRedirectMode::FOLLOW_MODE);
clamy 2015/08/27 11:53:45 Can we also precise the different possibilities fo
Fabrice (no longer in Chrome) 2015/08/28 15:40:16 As we discussed offline, I don't think we can DCHE
4874
4852 Send(new FrameHostMsg_BeginNavigation( 4875 Send(new FrameHostMsg_BeginNavigation(
4853 routing_id_, 4876 routing_id_,
4854 MakeCommonNavigationParams(request, should_replace_current_entry), 4877 MakeCommonNavigationParams(request, should_replace_current_entry),
4855 BeginNavigationParams( 4878 BeginNavigationParams(
4856 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), 4879 request->httpMethod().latin1(),
4857 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture()), 4880 GetWebURLRequestHeaders(*request),
4881 GetLoadFlagsForWebURLRequest(*request),
4882 request->hasUserGesture(),
4883 request->skipServiceWorker(),
4884 GetRequestContextTypeForWebURLRequest(*request),
4885 GetRequestContextFrameTypeForWebURLRequest(*request)),
4858 GetRequestBodyForWebURLRequest(*request))); 4886 GetRequestBodyForWebURLRequest(*request)));
4859 } 4887 }
4860 4888
4861 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, 4889 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params,
4862 WebFrame* frame) { 4890 WebFrame* frame) {
4863 // A loadData request with a specified base URL. 4891 // A loadData request with a specified base URL.
4864 std::string mime_type, charset, data; 4892 std::string mime_type, charset, data;
4865 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) { 4893 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) {
4866 const GURL base_url = params.base_url_for_data_url.is_empty() ? 4894 const GURL base_url = params.base_url_for_data_url.is_empty() ?
4867 params.url : params.base_url_for_data_url; 4895 params.url : params.base_url_for_data_url;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
5112 GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&mojo_shell_)); 5140 GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&mojo_shell_));
5113 mojo::ServiceProviderPtr service_provider; 5141 mojo::ServiceProviderPtr service_provider;
5114 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5142 mojo::URLRequestPtr request(mojo::URLRequest::New());
5115 request->url = mojo::String::From(url); 5143 request->url = mojo::String::From(url);
5116 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5144 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5117 nullptr, nullptr); 5145 nullptr, nullptr);
5118 return service_provider.Pass(); 5146 return service_provider.Pass();
5119 } 5147 }
5120 5148
5121 } // namespace content 5149 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698