Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 11e7198d70cf15b155ba0bac452aacadb0a4cd91..f718fe8f6f50581bf6f7fb8c60e91ee70770f7fc 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -554,7 +554,8 @@ bool IsTopLevelNavigation(WebFrame* frame) { |
WebURLRequest CreateURLRequestForNavigation( |
const CommonNavigationParams& common_params, |
std::unique_ptr<StreamOverrideParameters> stream_override, |
- bool is_view_source_mode_enabled) { |
+ bool is_view_source_mode_enabled, |
+ bool is_same_document_navigation) { |
WebURLRequest request(common_params.url); |
if (is_view_source_mode_enabled) |
request.setCachePolicy(WebCachePolicy::ReturnCacheDataElseLoad); |
@@ -572,6 +573,7 @@ WebURLRequest CreateURLRequestForNavigation( |
} |
} |
+ request.setIsSameDocumentNavigation(is_same_document_navigation); |
request.setPreviewsState( |
static_cast<WebURLRequest::PreviewsState>(common_params.previews_state)); |
@@ -629,10 +631,15 @@ CommonNavigationParams MakeCommonNavigationParams( |
static_cast<FrameMsg_UILoadMetricsReportType::Value>( |
info.urlRequest.inputPerfMetricReportPolicy()); |
+ // No history-navigation is expected to happen. |
+ DCHECK(info.navigationType != blink::WebNavigationTypeBackForward); |
+ |
FrameMsg_Navigate_Type::Value navigation_type = |
info.navigationType == blink::WebNavigationTypeReload |
- ? FrameMsg_Navigate_Type::RELOAD |
- : FrameMsg_Navigate_Type::NORMAL; |
+ ? FrameMsg_Navigate_Type::RELOAD |
+ // No same-document navigation is expected because it is loaded |
+ // immediately by the FrameLoader. |
+ : FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT; |
const RequestExtraData* extra_data = |
static_cast<RequestExtraData*>(info.urlRequest.getExtraData()); |
@@ -653,37 +660,20 @@ media::Context3D GetSharedMainThreadContext3D( |
return media::Context3D(provider->ContextGL(), provider->GrContext()); |
} |
-bool IsReload(FrameMsg_Navigate_Type::Value navigation_type) { |
- switch (navigation_type) { |
- case FrameMsg_Navigate_Type::RELOAD: |
- case FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE: |
- case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL: |
- return true; |
- case FrameMsg_Navigate_Type::RESTORE: |
- case FrameMsg_Navigate_Type::RESTORE_WITH_POST: |
- case FrameMsg_Navigate_Type::NORMAL: |
- return false; |
- } |
- NOTREACHED(); |
- return false; |
-} |
- |
WebFrameLoadType ReloadFrameLoadTypeFor( |
FrameMsg_Navigate_Type::Value navigation_type) { |
switch (navigation_type) { |
case FrameMsg_Navigate_Type::RELOAD: |
case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL: |
return WebFrameLoadType::ReloadMainResource; |
+ |
case FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE: |
return WebFrameLoadType::ReloadBypassingCache; |
- case FrameMsg_Navigate_Type::RESTORE: |
- case FrameMsg_Navigate_Type::RESTORE_WITH_POST: |
- case FrameMsg_Navigate_Type::NORMAL: |
+ |
+ default: |
NOTREACHED(); |
return WebFrameLoadType::Standard; |
} |
- NOTREACHED(); |
- return WebFrameLoadType::Standard; |
} |
RenderFrameImpl::CreateRenderFrameImplFunction g_create_render_frame_impl = |
@@ -5183,7 +5173,8 @@ void RenderFrameImpl::OnFailedNavigation( |
bool has_stale_copy_in_cache, |
int error_code) { |
DCHECK(IsBrowserSideNavigationEnabled()); |
- bool is_reload = IsReload(common_params.navigation_type); |
+ bool is_reload = |
+ FrameMsg_Navigate_Type::IsReload(common_params.navigation_type); |
RenderFrameImpl::PrepareRenderViewForNavigation( |
common_params.url, request_params); |
@@ -5204,7 +5195,8 @@ void RenderFrameImpl::OnFailedNavigation( |
CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code); |
WebURLRequest failed_request = CreateURLRequestForNavigation( |
common_params, std::unique_ptr<StreamOverrideParameters>(), |
- frame_->isViewSourceModeEnabled()); |
+ frame_->isViewSourceModeEnabled(), |
+ false); // is_same_document_navigation |
if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) { |
// The browser expects this frame to be loading an error page. Inform it |
@@ -5848,7 +5840,8 @@ void RenderFrameImpl::NavigateInternal( |
// Lower bound for browser initiated navigation start time. |
base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); |
- bool is_reload = IsReload(common_params.navigation_type); |
+ bool is_reload = |
+ FrameMsg_Navigate_Type::IsReload(common_params.navigation_type); |
bool is_history_navigation = request_params.page_state.IsValid(); |
WebCachePolicy cache_policy = WebCachePolicy::UseProtocolCachePolicy; |
RenderFrameImpl::PrepareRenderViewForNavigation( |
@@ -5898,9 +5891,11 @@ void RenderFrameImpl::NavigateInternal( |
blink::WebHistoryDifferentDocumentLoad; |
bool should_load_request = false; |
WebHistoryItem item_for_history_navigation; |
- WebURLRequest request = |
- CreateURLRequestForNavigation(common_params, std::move(stream_params), |
- frame_->isViewSourceModeEnabled()); |
+ |
+ WebURLRequest request = CreateURLRequestForNavigation( |
+ common_params, std::move(stream_params), |
+ frame_->isViewSourceModeEnabled(), |
+ FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type)); |
request.setFrameType(IsTopLevelNavigation(frame_) |
? blink::WebURLRequest::FrameTypeTopLevel |
: blink::WebURLRequest::FrameTypeNested); |
@@ -5968,9 +5963,22 @@ void RenderFrameImpl::NavigateInternal( |
// store the relevant frame's WebHistoryItem in the root of the |
// PageState. |
item_for_history_navigation = entry->root(); |
- history_load_type = request_params.is_same_document_history_load |
- ? blink::WebHistorySameDocumentLoad |
- : blink::WebHistoryDifferentDocumentLoad; |
+ switch (common_params.navigation_type) { |
+ case FrameMsg_Navigate_Type::RELOAD: |
+ case FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE: |
+ case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL: |
+ case FrameMsg_Navigate_Type::RESTORE: |
+ case FrameMsg_Navigate_Type::RESTORE_WITH_POST: |
+ case FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT: |
+ history_load_type = blink::WebHistoryDifferentDocumentLoad; |
+ break; |
+ case FrameMsg_Navigate_Type::HISTORY_SAME_DOCUMENT: |
+ history_load_type = blink::WebHistorySameDocumentLoad; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ history_load_type = blink::WebHistoryDifferentDocumentLoad; |
+ } |
load_type = request_params.is_history_navigation_in_new_child |
? blink::WebFrameLoadType::InitialHistoryLoad |
: blink::WebFrameLoadType::BackForward; |