Index: content/test/test_web_contents.cc |
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc |
index f2ee15df13eecf5912deb8d52ad108142ab3f11c..52d8591ef1698983f6c4a0b572257537dd85c52d 100644 |
--- a/content/test/test_web_contents.cc |
+++ b/content/test/test_web_contents.cc |
@@ -6,19 +6,25 @@ |
#include <utility> |
+#include "base/command_line.h" |
#include "content/browser/browser_url_handler_impl.h" |
#include "content/browser/frame_host/cross_process_frame_connector.h" |
#include "content/browser/frame_host/navigation_entry_impl.h" |
+#include "content/browser/frame_host/navigation_request.h" |
#include "content/browser/frame_host/navigator.h" |
+#include "content/browser/frame_host/navigator_impl.h" |
#include "content/browser/renderer_host/render_view_host_impl.h" |
#include "content/browser/site_instance_impl.h" |
-#include "content/common/frame_messages.h" |
#include "content/common/view_messages.h" |
#include "content/public/browser/notification_registrar.h" |
#include "content/public/browser/notification_source.h" |
#include "content/public/browser/notification_types.h" |
+#include "content/public/browser/stream_handle.h" |
+#include "content/public/common/content_switches.h" |
#include "content/public/common/page_state.h" |
#include "content/public/test/mock_render_process_host.h" |
+#include "content/test/browser_side_navigation_test_utils.h" |
+#include "content/test/test_navigation_url_loader.h" |
#include "content/test/test_render_view_host.h" |
#include "ui/base/page_transition_types.h" |
@@ -123,6 +129,7 @@ WebContents* TestWebContents::Clone() { |
} |
void TestWebContents::NavigateAndCommit(const GURL& url) { |
+ bool has_live_renderer = GetMainFrame()->IsRenderFrameLive(); |
GetController().LoadURL( |
url, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
GURL loaded_url(url); |
@@ -130,6 +137,28 @@ void TestWebContents::NavigateAndCommit(const GURL& url) { |
BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary( |
&loaded_url, GetBrowserContext(), &reverse_on_redirect); |
+ // PlzNavigate |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation)) { |
+ // Simulate the renderer response if there was a live renderer when the |
+ // navigation started. Otherwise, it will have been sent directly to the |
+ // network stack. |
+ if (has_live_renderer) |
+ GetMainFrame()->SendBeginNavigationWithURL(url); |
+ |
+ // Now simulate the network stack commit without any redirects. This will |
+ // cause the navigation to commit at the same url. |
+ FrameTreeNode* frame_tree_node = GetMainFrame()->frame_tree_node(); |
+ NavigationRequest* request = |
+ static_cast<NavigatorImpl*>(frame_tree_node->navigator()) |
+ ->GetNavigationRequestForNodeForTesting(frame_tree_node); |
+ TestNavigationURLLoader* url_loader = |
+ static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); |
+ scoped_refptr<ResourceResponse> response(new ResourceResponse); |
+ url_loader->CallOnResponseStarted( |
+ response, BrowserSideNavigationTestUtils::Get()->MakeEmptyStream()); |
nasko
2014/11/15 00:32:51
I thought the two codepaths should be distinct. It
carlosk
2014/11/17 10:46:56
If we reuse as much as possible the current API an
clamy
2014/11/17 12:51:13
For now we have to call CommitPendingNavigation to
nasko
2014/11/17 22:40:02
Acknowledged.
|
+ } |
+ |
// LoadURL created a navigation entry, now simulate the RenderView sending |
// a notification that it actually navigated. |
CommitPendingNavigation(); |