Index: content/test/test_web_contents.cc |
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc |
index 7807ffaa804cd54659f481ace694e51416a16efd..1cdc64149cd626b1db52af6279479417c1e16a18 100644 |
--- a/content/test/test_web_contents.cc |
+++ b/content/test/test_web_contents.cc |
@@ -22,6 +22,7 @@ |
#include "content/public/browser/notification_types.h" |
#include "content/public/common/browser_side_navigation_policy.h" |
#include "content/public/common/page_state.h" |
+#include "content/public/test/browser_side_navigation_test_utils.h" |
#include "content/public/test/mock_render_process_host.h" |
#include "content/test/test_render_view_host.h" |
#include "ui/base/page_transition_types.h" |
@@ -217,31 +218,25 @@ void TestWebContents::CommitPendingNavigation() { |
const NavigationEntry* entry = GetController().GetPendingEntry(); |
DCHECK(entry); |
- // If we are doing a cross-site navigation, this simulates the current RFH |
- // notifying that it has unloaded so the pending RFH is resumed and can |
- // navigate. |
- // PlzNavigate: the pending RFH is not created before the navigation commit, |
- // so it is necessary to simulate the IO thread response here to commit in the |
- // proper renderer. It is necessary to call PrepareForCommit before getting |
- // the main and the pending frame because when we are trying to navigate to a |
- // webui from a new tab, a RenderFrameHost is created to display it that is |
- // committed immediately (since it is a new tab). Therefore the main frame is |
- // replaced without a pending frame being created, and we don't get the right |
- // values for the RFH to navigate: we try to use the old one that has been |
- // deleted in the meantime. |
- // Note that for some synchronous navigations (about:blank, javascript |
- // urls, etc.) there will be no NavigationRequest, and no simulation of the |
- // network stack is required. |
- bool browser_side_navigation = IsBrowserSideNavigationEnabled(); |
- if (!browser_side_navigation || |
- GetMainFrame()->frame_tree_node()->navigation_request()) { |
- GetMainFrame()->PrepareForCommit(); |
- } |
- |
TestRenderFrameHost* old_rfh = GetMainFrame(); |
+ |
+ // PlzNavigate: the pending RenderFrameHost is not created before the |
+ // navigation commit, so it is necessary to simulate the IO thread response |
+ // here to commit in the proper renderer. It is necessary to call |
+ // PrepareForCommit before getting the main and the pending frame because when |
+ // we are trying to navigate to a webui from a new tab, a RenderFrameHost is |
+ // created to display it that is committed immediately (since it is a new |
+ // tab). Therefore the main frame is replaced without a pending frame being |
+ // created, and we don't get the right values for the RenderFrameHost to |
+ // navigate: we try to use the old one that has been deleted in the meantime. |
+ // Note that for some synchronous navigations (about:blank, javascript urls, |
+ // etc.), no simulation of the network stack is required. |
+ old_rfh->PrepareForCommitIfNecessary(); |
+ |
TestRenderFrameHost* rfh = GetPendingMainFrame(); |
if (!rfh) |
rfh = old_rfh; |
+ const bool browser_side_navigation = IsBrowserSideNavigationEnabled(); |
CHECK(!browser_side_navigation || rfh->is_loading()); |
CHECK(!browser_side_navigation || |
!rfh->frame_tree_node()->navigation_request()); |