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

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 1423453007: Let RenderFrameImpl set navigationStart based on CommonNavigationParams (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@navigation_start_common_params
Patch Set: Created 5 years, 1 month 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 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 // passed back to the browser in the DidCommitProvisionalLoad and the 450 // passed back to the browser in the DidCommitProvisionalLoad and the
451 // DocumentLoadComplete IPCs. 451 // DocumentLoadComplete IPCs.
452 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks(); 452 base::TimeDelta ui_timestamp = common_params.ui_timestamp - base::TimeTicks();
453 request.setUiStartTime(ui_timestamp.InSecondsF()); 453 request.setUiStartTime(ui_timestamp.InSecondsF());
454 request.setInputPerfMetricReportPolicy( 454 request.setInputPerfMetricReportPolicy(
455 static_cast<WebURLRequest::InputToLoadPerfMetricReportPolicy>( 455 static_cast<WebURLRequest::InputToLoadPerfMetricReportPolicy>(
456 common_params.report_type)); 456 common_params.report_type));
457 return request; 457 return request;
458 } 458 }
459 459
460 void UpdateFrameNavigationTiming(WebFrame* frame, 460 base::TimeTicks SanitizeNavigationTiming(
461 base::TimeTicks browser_navigation_start, 461 blink::WebFrameLoadType load_type,
462 base::TimeTicks renderer_navigation_start) { 462 const base::TimeTicks& browser_navigation_start,
463 const base::TimeTicks& renderer_navigation_start) {
464 if (load_type != blink::WebFrameLoadType::Standard)
465 return base::TimeTicks();
463 // The browser provides the navigation_start time to bootstrap the 466 // The browser provides the navigation_start time to bootstrap the
clamy 2015/11/04 13:33:44 Can you move the comment above the function (and m
Charlie Harrison 2015/11/04 14:13:49 Done.
464 // Navigation Timing information for the browser-initiated navigations. In 467 // Navigation Timing information for the browser-initiated navigations. In
465 // case of cross-process navigations, this carries over the time of 468 // case of cross-process navigations, this carries over the time of
466 // finishing the onbeforeunload handler of the previous page. 469 // finishing the onbeforeunload handler of the previous page.
470 // |browser_navigation_start| is likely before this process existed, so we
471 // can't use InterProcessTimeTicksConverter. We need at least to ensure
clamy 2015/11/04 13:33:44 nit: we prefer to avoid "we" in comments.
Charlie Harrison 2015/11/04 14:13:49 Done.
472 // that the browser-side navigation start we set is not later than the one
473 // on the renderer side.
467 DCHECK(!browser_navigation_start.is_null()); 474 DCHECK(!browser_navigation_start.is_null());
468 if (frame->provisionalDataSource()) { 475 base::TimeTicks navigation_start =
469 // |browser_navigation_start| is likely before this process existed, so we 476 std::min(browser_navigation_start, renderer_navigation_start);
470 // can't use InterProcessTimeTicksConverter. We need at least to ensure 477 // TODO(clamy) We need to provide additional timing values for the Navigation
clamy 2015/11/04 13:33:44 This TODO should be moved where we actually set th
Charlie Harrison 2015/11/04 14:13:49 Done.
471 // that the browser-side navigation start we set is not later than the one 478 // Timing API to work with browser-side navigations.
472 // on the renderer side. 479 // TODO(csharrison) UMA log:
473 base::TimeTicks navigation_start = std::min( 480 // |renderer_navigation_start - browser_navigation_start|
474 browser_navigation_start, renderer_navigation_start); 481 return navigation_start;
475 double navigation_start_seconds =
476 (navigation_start - base::TimeTicks()).InSecondsF();
477 frame->provisionalDataSource()->setNavigationStartTime(
478 navigation_start_seconds);
479 // TODO(clamy): We need to provide additional timing values for the
480 // Navigation Timing API to work with browser-side navigations.
481 }
482 } 482 }
483 483
484 // PlzNavigate 484 // PlzNavigate
485 CommonNavigationParams MakeCommonNavigationParams( 485 CommonNavigationParams MakeCommonNavigationParams(
486 blink::WebURLRequest* request, 486 blink::WebURLRequest* request,
487 bool should_replace_current_entry) { 487 bool should_replace_current_entry) {
488 const RequestExtraData kEmptyData; 488 const RequestExtraData kEmptyData;
489 const RequestExtraData* extra_data = 489 const RequestExtraData* extra_data =
490 static_cast<RequestExtraData*>(request->extraData()); 490 static_cast<RequestExtraData*>(request->extraData());
491 if (!extra_data) 491 if (!extra_data)
(...skipping 2091 matching lines...) Expand 10 before | Expand all | Expand 10 after
2583 InternalDocumentStateData::FromDocumentState(document_state); 2583 InternalDocumentStateData::FromDocumentState(document_state);
2584 InternalDocumentStateData* old_internal_data = 2584 InternalDocumentStateData* old_internal_data =
2585 InternalDocumentStateData::FromDocumentState(old_document_state); 2585 InternalDocumentStateData::FromDocumentState(old_document_state);
2586 internal_data->set_is_overriding_user_agent( 2586 internal_data->set_is_overriding_user_agent(
2587 old_internal_data->is_overriding_user_agent()); 2587 old_internal_data->is_overriding_user_agent());
2588 } 2588 }
2589 } 2589 }
2590 2590
2591 // The rest of RenderView assumes that a WebDataSource will always have a 2591 // The rest of RenderView assumes that a WebDataSource will always have a
2592 // non-null NavigationState. 2592 // non-null NavigationState.
2593 if (content_initiated) { 2593 UpdateNavigationState(document_state);
2594 document_state->set_navigation_state(
2595 NavigationStateImpl::CreateContentInitiated());
2596 } else {
2597 document_state->set_navigation_state(CreateNavigationStateFromPending());
2598 pending_navigation_params_.reset();
2599 }
2600 2594
2601 // DocumentState::referred_by_prefetcher_ is true if we are 2595 // DocumentState::referred_by_prefetcher_ is true if we are
2602 // navigating from a page that used prefetching using a link on that 2596 // navigating from a page that used prefetching using a link on that
2603 // page. We are early enough in the request process here that we 2597 // page. We are early enough in the request process here that we
2604 // can still see the DocumentState of the previous page and set 2598 // can still see the DocumentState of the previous page and set
2605 // this value appropriately. 2599 // this value appropriately.
2606 // TODO(gavinp): catch the important case of navigation in a new 2600 // TODO(gavinp): catch the important case of navigation in a new
2607 // renderer process. 2601 // renderer process.
2608 if (webview) { 2602 if (webview) {
2609 if (WebFrame* old_frame = webview->mainFrame()) { 2603 if (WebFrame* old_frame = webview->mainFrame()) {
(...skipping 29 matching lines...) Expand all
2639 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK); 2633 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK);
2640 break; 2634 break;
2641 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. 2635 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post.
2642 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); 2636 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY);
2643 break; 2637 break;
2644 default: 2638 default:
2645 NOTREACHED(); 2639 NOTREACHED();
2646 } 2640 }
2647 } 2641 }
2648 2642
2643 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2644 document_state->navigation_state());
2645
2646 // Set the navigation start time in blink.
2647 base::TimeTicks navigation_start =
2648 navigation_state->common_params().navigation_start;
2649 datasource->setNavigationStartTime(
2650 (navigation_start - base::TimeTicks()).InSecondsF());
2651
2649 // Create the serviceworker's per-document network observing object if it 2652 // Create the serviceworker's per-document network observing object if it
2650 // does not exist (When navigation happens within a page, the provider already 2653 // does not exist (When navigation happens within a page, the provider already
2651 // exists). 2654 // exists).
2652 if (ServiceWorkerNetworkProvider::FromDocumentState( 2655 if (ServiceWorkerNetworkProvider::FromDocumentState(
2653 DocumentState::FromDataSource(datasource))) 2656 DocumentState::FromDataSource(datasource)))
2654 return; 2657 return;
2655 2658
2656 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
2657 DocumentState::FromDataSource(datasource)->navigation_state());
2658
2659 ServiceWorkerNetworkProvider::AttachToDocumentState( 2659 ServiceWorkerNetworkProvider::AttachToDocumentState(
2660 DocumentState::FromDataSource(datasource), 2660 DocumentState::FromDataSource(datasource),
2661 ServiceWorkerNetworkProvider::CreateForNavigation( 2661 ServiceWorkerNetworkProvider::CreateForNavigation(
2662 routing_id_, navigation_state->request_params(), 2662 routing_id_, navigation_state->request_params(),
2663 frame->effectiveSandboxFlags(), content_initiated)); 2663 frame->effectiveSandboxFlags(), content_initiated));
2664 } 2664 }
2665 2665
2666 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame, 2666 void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
2667 double triggering_event_time) { 2667 double triggering_event_time) {
2668 DCHECK(!frame_ || frame_ == frame); 2668 DCHECK(!frame_ || frame_ == frame);
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
3124 blink::WebHistoryCommitType commit_type) { 3124 blink::WebHistoryCommitType commit_type) {
3125 TRACE_EVENT1("navigation", "RenderFrameImpl::didNavigateWithinPage", 3125 TRACE_EVENT1("navigation", "RenderFrameImpl::didNavigateWithinPage",
3126 "id", routing_id_); 3126 "id", routing_id_);
3127 DCHECK(!frame_ || frame_ == frame); 3127 DCHECK(!frame_ || frame_ == frame);
3128 // If this was a reference fragment navigation that we initiated, then we 3128 // If this was a reference fragment navigation that we initiated, then we
3129 // could end up having a non-null pending navigation params. We just need to 3129 // could end up having a non-null pending navigation params. We just need to
3130 // update the ExtraData on the datasource so that others who read the 3130 // update the ExtraData on the datasource so that others who read the
3131 // ExtraData will get the new NavigationState. Similarly, if we did not 3131 // ExtraData will get the new NavigationState. Similarly, if we did not
3132 // initiate this navigation, then we need to take care to reset any pre- 3132 // initiate this navigation, then we need to take care to reset any pre-
3133 // existing navigation state to a content-initiated navigation state. 3133 // existing navigation state to a content-initiated navigation state.
3134 // didCreateDataSource conveniently takes care of this for us. 3134 // UpdateNavigationState conveniently takes care of this for us.
3135 didCreateDataSource(frame, frame->dataSource());
3136
3137 DocumentState* document_state = 3135 DocumentState* document_state =
3138 DocumentState::FromDataSource(frame->dataSource()); 3136 DocumentState::FromDataSource(frame->dataSource());
3137 UpdateNavigationState(document_state);
3139 static_cast<NavigationStateImpl*>(document_state->navigation_state()) 3138 static_cast<NavigationStateImpl*>(document_state->navigation_state())
3140 ->set_was_within_same_page(true); 3139 ->set_was_within_same_page(true);
3141 3140
3142 didCommitProvisionalLoad(frame, item, commit_type); 3141 didCommitProvisionalLoad(frame, item, commit_type);
3143 } 3142 }
3144 3143
3145 void RenderFrameImpl::didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame) { 3144 void RenderFrameImpl::didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame) {
3146 DCHECK(!frame_ || frame_ == frame); 3145 DCHECK(!frame_ || frame_ == frame);
3147 // TODO(nasko): Move implementation here. Needed methods: 3146 // TODO(nasko): Move implementation here. Needed methods:
3148 // * StartNavStateSyncTimerIfNecessary 3147 // * StartNavStateSyncTimerIfNecessary
(...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after
4615 } 4614 }
4616 4615
4617 void RenderFrameImpl::NavigateInternal( 4616 void RenderFrameImpl::NavigateInternal(
4618 const CommonNavigationParams& common_params, 4617 const CommonNavigationParams& common_params,
4619 const StartNavigationParams& start_params, 4618 const StartNavigationParams& start_params,
4620 const RequestNavigationParams& request_params, 4619 const RequestNavigationParams& request_params,
4621 scoped_ptr<StreamOverrideParameters> stream_params) { 4620 scoped_ptr<StreamOverrideParameters> stream_params) {
4622 bool browser_side_navigation = 4621 bool browser_side_navigation =
4623 base::CommandLine::ForCurrentProcess()->HasSwitch( 4622 base::CommandLine::ForCurrentProcess()->HasSwitch(
4624 switches::kEnableBrowserSideNavigation); 4623 switches::kEnableBrowserSideNavigation);
4624 // Lower bound for browser initiated navigation start time.
clamy 2015/11/04 13:33:44 nit: empty line before comment.
Charlie Harrison 2015/11/04 14:13:49 Done.
4625 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now();
4625 bool is_reload = IsReload(common_params.navigation_type); 4626 bool is_reload = IsReload(common_params.navigation_type);
4626 bool is_history_navigation = request_params.page_state.IsValid(); 4627 bool is_history_navigation = request_params.page_state.IsValid();
4627 WebURLRequest::CachePolicy cache_policy = 4628 WebURLRequest::CachePolicy cache_policy =
4628 WebURLRequest::UseProtocolCachePolicy; 4629 WebURLRequest::UseProtocolCachePolicy;
4629 RenderFrameImpl::PrepareRenderViewForNavigation( 4630 RenderFrameImpl::PrepareRenderViewForNavigation(
4630 common_params.url, request_params, &is_reload, &cache_policy); 4631 common_params.url, request_params, &is_reload, &cache_policy);
4631 4632
4632 GetContentClient()->SetActiveURL(common_params.url); 4633 GetContentClient()->SetActiveURL(common_params.url);
4633 4634
4634 // If this frame isn't in the same process as the main frame, it may naively 4635 // If this frame isn't in the same process as the main frame, it may naively
4635 // assume that this is the first navigation in the iframe, but this may not 4636 // assume that this is the first navigation in the iframe, but this may not
4636 // actually be the case. Inform the frame's state machine if this frame has 4637 // actually be the case. Inform the frame's state machine if this frame has
4637 // already committed other loads. 4638 // already committed other loads.
4638 if (request_params.has_committed_real_load && frame_->parent()) 4639 if (request_params.has_committed_real_load && frame_->parent())
4639 frame_->setCommittedFirstRealLoad(); 4640 frame_->setCommittedFirstRealLoad();
4640 4641
4641 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { 4642 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) {
4642 // We cannot reload if we do not have any history state. This happens, for 4643 // We cannot reload if we do not have any history state. This happens, for
4643 // example, when recovering from a crash. 4644 // example, when recovering from a crash.
4644 is_reload = false; 4645 is_reload = false;
4645 cache_policy = WebURLRequest::ReloadIgnoringCacheData; 4646 cache_policy = WebURLRequest::ReloadIgnoringCacheData;
4646 } 4647 }
4647 4648
4648 pending_navigation_params_.reset( 4649 pending_navigation_params_.reset(
4649 new NavigationParams(common_params, start_params, request_params)); 4650 new NavigationParams(common_params, start_params, request_params));
4651 // We don't know for sure that this load type is WebFrameLoadType::Standard.
clamy 2015/11/04 13:33:44 nit: empty line before comment. Also see if you ca
Charlie Harrison 2015/11/04 14:13:49 Done.
4652 // For now, set this to null, and update it when we are sure of the right
4653 // value.
4654 // TODO(csharrison) See if we can always use the browser timestamp.
4655 pending_navigation_params_->common_params.navigation_start =
4656 base::TimeTicks();
4650 4657
4651 // Create parameters for a standard navigation. 4658 // Create parameters for a standard navigation.
4652 blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard; 4659 blink::WebFrameLoadType load_type = blink::WebFrameLoadType::Standard;
4653 bool should_load_request = false; 4660 bool should_load_request = false;
4654 WebHistoryItem item_for_history_navigation; 4661 WebHistoryItem item_for_history_navigation;
4655 WebURLRequest request = CreateURLRequestForNavigation( 4662 WebURLRequest request = CreateURLRequestForNavigation(
4656 common_params, stream_params.Pass(), frame_->isViewSourceModeEnabled()); 4663 common_params, stream_params.Pass(), frame_->isViewSourceModeEnabled());
4657 #if defined(OS_ANDROID) 4664 #if defined(OS_ANDROID)
4658 request.setHasUserGesture(start_params.has_user_gesture); 4665 request.setHasUserGesture(start_params.has_user_gesture);
4659 #endif 4666 #endif
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
4771 request.setHTTPBody(http_body); 4778 request.setHTTPBody(http_body);
4772 } 4779 }
4773 4780
4774 // A session history navigation should have been accompanied by state. 4781 // A session history navigation should have been accompanied by state.
4775 CHECK_EQ(request_params.page_id, -1); 4782 CHECK_EQ(request_params.page_id, -1);
4776 4783
4777 should_load_request = true; 4784 should_load_request = true;
4778 } 4785 }
4779 4786
4780 if (should_load_request) { 4787 if (should_load_request) {
4781 // Record this before starting the load. We need a lower bound of this 4788 // Sanitize navigation start now that we know the load_type.
4782 // time to sanitize the navigationStart override set below. 4789 pending_navigation_params_->common_params.navigation_start =
4783 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); 4790 SanitizeNavigationTiming(load_type, common_params.navigation_start,
4784 4791 renderer_navigation_start);
4785 // Perform a navigation to a data url if needed. 4792 // Perform a navigation to a data url if needed.
4786 if (!common_params.base_url_for_data_url.is_empty() || 4793 if (!common_params.base_url_for_data_url.is_empty() ||
4787 (browser_side_navigation && 4794 (browser_side_navigation &&
4788 common_params.url.SchemeIs(url::kDataScheme))) { 4795 common_params.url.SchemeIs(url::kDataScheme))) {
4789 LoadDataURL(common_params, frame_); 4796 LoadDataURL(common_params, frame_);
4790 } else { 4797 } else {
4791 // Load the request. 4798 // Load the request.
4792 frame_->toWebLocalFrame()->load(request, load_type, 4799 frame_->toWebLocalFrame()->load(request, load_type,
4793 item_for_history_navigation); 4800 item_for_history_navigation);
4794 } 4801 }
4795
4796 if (load_type == blink::WebFrameLoadType::Standard) {
4797 UpdateFrameNavigationTiming(frame_,
4798 common_params.navigation_start,
4799 renderer_navigation_start);
4800 }
4801 } 4802 }
4802 4803
4803 // In case LoadRequest failed before didCreateDataSource was called. 4804 // In case LoadRequest failed before didCreateDataSource was called.
4804 pending_navigation_params_.reset(); 4805 pending_navigation_params_.reset();
4805 } 4806 }
4806 4807
4807 void RenderFrameImpl::UpdateEncoding(WebFrame* frame, 4808 void RenderFrameImpl::UpdateEncoding(WebFrame* frame,
4808 const std::string& encoding_name) { 4809 const std::string& encoding_name) {
4809 // Only update main frame's encoding_name. 4810 // Only update main frame's encoding_name.
4810 if (!frame->parent()) 4811 if (!frame->parent())
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
5151 NavigationState* RenderFrameImpl::CreateNavigationStateFromPending() { 5152 NavigationState* RenderFrameImpl::CreateNavigationStateFromPending() {
5152 if (IsBrowserInitiated(pending_navigation_params_.get())) { 5153 if (IsBrowserInitiated(pending_navigation_params_.get())) {
5153 return NavigationStateImpl::CreateBrowserInitiated( 5154 return NavigationStateImpl::CreateBrowserInitiated(
5154 pending_navigation_params_->common_params, 5155 pending_navigation_params_->common_params,
5155 pending_navigation_params_->start_params, 5156 pending_navigation_params_->start_params,
5156 pending_navigation_params_->request_params); 5157 pending_navigation_params_->request_params);
5157 } 5158 }
5158 return NavigationStateImpl::CreateContentInitiated(); 5159 return NavigationStateImpl::CreateContentInitiated();
5159 } 5160 }
5160 5161
5162 void RenderFrameImpl::UpdateNavigationState(DocumentState* document_state) {
5163 if (pending_navigation_params_) {
5164 // If this is a browser-initiated load that we didn't want to override
clamy 2015/11/04 13:33:44 nit: rephrase "...that doesn't override the naviga
Charlie Harrison 2015/11/04 14:13:49 Done.
5165 // navigation_start, set it here.
5166 if (pending_navigation_params_->common_params.navigation_start.is_null()) {
5167 pending_navigation_params_->common_params.navigation_start =
5168 base::TimeTicks::Now();
5169 }
5170 document_state->set_navigation_state(CreateNavigationStateFromPending());
5171 pending_navigation_params_.reset();
5172 } else {
5173 document_state->set_navigation_state(
5174 NavigationStateImpl::CreateContentInitiated());
5175 }
5176 }
5177
5161 #if defined(OS_ANDROID) 5178 #if defined(OS_ANDROID)
5162 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( 5179 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
5163 WebMediaPlayerClient* client, 5180 WebMediaPlayerClient* client,
5164 WebMediaPlayerEncryptedMediaClient* encrypted_client, 5181 WebMediaPlayerEncryptedMediaClient* encrypted_client,
5165 const media::WebMediaPlayerParams& params) { 5182 const media::WebMediaPlayerParams& params) {
5166 scoped_refptr<StreamTextureFactory> stream_texture_factory; 5183 scoped_refptr<StreamTextureFactory> stream_texture_factory;
5167 if (SynchronousCompositorFactory* factory = 5184 if (SynchronousCompositorFactory* factory =
5168 SynchronousCompositorFactory::GetInstance()) { 5185 SynchronousCompositorFactory::GetInstance()) {
5169 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_); 5186 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_);
5170 } else { 5187 } else {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
5288 mojo::ServiceProviderPtr service_provider; 5305 mojo::ServiceProviderPtr service_provider;
5289 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5306 mojo::URLRequestPtr request(mojo::URLRequest::New());
5290 request->url = mojo::String::From(url); 5307 request->url = mojo::String::From(url);
5291 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5308 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5292 nullptr, nullptr, 5309 nullptr, nullptr,
5293 base::Bind(&OnGotContentHandlerID)); 5310 base::Bind(&OnGotContentHandlerID));
5294 return service_provider.Pass(); 5311 return service_provider.Pass();
5295 } 5312 }
5296 5313
5297 } // namespace content 5314 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698