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

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 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( 442 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
443 common_params.referrer.policy, 443 common_params.referrer.policy,
444 common_params.url, 444 common_params.url,
445 WebString::fromUTF8(common_params.referrer.url.spec())); 445 WebString::fromUTF8(common_params.referrer.url.spec()));
446 if (!web_referrer.isEmpty()) 446 if (!web_referrer.isEmpty())
447 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); 447 request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
448 } 448 }
449 449
450 RequestExtraData* extra_data = new RequestExtraData(); 450 RequestExtraData* extra_data = new RequestExtraData();
451 extra_data->set_stream_override(stream_override.Pass()); 451 extra_data->set_stream_override(stream_override.Pass());
452 extra_data->set_service_worker_provider_id(
453 common_params.service_worker_provider_id);
452 request.setExtraData(extra_data); 454 request.setExtraData(extra_data);
453 455
454 // Set the ui timestamp for this navigation. Currently the timestamp here is 456 // Set the ui timestamp for this navigation. Currently the timestamp here is
455 // only non empty when the navigation was triggered by an Android intent. The 457 // only non empty when the navigation was triggered by an Android intent. The
456 // timestamp is converted to a double version supported by blink. It will be 458 // timestamp is converted to a double version supported by blink. It will be
457 // passed back to the browser in the DidCommitProvisionalLoad and the 459 // passed back to the browser in the DidCommitProvisionalLoad and the
458 // DocumentLoadComplete IPCs. 460 // DocumentLoadComplete IPCs.
459 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); 461 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks();
460 request.setUiStartTime(ui_timestamp.InSecondsF()); 462 request.setUiStartTime(ui_timestamp.InSecondsF());
461 request.setInputPerfMetricReportPolicy( 463 request.setInputPerfMetricReportPolicy(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 // CommitNavigation IPC, and then back to the browser again in the 510 // CommitNavigation IPC, and then back to the browser again in the
509 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. 511 // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs.
510 base::TimeTicks ui_timestamp = 512 base::TimeTicks ui_timestamp =
511 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); 513 base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime());
512 FrameMsg_UILoadMetricsReportType::Value report_type = 514 FrameMsg_UILoadMetricsReportType::Value report_type =
513 static_cast<FrameMsg_UILoadMetricsReportType::Value>( 515 static_cast<FrameMsg_UILoadMetricsReportType::Value>(
514 request->inputPerfMetricReportPolicy()); 516 request->inputPerfMetricReportPolicy());
515 return CommonNavigationParams( 517 return CommonNavigationParams(
516 request->url(), referrer, extra_data->transition_type(), 518 request->url(), referrer, extra_data->transition_type(),
517 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry, 519 FrameMsg_Navigate_Type::NORMAL, true, should_replace_current_entry,
518 ui_timestamp, report_type, GURL(), GURL()); 520 ui_timestamp, report_type, GURL(), GURL(),
521 extra_data->service_worker_provider_id());
michaeln 2015/09/16 00:56:42 If i understand correctly, i think this is called
michaeln 2015/09/18 23:03:56 Ok, this id is definitely not useful. The object
Fabrice (no longer in Chrome) 2015/09/30 17:32:08 This has been removed.
519 } 522 }
520 523
521 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 524 #if !defined(OS_ANDROID) || defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
522 media::Context3D GetSharedMainThreadContext3D() { 525 media::Context3D GetSharedMainThreadContext3D() {
523 cc::ContextProvider* provider = 526 cc::ContextProvider* provider =
524 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 527 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
525 if (!provider) 528 if (!provider)
526 return media::Context3D(); 529 return media::Context3D();
527 return media::Context3D(provider->ContextGL(), provider->GrContext()); 530 return media::Context3D(provider->ContextGL(), provider->GrContext());
528 } 531 }
(...skipping 2038 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 // does not exist (When navigation happens within a page, the provider already 2570 // does not exist (When navigation happens within a page, the provider already
2568 // exists). 2571 // exists).
2569 if (!ServiceWorkerNetworkProvider::FromDocumentState( 2572 if (!ServiceWorkerNetworkProvider::FromDocumentState(
2570 DocumentState::FromDataSource(datasource))) { 2573 DocumentState::FromDataSource(datasource))) {
2571 ServiceWorkerProviderType provider_type = 2574 ServiceWorkerProviderType provider_type =
2572 SERVICE_WORKER_PROVIDER_FOR_WINDOW; 2575 SERVICE_WORKER_PROVIDER_FOR_WINDOW;
2573 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) == 2576 if ((frame->effectiveSandboxFlags() & blink::WebSandboxFlags::Origin) ==
2574 blink::WebSandboxFlags::Origin) { 2577 blink::WebSandboxFlags::Origin) {
2575 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME; 2578 provider_type = SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME;
2576 } 2579 }
2580 const WebURLRequest& original_request = datasource->originalRequest();
2581
2582 int service_worker_provider_id = kInvalidServiceWorkerProviderId;
2583 if (original_request.extraData()) {
michaeln 2015/09/16 00:56:42 I think this new bit of code is specific to PlzNav
Fabrice (no longer in Chrome) 2015/09/30 17:32:07 Done. There's a bit of duplication here now but I
2584 RequestExtraData* extra_data =
2585 static_cast<RequestExtraData*>(original_request.extraData());
2586 service_worker_provider_id = extra_data->service_worker_provider_id();
2587 }
2588
2577 scoped_ptr<ServiceWorkerNetworkProvider> network_provider( 2589 scoped_ptr<ServiceWorkerNetworkProvider> network_provider(
2578 new ServiceWorkerNetworkProvider(routing_id_, provider_type)); 2590 new ServiceWorkerNetworkProvider(routing_id_, provider_type,
2591 service_worker_provider_id));
2592
2579 ServiceWorkerNetworkProvider::AttachToDocumentState( 2593 ServiceWorkerNetworkProvider::AttachToDocumentState(
2580 DocumentState::FromDataSource(datasource), 2594 DocumentState::FromDataSource(datasource),
2581 network_provider.Pass()); 2595 network_provider.Pass());
2582 } 2596 }
2583 } 2597 }
2584 2598
2585 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2599 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2586 double triggering_event_time) { 2600 double triggering_event_time) {
2587 DCHECK(!frame_ || frame_ == frame); 2601 DCHECK(!frame_ || frame_ == frame);
2588 WebDataSource* ds = frame->provisionalDataSource(); 2602 WebDataSource* ds = frame->provisionalDataSource();
(...skipping 2241 matching lines...) Expand 10 before | Expand all | Expand 10 after
4830 WebDataSource* provisional_data_source = frame_->provisionalDataSource(); 4844 WebDataSource* provisional_data_source = frame_->provisionalDataSource();
4831 WebDataSource* current_data_source = frame_->dataSource(); 4845 WebDataSource* current_data_source = frame_->dataSource();
4832 WebDataSource* data_source = 4846 WebDataSource* data_source =
4833 provisional_data_source ? provisional_data_source : current_data_source; 4847 provisional_data_source ? provisional_data_source : current_data_source;
4834 4848
4835 // The current entry can only be replaced if there already is an entry in the 4849 // The current entry can only be replaced if there already is an entry in the
4836 // history list. 4850 // history list.
4837 if (data_source && render_view_->history_list_length_ > 0) { 4851 if (data_source && render_view_->history_list_length_ > 0) {
4838 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); 4852 should_replace_current_entry = data_source->replacesCurrentHistoryItem();
4839 } 4853 }
4854
4855 DCHECK_EQ(FETCH_REQUEST_MODE_NO_CORS,
4856 GetFetchRequestModeForWebURLRequest(*request));
4857 DCHECK_EQ(FETCH_CREDENTIALS_MODE_SAME_ORIGIN,
4858 GetFetchCredentialsModeForWebURLRequest(*request));
4859 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) ==
4860 FetchRedirectMode::FOLLOW_MODE);
michaeln 2015/09/18 23:03:56 I've patched it in and am seeing these DCHECKs get
Fabrice (no longer in Chrome) 2015/09/30 17:32:08 That's because the values for navigation requests
4861 DCHECK_IMPLIES(!frame_->parent(),
4862 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4863 REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL);
4864 DCHECK_IMPLIES(frame_->parent(),
4865 GetRequestContextFrameTypeForWebURLRequest(*request) ==
4866 REQUEST_CONTEXT_FRAME_TYPE_NESTED);
4867
4840 Send(new FrameHostMsg_BeginNavigation( 4868 Send(new FrameHostMsg_BeginNavigation(
4841 routing_id_, 4869 routing_id_,
4842 MakeCommonNavigationParams(request, should_replace_current_entry), 4870 MakeCommonNavigationParams(request, should_replace_current_entry),
4843 BeginNavigationParams( 4871 BeginNavigationParams(
4844 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), 4872 request->httpMethod().latin1(),
4845 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture()), 4873 GetWebURLRequestHeaders(*request),
4874 GetLoadFlagsForWebURLRequest(*request),
4875 request->hasUserGesture(),
4876 request->skipServiceWorker(),
4877 GetRequestContextTypeForWebURLRequest(*request)),
4846 GetRequestBodyForWebURLRequest(*request))); 4878 GetRequestBodyForWebURLRequest(*request)));
4847 } 4879 }
4848 4880
4849 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params, 4881 void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params,
4850 WebFrame* frame) { 4882 WebFrame* frame) {
4851 // A loadData request with a specified base URL. 4883 // A loadData request with a specified base URL.
4852 std::string mime_type, charset, data; 4884 std::string mime_type, charset, data;
4853 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) { 4885 if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) {
4854 const GURL base_url = params.base_url_for_data_url.is_empty() ? 4886 const GURL base_url = params.base_url_for_data_url.is_empty() ?
4855 params.url : params.base_url_for_data_url; 4887 params.url : params.base_url_for_data_url;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
5100 mojo::ServiceProviderPtr service_provider; 5132 mojo::ServiceProviderPtr service_provider;
5101 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5133 mojo::URLRequestPtr request(mojo::URLRequest::New());
5102 request->url = mojo::String::From(url); 5134 request->url = mojo::String::From(url);
5103 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5135 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5104 nullptr, nullptr, 5136 nullptr, nullptr,
5105 base::Bind(&OnGotContentHandlerID)); 5137 base::Bind(&OnGotContentHandlerID));
5106 return service_provider.Pass(); 5138 return service_provider.Pass();
5107 } 5139 }
5108 5140
5109 } // namespace content 5141 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698