Index: content/browser/frame_host/frame_tree_browsertest.cc |
diff --git a/content/browser/frame_host/frame_tree_browsertest.cc b/content/browser/frame_host/frame_tree_browsertest.cc |
index bc5f1cb04ff32d92ed415cfc66933323e8d33ff5..4af5249e40e0e8c1413f1ac1a58755994cca8969 100644 |
--- a/content/browser/frame_host/frame_tree_browsertest.cc |
+++ b/content/browser/frame_host/frame_tree_browsertest.cc |
@@ -2,12 +2,14 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/command_line.h" |
#include "content/browser/frame_host/frame_tree.h" |
#include "content/browser/frame_host/frame_tree_node.h" |
#include "content/browser/renderer_host/render_view_host_impl.h" |
#include "content/browser/web_contents/web_contents_impl.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/notification_types.h" |
+#include "content/public/common/content_switches.h" |
#include "content/public/common/url_constants.h" |
#include "content/public/test/browser_test_utils.h" |
#include "content/public/test/content_browser_test.h" |
@@ -15,6 +17,7 @@ |
#include "content/public/test/test_navigation_observer.h" |
#include "content/public/test/test_utils.h" |
#include "content/shell/browser/shell.h" |
+#include "content/test/content_browser_test_utils_internal.h" |
#include "net/dns/mock_host_resolver.h" |
namespace content { |
@@ -155,4 +158,56 @@ IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, NavigateWithLeftoverFrames) { |
EXPECT_EQ(0UL, root->child_count()); |
} |
+class CrossProcessFrameTreeBrowserTest : public ContentBrowserTest { |
+ public: |
+ CrossProcessFrameTreeBrowserTest() {} |
+ |
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { |
+ command_line->AppendSwitch(switches::kSitePerProcess); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(CrossProcessFrameTreeBrowserTest); |
+}; |
+ |
+// Ensure that we can complete a cross-process subframe navigation. |
+IN_PROC_BROWSER_TEST_F(CrossProcessFrameTreeBrowserTest, VerifyProxyCreation) { |
Charlie Reis
2014/07/24 22:36:29
nit: VerifyProxyCreation makes it sound like a net
kenrb
2014/07/25 23:42:05
I've changed the test name but left the class name
|
+ host_resolver()->AddRule("*", "127.0.0.1"); |
+ ASSERT_TRUE(test_server()->Start()); |
+ GURL main_url(test_server()->GetURL("files/site_per_process_main.html")); |
+ NavigateToURL(shell(), main_url); |
+ |
+ // It is safe to obtain the root frame tree node here, as it doesn't change. |
+ FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) |
+ ->GetFrameTree()->root(); |
+ |
+ // Load same-site page into iframe. |
+ GURL http_url(test_server()->GetURL("files/title1.html")); |
+ NavigateFrameToURL(root->child_at(0), http_url); |
+ |
+ // These must stay in scope with replace_host. |
+ GURL::Replacements replace_host; |
+ std::string foo_com("foo.com"); |
+ |
+ // Load cross-site page into iframe. |
+ GURL cross_site_url(test_server()->GetURL("files/title2.html")); |
+ replace_host.SetHostStr(foo_com); |
+ cross_site_url = cross_site_url.ReplaceComponents(replace_host); |
+ NavigateFrameToURL(root->child_at(0), cross_site_url); |
+ |
+ // Ensure that we have created a new process for the subframe. |
+ ASSERT_EQ(1U, root->child_count()); |
+ FrameTreeNode* child = root->child_at(0); |
+ SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance(); |
+ RenderViewHost* rvh = child->current_frame_host()->render_view_host(); |
+ RenderProcessHost* rph = child->current_frame_host()->GetProcess(); |
+ |
+ EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh); |
+ EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance); |
+ EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph); |
+ |
+ // Ensure that the root node has a proxy for the child node's SiteInstance. |
+ EXPECT_TRUE(root->render_manager()->proxy_hosts_[site_instance->GetId()]); |
Charlie Reis
2014/07/24 22:36:29
Are we creating the proxy in the subframe for the
nasko
2014/07/25 07:13:20
That should be created by the virtue of cross-proc
|
+} |
+ |
} // namespace content |