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

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: Glorious Post-Blink Merge Rebase 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 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( 417 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
418 common_params.referrer.policy, 418 common_params.referrer.policy,
419 common_params.url, 419 common_params.url,
420 WebString::fromUTF8(common_params.referrer.url.spec())); 420 WebString::fromUTF8(common_params.referrer.url.spec()));
421 if (!web_referrer.isEmpty()) 421 if (!web_referrer.isEmpty())
422 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); 422 request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
423 } 423 }
424 424
425 RequestExtraData* extra_data = new RequestExtraData(); 425 RequestExtraData* extra_data = new RequestExtraData();
426 extra_data->set_stream_override(stream_override.Pass()); 426 extra_data->set_stream_override(stream_override.Pass());
427 extra_data->set_service_worker_provider_id(
428 common_params.service_worker_provider_id);
427 request.setExtraData(extra_data); 429 request.setExtraData(extra_data);
428 430
429 // Set the ui timestamp for this navigation. Currently the timestamp here is 431 // Set the ui timestamp for this navigation. Currently the timestamp here is
430 // only non empty when the navigation was triggered by an Android intent. The 432 // only non empty when the navigation was triggered by an Android intent. The
431 // timestamp is converted to a double version supported by blink. It will be 433 // timestamp is converted to a double version supported by blink. It will be
432 // passed back to the browser in the DidCommitProvisionalLoad and the 434 // passed back to the browser in the DidCommitProvisionalLoad and the
433 // DocumentLoadComplete IPCs. 435 // DocumentLoadComplete IPCs.
434 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); 436 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks();
435 request.setUiStartTime(ui_timestamp.InSecondsF()); 437 request.setUiStartTime(ui_timestamp.InSecondsF());
436 request.setInputPerfMetricReportPolicy( 438 request.setInputPerfMetricReportPolicy(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 // CommitNavigation IPC, and then back to the browser again in the 485 // CommitNavigation IPC, and then back to the browser again in the
484 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. 486 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs.
485 base::TimeTicks ui_timestamp = 487 base::TimeTicks ui_timestamp =
486 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); 488 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime());
487 FrameMsg_UILoadMetricsReportType::Value report_type = 489 FrameMsg_UILoadMetricsReportType::Value report_type =
488 static_cast<FrameMsg_UILoadMetricsReportType::Value>( 490 static_cast<FrameMsg_UILoadMetricsReportType::Value>(
489 request->inputPerfMetricReportPolicy()); 491 request->inputPerfMetricReportPolicy());
490 return CommonNavigationParams( 492 return CommonNavigationParams(
491 request->url(), referrer, extra_data->transition_type(), 493 request->url(), referrer, extra_data->transition_type(),
492 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, 494 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry,
493 ui_timestamp, report_type, GURL(), GURL()); 495 ui_timestamp, report_type, GURL(), GURL(),
496 extra_data->service_worker_provider_id());
494 } 497 }
495 498
496 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 499 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
497 media::Context3D GetSharedMainThreadContext3D() { 500 media::Context3D GetSharedMainThreadContext3D() {
498 cc::ContextProvider* provider = 501 cc::ContextProvider* provider =
499 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 502 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
500 if (!provider) 503 if (!provider)
501 return media::Context3D(); 504 return media::Context3D();
502 return media::Context3D(provider->ContextGL(), provider->GrContext()); 505 return media::Context3D(provider->ContextGL(), provider->GrContext());
503 } 506 }
(...skipping 2046 matching lines...) Expand 10 before | Expand all | Expand 10 after
2550 // does not exist (When navigation happens within a page, the provider already 2553 // does not exist (When navigation happens within a page, the provider already
2551 // exists). 2554 // exists).
2552 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2555 if (!ServiceWorkerNetworkProvider::FromDocumentState(
2553 DocumentState::FromDataSource(datasource))) { 2556 DocumentState::FromDataSource(datasource))) {
2554 ServiceWorkerProviderType provider_type = 2557 ServiceWorkerProviderType provider_type =
2555 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2558 SERVICE_WORKER_PROVIDER_FOR_WINDOW;
2556 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2559 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) ==
2557 blink::WebSandboxFlags::Origin) { 2560 blink::WebSandboxFlags::Origin) {
2558 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2561 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2559 } 2562 }
2563 const WebURLRequest& original_request = datasource->originalRequest();
2564
2565 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2566 if (original_request.extraData()) {
2567 RequestExtraData* extra_data =
2568 static_cast<RequestExtraData*>(original_request.extraData());
2569 service_worker_provider_id = extra_data->service_worker_provider_id();
2570 }
2571
2560 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2572 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2561 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2573 new ServiceWorkerNetworkProvider(routing_id_, provider_type,
2574 service_worker_provider_id));
2575
2562 ServiceWorkerNetworkProvider::AttachToDocumentState( 2576 ServiceWorkerNetworkProvider::AttachToDocumentState(
2563 DocumentState::FromDataSource(datasource), 2577 DocumentState::FromDataSource(datasource),
2564 network_provider.Pass()); 2578 network_provider.Pass());
2565 } 2579 }
2566 } 2580 }
2567 2581
2568 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2582 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2569 double triggering_event_time) { 2583 double triggering_event_time) {
2570 DCHECK(!frame_ || frame_ == frame); 2584 DCHECK(!frame_ || frame_ == frame);
2571 WebDataSource* ds = frame->provisionalDataSource(); 2585 WebDataSource* ds = frame->provisionalDataSource();
(...skipping 2263 matching lines...) Expand 10 before | Expand all | Expand 10 after
4835 WebDataSource* provisional_data_source = frame_->provisionalDataSource(); 4849 WebDataSource* provisional_data_source = frame_->provisionalDataSource();
4836 WebDataSource* current_data_source = frame_->dataSource(); 4850 WebDataSource* current_data_source = frame_->dataSource();
4837 WebDataSource* data_source = 4851 WebDataSource* data_source =
4838 provisional_data_source ? provisional_data_source : current_data_source; 4852 provisional_data_source ? provisional_data_source : current_data_source;
4839 4853
4840 // The current entry can only be replaced if there already is an entry in the 4854 // The current entry can only be replaced if there already is an entry in the
4841 // history list. 4855 // history list.
4842 if (data_source && render_view_->history_list_length_ > 0) { 4856 if (data_source && render_view_->history_list_length_ > 0) {
4843 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 4857 should_replace_current_entry = data_source->replacesCurrentHistoryItem();
4844 } 4858 }
4859
4860 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN,
4861 GetFetchRequestModeForWebURLRequest(*request));
4862 DCHECK_EQ(FETCH_CREDENTIALS_MODE_INCLUDE,
4863 GetFetchCredentialsModeForWebURLRequest(*request));
4864 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) ==
4865 FetchRedirectMode::MANUAL_MODE);
4866 DCHECK_IMPLIES(!frame_->parent(),
4867 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4868 REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL);
4869 DCHECK_IMPLIES(frame_->parent(),
4870 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4871 REQUEST_CONTEXT_FRAME_TYPE_NESTED);
4872
4845 Send(new FrameHostMsg_BeginNavigation( 4873 Send(new FrameHostMsg_BeginNavigation(
4846 routing_id_, 4874 routing_id_,
4847 MakeCommonNavigationParams(request, should_replace_current_entry), 4875 MakeCommonNavigationParams(request, should_replace_current_entry),
4848 BeginNavigationParams( 4876 BeginNavigationParams(
4849 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), 4877 request->httpMethod().latin1(),
4850 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture()), 4878 GetWebURLRequestHeaders(*request),
4879 GetLoadFlagsForWebURLRequest(*request),
4880 request->hasUserGesture(),
4881 request->skipServiceWorker(),
4882 GetRequestContextTypeForWebURLRequest(*request)),
4851 GetRequestBodyForWebURLRequest(*request))); 4883 GetRequestBodyForWebURLRequest(*request)));
4852 } 4884 }
4853 4885
4854 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, 4886 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params,
4855 WebFrame* frame) { 4887 WebFrame* frame) {
4856 // A loadData request with a specified base URL. 4888 // A loadData request with a specified base URL.
4857 std::string mime_type, charset, data; 4889 std::string mime_type, charset, data;
4858 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) { 4890 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) {
4859 const GURL base_url = params.base_url_for_data_url.is_empty() ? 4891 const GURL base_url = params.base_url_for_data_url.is_empty() ?
4860 params.url : params.base_url_for_data_url; 4892 params.url : params.base_url_for_data_url;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
5105 mojo::ServiceProviderPtr service_provider; 5137 mojo::ServiceProviderPtr service_provider;
5106 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5138 mojo::URLRequestPtr request(mojo::URLRequest::New());
5107 request->url = mojo::String::From(url); 5139 request->url = mojo::String::From(url);
5108 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5140 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5109 nullptr, nullptr, 5141 nullptr, nullptr,
5110 base::Bind(&OnGotContentHandlerID)); 5142 base::Bind(&OnGotContentHandlerID));
5111 return service_provider.Pass(); 5143 return service_provider.Pass();
5112 } 5144 }
5113 5145
5114 } // namespace content 5146 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698