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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Allow renderer-initiated reloads. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698