Chromium Code Reviews| Index: content/renderer/render_frame_impl.cc |
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
| index 3e4317cb0cbaff6cbc8d6b50a8e16408c2184dfe..f6f2816a27abbf3c200fd3308b6a52dfe9c0af8d 100644 |
| --- a/content/renderer/render_frame_impl.cc |
| +++ b/content/renderer/render_frame_impl.cc |
| @@ -456,12 +456,9 @@ CommonNavigationParams MakeCommonNavigationParams( |
| static_cast<RequestExtraData*>(request->extraData()); |
| if (!extra_data) |
| extra_data = &kEmptyData; |
| - CommonNavigationParams params; |
| - params.url = request->url(); |
| - params.referrer = Referrer( |
| + Referrer referrer( |
| GURL(request->httpHeaderField(WebString::fromUTF8("Referer")).latin1()), |
| request->referrerPolicy()); |
| - params.transition = extra_data->transition_type(); |
| // Set the ui timestamp for this navigation. Currently the timestamp here is |
| // only non empty when the navigation was triggered by an Android intent, or |
| @@ -469,11 +466,15 @@ CommonNavigationParams MakeCommonNavigationParams( |
| // version supported by blink. It will be passed back to the renderer in the |
| // CommitNavigation IPC, and then back to the browser again in the |
| // DidCommitProvisionalLoad and the DocumentLoadComplete IPCs. |
| - params.ui_timestamp = |
| + base::TimeTicks ui_timestamp = |
| base::TimeTicks() + base::TimeDelta::FromSecondsD(request->uiStartTime()); |
| - params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>( |
| - request->inputPerfMetricReportPolicy()); |
| - return params; |
| + FrameMsg_UILoadMetricsReportType::Value report_type = |
| + static_cast<FrameMsg_UILoadMetricsReportType::Value>( |
| + request->inputPerfMetricReportPolicy()); |
| + return CommonNavigationParams(request->url(), referrer, |
| + extra_data->transition_type(), |
| + FrameMsg_Navigate_Type::NORMAL, true, |
| + ui_timestamp, report_type, GURL(), GURL()); |
| } |
| #if !defined(OS_ANDROID) |
| @@ -1032,31 +1033,34 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { |
| return handled; |
| } |
| -void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { |
| - TRACE_EVENT2("navigation", "RenderFrameImpl::OnNavigate", |
| - "id", routing_id_, |
| - "url", params.common_params.url.possibly_invalid_spec()); |
| +void RenderFrameImpl::OnNavigate( |
| + const CommonNavigationParams& common_params, |
| + const StartNavigationParams& start_params, |
| + const CommitNavigationParams& commit_params, |
| + const HistoryNavigationParams& history_params) { |
| + TRACE_EVENT2("navigation", "RenderFrameImpl::OnNavigate", "id", routing_id_, |
| + "url", common_params.url.possibly_invalid_spec()); |
| - bool is_reload = |
| - RenderViewImpl::IsReload(params.common_params.navigation_type); |
| - bool is_history_navigation = params.history_params.page_state.IsValid(); |
| + bool is_reload = RenderViewImpl::IsReload(common_params.navigation_type); |
| + bool is_history_navigation = history_params.page_state.IsValid(); |
| WebURLRequest::CachePolicy cache_policy = |
| WebURLRequest::UseProtocolCachePolicy; |
| if (!RenderFrameImpl::PrepareRenderViewForNavigation( |
| - params.common_params.url, is_history_navigation, |
| - params.history_params, &is_reload, &cache_policy)) { |
| + common_params.url, is_history_navigation, history_params, &is_reload, |
| + &cache_policy)) { |
| Send(new FrameHostMsg_DidDropNavigation(routing_id_)); |
| return; |
| } |
| - GetContentClient()->SetActiveURL(params.common_params.url); |
| + GetContentClient()->SetActiveURL(common_params.url); |
| WebFrame* frame = frame_; |
| - if (!params.frame_to_navigate.empty()) { |
| + if (!commit_params.frame_to_navigate.empty()) { |
| // TODO(nasko): Move this lookup to the browser process. |
| frame = render_view_->webview()->findFrameByName( |
| - WebString::fromUTF8(params.frame_to_navigate)); |
| - CHECK(frame) << "Invalid frame name passed: " << params.frame_to_navigate; |
| + WebString::fromUTF8(commit_params.frame_to_navigate)); |
| + CHECK(frame) << "Invalid frame name passed: " |
| + << commit_params.frame_to_navigate; |
| } |
| if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { |
| @@ -1066,8 +1070,14 @@ void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { |
| cache_policy = WebURLRequest::ReloadIgnoringCacheData; |
| } |
| - render_view_->pending_navigation_params_.reset( |
| - new FrameMsg_Navigate_Params(params)); |
| + render_view_->pending_common_params_.reset( |
|
clamy
2015/03/09 14:34:47
We probably need to do something similar in OnComm
|
| + new CommonNavigationParams(common_params)); |
| + render_view_->pending_start_params_.reset( |
| + new StartNavigationParams(start_params)); |
| + render_view_->pending_commit_params_.reset( |
| + new CommitNavigationParams(commit_params)); |
| + render_view_->pending_history_params_.reset( |
| + new HistoryNavigationParams(history_params)); |
| // If we are reloading, then WebKit will use the history state of the current |
| // page, so we should just ignore any given history state. Otherwise, if we |
| @@ -1075,38 +1085,37 @@ void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { |
| // back/forward navigation event. |
| if (is_reload) { |
| bool reload_original_url = |
| - (params.common_params.navigation_type == |
| + (common_params.navigation_type == |
| FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL); |
| - bool ignore_cache = (params.common_params.navigation_type == |
| + bool ignore_cache = (common_params.navigation_type == |
| FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE); |
| if (reload_original_url) |
| - frame->reloadWithOverrideURL(params.common_params.url, true); |
| + frame->reloadWithOverrideURL(common_params.url, true); |
| else |
| frame->reload(ignore_cache); |
| } else if (is_history_navigation) { |
| // We must know the page ID of the page we are navigating back to. |
| - DCHECK_NE(params.history_params.page_id, -1); |
| + DCHECK_NE(history_params.page_id, -1); |
| scoped_ptr<HistoryEntry> entry = |
| - PageStateToHistoryEntry(params.history_params.page_state); |
| + PageStateToHistoryEntry(history_params.page_state); |
| if (entry) { |
| // Ensure we didn't save the swapped out URL in UpdateState, since the |
| // browser should never be telling us to navigate to swappedout://. |
| CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); |
| render_view_->history_controller()->GoToEntry(entry.Pass(), cache_policy); |
| } |
| - } else if (!params.common_params.base_url_for_data_url.is_empty()) { |
| - LoadDataURL(params.common_params, frame); |
| + } else if (!common_params.base_url_for_data_url.is_empty()) { |
| + LoadDataURL(common_params, frame); |
| } else { |
| // Navigate to the given URL. |
| - WebURLRequest request = |
| - CreateURLRequestForNavigation(params.common_params, |
| - scoped_ptr<StreamOverrideParameters>(), |
| - frame->isViewSourceModeEnabled()); |
| - |
| - if (!params.extra_headers.empty()) { |
| - for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(), |
| - params.extra_headers.end(), |
| + WebURLRequest request = CreateURLRequestForNavigation( |
| + common_params, scoped_ptr<StreamOverrideParameters>(), |
| + frame->isViewSourceModeEnabled()); |
| + |
| + if (!start_params.extra_headers.empty()) { |
| + for (net::HttpUtil::HeadersIterator i(start_params.extra_headers.begin(), |
| + start_params.extra_headers.end(), |
| "\n"); |
| i.GetNext();) { |
| request.addHTTPHeaderField(WebString::fromUTF8(i.name()), |
| @@ -1114,37 +1123,39 @@ void RenderFrameImpl::OnNavigate(const FrameMsg_Navigate_Params& params) { |
| } |
| } |
| - if (params.is_post) { |
| + if (start_params.is_post) { |
| request.setHTTPMethod(WebString::fromUTF8("POST")); |
| // Set post data. |
| WebHTTPBody http_body; |
| http_body.initialize(); |
| const char* data = NULL; |
| - if (params.browser_initiated_post_data.size()) { |
| + if (start_params.browser_initiated_post_data.size()) { |
| data = reinterpret_cast<const char*>( |
| - ¶ms.browser_initiated_post_data.front()); |
| + &start_params.browser_initiated_post_data.front()); |
| } |
| http_body.appendData( |
| - WebData(data, params.browser_initiated_post_data.size())); |
| + WebData(data, start_params.browser_initiated_post_data.size())); |
| request.setHTTPBody(http_body); |
| } |
| // A session history navigation should have been accompanied by state. |
| - CHECK_EQ(params.history_params.page_id, -1); |
| + CHECK_EQ(history_params.page_id, -1); |
| // Record this before starting the load, we need a lower bound of this time |
| // to sanitize the navigationStart override set below. |
| base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); |
| frame->loadRequest(request); |
| - UpdateFrameNavigationTiming( |
| - frame, params.commit_params.browser_navigation_start, |
| - renderer_navigation_start); |
| + UpdateFrameNavigationTiming(frame, commit_params.browser_navigation_start, |
| + renderer_navigation_start); |
| } |
| // In case LoadRequest failed before DidCreateDataSource was called. |
| - render_view_->pending_navigation_params_.reset(); |
| + render_view_->pending_common_params_.reset(); |
| + render_view_->pending_start_params_.reset(); |
| + render_view_->pending_commit_params_.reset(); |
| + render_view_->pending_history_params_.reset(); |
| } |
| void RenderFrameImpl::NavigateToSwappedOutURL() { |
| @@ -2431,20 +2442,19 @@ void RenderFrameImpl::didFailProvisionalLoad(blink::WebLocalFrame* frame, |
| // If we failed on a browser initiated request, then make sure that our error |
| // page load is regarded as the same browser initiated request. |
| if (!navigation_state->is_content_initiated()) { |
|
clamy
2015/03/09 14:34:47
This is quite bulky, and my intention is to refact
|
| - render_view_->pending_navigation_params_.reset( |
| - new FrameMsg_Navigate_Params); |
| - FrameMsg_Navigate_Params* pending_params = |
| - render_view_->pending_navigation_params_.get(); |
| - pending_params->history_params.page_id = |
| - navigation_state->pending_page_id(); |
| - pending_params->history_params.pending_history_list_offset = |
| - navigation_state->pending_history_list_offset(); |
| - pending_params->history_params.should_clear_history_list = |
| - navigation_state->history_list_was_cleared(); |
| - pending_params->common_params.transition = |
| - navigation_state->transition_type(); |
| - pending_params->request_time = document_state->request_time(); |
| - pending_params->should_replace_current_entry = replace; |
| + render_view_->pending_common_params_.reset(new CommonNavigationParams( |
| + error.unreachableURL, Referrer(), navigation_state->transition_type(), |
| + FrameMsg_Navigate_Type::NORMAL, true, base::TimeTicks(), |
| + FrameMsg_UILoadMetricsReportType::NO_REPORT, GURL(), GURL())); |
| + render_view_->pending_commit_params_.reset(new CommitNavigationParams( |
| + false, base::TimeTicks(), std::vector<GURL>(), false, std::string(), |
| + document_state->request_time())); |
| + render_view_->pending_start_params_.reset(new StartNavigationParams( |
| + false, std::string(), std::vector<unsigned char>(), replace, -1, -1)); |
| + render_view_->pending_history_params_.reset(new HistoryNavigationParams( |
| + PageState(), navigation_state->pending_page_id(), |
| + navigation_state->pending_history_list_offset(), -1, 0, |
| + navigation_state->history_list_was_cleared())); |
| } |
| // Load an error page. |