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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Rebase. Created 3 years, 10 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
« no previous file with comments | « content/public/test/render_view_test.cc ('k') | content/renderer/render_frame_impl_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index c95d6134a440ea27f0675f1a808f5068e46742e8..5a11cf04cf68ca7e9b7ca71727569eb75486e4bb 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -561,6 +561,7 @@ WebURLRequest CreateURLRequestForNavigation(
const CommonNavigationParams& common_params,
std::unique_ptr<StreamOverrideParameters> stream_override,
bool is_view_source_mode_enabled,
+ bool is_same_document_navigation,
int nav_entry_id) {
WebURLRequest request(common_params.url);
if (is_view_source_mode_enabled)
@@ -569,8 +570,7 @@ WebURLRequest CreateURLRequestForNavigation(
request.setHTTPMethod(WebString::fromUTF8(common_params.method));
if (common_params.referrer.url.is_valid()) {
WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
- common_params.referrer.policy,
- common_params.url,
+ common_params.referrer.policy, common_params.url,
WebString::fromUTF8(common_params.referrer.url.spec()));
if (!web_referrer.isEmpty()) {
request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
@@ -579,6 +579,7 @@ WebURLRequest CreateURLRequestForNavigation(
}
}
+ request.setIsSameDocumentNavigation(is_same_document_navigation);
request.setPreviewsState(
static_cast<WebURLRequest::PreviewsState>(common_params.previews_state));
@@ -638,9 +639,13 @@ CommonNavigationParams MakeCommonNavigationParams(
static_cast<FrameMsg_UILoadMetricsReportType::Value>(
info.urlRequest.inputPerfMetricReportPolicy());
- // Determine the navigation type.
+ // No history-navigation is expected to happen.
+ DCHECK(info.navigationType != blink::WebNavigationTypeBackForward);
+
+ // Determine the navigation type. No same-document navigation is expected
+ // because it is loaded immediately by the FrameLoader.
FrameMsg_Navigate_Type::Value navigation_type =
- FrameMsg_Navigate_Type::NORMAL;
+ FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
if (info.navigationType == blink::WebNavigationTypeReload) {
if (load_flags & net::LOAD_BYPASS_CACHE)
navigation_type = FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE;
@@ -667,37 +672,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 =
@@ -5181,7 +5169,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);
@@ -5202,7 +5191,9 @@ 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(), request_params.nav_entry_id);
+ frame_->isViewSourceModeEnabled(),
+ false, // is_same_document_navigation
+ request_params.nav_entry_id);
if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) {
// The browser expects this frame to be loading an error page. Inform it
@@ -5829,7 +5820,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(
@@ -5875,10 +5867,17 @@ 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(),
- request_params.nav_entry_id);
+
+ // Enforce same-document navigation from the browser only if
+ // browser-side-navigation is enabled.
+ bool is_same_document =
+ IsBrowserSideNavigationEnabled() &&
+ FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type);
+
+ WebURLRequest request = CreateURLRequestForNavigation(
+ common_params, std::move(stream_params),
+ frame_->isViewSourceModeEnabled(), is_same_document,
+ request_params.nav_entry_id);
request.setFrameType(IsTopLevelNavigation(frame_)
? blink::WebURLRequest::FrameTypeTopLevel
: blink::WebURLRequest::FrameTypeNested);
@@ -5932,9 +5931,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;
« no previous file with comments | « content/public/test/render_view_test.cc ('k') | content/renderer/render_frame_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698