Commit c40e051d authored by Dmitry Gozman's avatar Dmitry Gozman Committed by Commit Bot

Refactor FrameLoader::CancelProvisionalLoaderForNewNavigation

This patch removes dependency on NavigationPolicy from the method,
which will allows us to call CommitNavigation directly instead of
returning kNavigationPolicyCurrentTab from DecidePolicyForNavigation.

Bug: 855189
Change-Id: I91df83c2a30c511166c68ea2abd227b71883c37e
Reviewed-on: https://chromium-review.googlesource.com/1222682Reviewed-by: default avatarNate Chapin <japhet@chromium.org>
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591247}
parent 52b73886
...@@ -913,7 +913,14 @@ void FrameLoader::StartNavigation(const FrameLoadRequest& passed_request, ...@@ -913,7 +913,14 @@ void FrameLoader::StartNavigation(const FrameLoadRequest& passed_request,
policy == kNavigationPolicyHandledByClient || policy == kNavigationPolicyHandledByClient ||
policy == kNavigationPolicyHandledByClientForInitialHistory); policy == kNavigationPolicyHandledByClientForInitialHistory);
if (!CancelProvisionalLoaderForNewNavigation(policy)) bool cancel_scheduled_navigations = policy != kNavigationPolicyCurrentTab;
if (!CancelProvisionalLoaderForNewNavigation(cancel_scheduled_navigations))
return;
// TODO(japhet): This case wants to flag the frame as loading and do nothing
// else. It'd be nice if it could go through the placeholder DocumentLoader
// path, too.
if (policy == kNavigationPolicyHandledByClientForInitialHistory)
return; return;
provisional_document_loader_ = CreateDocumentLoader( provisional_document_loader_ = CreateDocumentLoader(
...@@ -1009,8 +1016,10 @@ void FrameLoader::CommitNavigation( ...@@ -1009,8 +1016,10 @@ void FrameLoader::CommitNavigation(
RecordLatestRequiredCSP(); RecordLatestRequiredCSP();
if (!CancelProvisionalLoaderForNewNavigation(kNavigationPolicyCurrentTab)) if (!CancelProvisionalLoaderForNewNavigation(
false /* cancel_scheduled_navigations */)) {
return; return;
}
// TODO(dgozman): navigation type should probably be passed by the caller. // TODO(dgozman): navigation type should probably be passed by the caller.
// It seems incorrect to pass |false| for |have_event| and then use // It seems incorrect to pass |false| for |have_event| and then use
...@@ -1502,7 +1511,7 @@ void FrameLoader::ClientDroppedNavigation() { ...@@ -1502,7 +1511,7 @@ void FrameLoader::ClientDroppedNavigation() {
} }
bool FrameLoader::CancelProvisionalLoaderForNewNavigation( bool FrameLoader::CancelProvisionalLoaderForNewNavigation(
NavigationPolicy navigation_policy) { bool cancel_scheduled_navigations) {
bool had_placeholder_client_document_loader = bool had_placeholder_client_document_loader =
provisional_document_loader_ && !provisional_document_loader_->DidStart(); provisional_document_loader_ && !provisional_document_loader_->DidStart();
...@@ -1529,19 +1538,10 @@ bool FrameLoader::CancelProvisionalLoaderForNewNavigation( ...@@ -1529,19 +1538,10 @@ bool FrameLoader::CancelProvisionalLoaderForNewNavigation(
return false; return false;
progress_tracker_->ProgressStarted(); progress_tracker_->ProgressStarted();
// TODO(japhet): This case wants to flag the frame as loading and do nothing
// else. It'd be nice if it could go through the placeholder DocumentLoader
// path, too.
if (navigation_policy == kNavigationPolicyHandledByClientForInitialHistory)
return false;
DCHECK(navigation_policy == kNavigationPolicyCurrentTab ||
navigation_policy == kNavigationPolicyHandledByClient);
// We need to ensure that script initiated navigations are honored. // We need to ensure that script initiated navigations are honored.
if (!had_placeholder_client_document_loader || if (!had_placeholder_client_document_loader || cancel_scheduled_navigations)
navigation_policy == kNavigationPolicyHandledByClient) {
frame_->GetNavigationScheduler().Cancel(); frame_->GetNavigationScheduler().Cancel();
}
return true; return true;
} }
......
...@@ -243,7 +243,8 @@ class CORE_EXPORT FrameLoader final { ...@@ -243,7 +243,8 @@ class CORE_EXPORT FrameLoader final {
void ProcessFragment(const KURL&, WebFrameLoadType, LoadStartType); void ProcessFragment(const KURL&, WebFrameLoadType, LoadStartType);
// Returns whether we should continue with new navigation. // Returns whether we should continue with new navigation.
bool CancelProvisionalLoaderForNewNavigation(NavigationPolicy); bool CancelProvisionalLoaderForNewNavigation(
bool cancel_scheduled_navigations);
void ClearInitialScrollState(); void ClearInitialScrollState();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment