Index: content/browser/renderer_host/render_view_host_manager_browsertest.cc |
diff --git a/content/browser/renderer_host/render_view_host_manager_browsertest.cc b/content/browser/renderer_host/render_view_host_manager_browsertest.cc |
index c6486b7c166f8b8c17f309f17e9f3d9bd64c0249..6582ce577c16cb9e24260f09cac6b4b4eaee7a4b 100644 |
--- a/content/browser/renderer_host/render_view_host_manager_browsertest.cc |
+++ b/content/browser/renderer_host/render_view_host_manager_browsertest.cc |
@@ -975,7 +975,9 @@ class RenderViewHostObserverArray { |
// Test for crbug.com/90867. Make sure we don't leak render view hosts since |
// they may cause crashes or memory corruptions when trying to call dead |
-// delegate_. |
+// delegate_. This test also verifies crbug.com/117420 and crbug.com/143255 to |
+// ensure that a separate SiteInstance is created when navigating to view-source |
+// URLs, regardless of current URL. |
IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, LeakingRenderViewHosts) { |
// Start two servers with different sites. |
ASSERT_TRUE(test_server()->Start()); |
@@ -985,20 +987,46 @@ IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, LeakingRenderViewHosts) { |
FilePath(FILE_PATH_LITERAL("content/test/data"))); |
ASSERT_TRUE(https_server.Start()); |
+ // Observe the created render_view_host's to make sure they will not leak. |
+ RenderViewHostObserverArray rvh_observers; |
+ |
+ GURL navigated_url(test_server()->GetURL("files/title2.html")); |
+ GURL view_source_url(chrome::kViewSourceScheme + std::string(":") + |
+ navigated_url.spec()); |
+ |
+ // Let's ensure that when we start with blank window, navigating away from it, |
+ // we create a new SiteInstance. |
Charlie Reis
2012/08/16 22:28:09
This comment isn't quite right. This should only
nasko
2012/08/16 22:59:23
Done.
|
+ content::RenderViewHost* blank_rvh = shell()->web_contents()-> |
+ GetRenderViewHost(); |
+ SiteInstance* blank_site_instance = blank_rvh->GetSiteInstance(); |
+ EXPECT_EQ(shell()->web_contents()->GetURL(), GURL::EmptyGURL()); |
+ EXPECT_EQ(blank_site_instance->GetSite(), GURL::EmptyGURL()); |
+ rvh_observers.AddObserverToRVH(blank_rvh); |
+ |
+ // Explicit navigation to "about:blank" should use the same SiteInstance and |
+ // RenderViewHost. |
Charlie Reis
2012/08/16 22:28:09
This sort of confuses the issue. By putting any n
nasko
2012/08/16 22:59:23
Done.
|
+ NavigateToURL(shell(), GURL(chrome::kAboutBlankURL)); |
+ EXPECT_EQ(shell()->web_contents()->GetURL(), GURL(chrome::kAboutBlankURL)); |
+ EXPECT_EQ(blank_rvh, shell()->web_contents()->GetRenderViewHost()); |
+ EXPECT_EQ(blank_site_instance, shell()->web_contents()->GetRenderViewHost()-> |
+ GetSiteInstance()); |
+ |
+ // Now navigate to the view-source URL and ensure we got different |
Charlie Reis
2012/08/16 22:28:09
nit: got a
nasko
2012/08/16 22:59:23
Done.
|
+ // SiteInstance and RenderViewHost. |
+ NavigateToURL(shell(), view_source_url); |
+ EXPECT_NE(blank_rvh, shell()->web_contents()->GetRenderViewHost()); |
+ EXPECT_NE(blank_site_instance, shell()->web_contents()-> |
+ GetRenderViewHost()->GetSiteInstance()); |
+ rvh_observers.AddObserverToRVH(shell()->web_contents()->GetRenderViewHost()); |
+ |
// Load a random page and then navigate to view-source: of it. |
// This used to cause two RVH instances for the same SiteInstance, which |
// was a problem. This is no longer the case. |
- GURL navigated_url(test_server()->GetURL("files/title2.html")); |
NavigateToURL(shell(), navigated_url); |
SiteInstance* site_instance1 = shell()->web_contents()-> |
GetRenderViewHost()->GetSiteInstance(); |
- |
- // Observe the newly created render_view_host to make sure it will not leak. |
- RenderViewHostObserverArray rvh_observers; |
rvh_observers.AddObserverToRVH(shell()->web_contents()->GetRenderViewHost()); |
- GURL view_source_url(chrome::kViewSourceScheme + std::string(":") + |
- navigated_url.spec()); |
NavigateToURL(shell(), view_source_url); |
rvh_observers.AddObserverToRVH(shell()->web_contents()->GetRenderViewHost()); |
SiteInstance* site_instance2 = shell()->web_contents()-> |