Index: chrome/browser/extensions/api/tabs/tabs_test.cc |
diff --git a/chrome/browser/extensions/api/tabs/tabs_test.cc b/chrome/browser/extensions/api/tabs/tabs_test.cc |
index 55dd8156623ca832e07dea5de04a97c3bd3c6864..da3b858dfc6e7974dd378ed13ee2068f53a197ee 100644 |
--- a/chrome/browser/extensions/api/tabs/tabs_test.cc |
+++ b/chrome/browser/extensions/api/tabs/tabs_test.cc |
@@ -45,6 +45,7 @@ |
#include "content/public/common/page_zoom.h" |
#include "content/public/common/url_constants.h" |
#include "content/public/test/browser_test_utils.h" |
+#include "content/public/test/test_navigation_observer.h" |
#include "extensions/browser/api_test_utils.h" |
#include "extensions/browser/app_window/app_window.h" |
#include "extensions/browser/app_window/app_window_registry.h" |
@@ -2149,10 +2150,10 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TemporaryAddressSpoof) { |
EXPECT_EQ(url, second_web_contents->GetVisibleURL()); |
} |
-// Window created by chrome.windows.create should be in the same SiteInstance |
-// and BrowsingInstance as the opener - this is a regression test for |
+// Window created by chrome.windows.create should be in the same |
+// BrowsingInstance as the opener - this is a regression test for |
// https://crbug.com/597750. |
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowsCreateVsSiteInstance) { |
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowsCreateVsBrowsingInstance) { |
const extensions::Extension* extension = |
LoadExtension(test_data_dir_.AppendASCII("../simple_with_file")); |
ASSERT_TRUE(extension); |
@@ -2175,20 +2176,42 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowsCreateVsSiteInstance) { |
ASSERT_TRUE(content::WaitForLoadStop(new_contents)); |
} |
+ // Navigate the old and the new tab to a web URL. |
+ ASSERT_TRUE(StartEmbeddedTestServer()); |
+ GURL web_url1 = embedded_test_server()->GetURL("/title1.html"); |
+ GURL web_url2 = embedded_test_server()->GetURL("/title2.html"); |
+ { |
+ content::TestNavigationObserver nav_observer(new_contents, 1); |
+ ASSERT_TRUE(content::ExecuteScript( |
+ new_contents, "window.location = '" + web_url1.spec() + "';")); |
+ nav_observer.Wait(); |
+ } |
+ { |
+ content::TestNavigationObserver nav_observer(old_contents, 1); |
+ ASSERT_TRUE(content::ExecuteScript( |
+ old_contents, "window.location = '" + web_url2.spec() + "';")); |
+ nav_observer.Wait(); |
+ } |
+ EXPECT_EQ(web_url1, new_contents->GetMainFrame()->GetLastCommittedURL()); |
+ EXPECT_EQ(web_url2, old_contents->GetMainFrame()->GetLastCommittedURL()); |
+ |
// Verify that the old and new tab are in the same process and SiteInstance. |
Charlie Reis
2017/06/05 21:06:28
nit: Remove "and SiteInstance" if we aren't checki
Łukasz Anforowicz
2017/06/05 22:06:54
Done.
|
- // Note: both test assertions are important - one observed failure mode was |
- // having the same process, but different SiteInstance. |
EXPECT_EQ(old_contents->GetMainFrame()->GetProcess(), |
new_contents->GetMainFrame()->GetProcess()); |
- EXPECT_EQ(old_contents->GetMainFrame()->GetSiteInstance(), |
- new_contents->GetMainFrame()->GetSiteInstance()); |
- |
- // Verify that the |new_contents| doesn't have a |window.opener| set. |
- bool window_opener_cast_to_bool = true; |
- EXPECT_TRUE(ExecuteScriptAndExtractBool( |
- new_contents, "window.domAutomationController.send(!!window.opener)", |
- &window_opener_cast_to_bool)); |
- EXPECT_FALSE(window_opener_cast_to_bool); |
+ |
+ // Verify the old and new contents are in the same browsing instance. |
Charlie Reis
2017/06/05 21:06:28
nit: BrowsingInstance
Łukasz Anforowicz
2017/06/05 22:06:54
Done.
|
+ EXPECT_TRUE( |
+ old_contents->GetMainFrame()->GetSiteInstance()->IsRelatedSiteInstance( |
+ new_contents->GetMainFrame()->GetSiteInstance())); |
+ |
+ // Verify that the |new_contents| has |window.opener| set. |
+ std::string location_of_opener; |
+ EXPECT_TRUE(ExecuteScriptAndExtractString( |
+ new_contents, |
+ "window.domAutomationController.send(window.opener.location.href)", |
+ &location_of_opener)); |
+ EXPECT_EQ(old_contents->GetMainFrame()->GetLastCommittedURL().spec(), |
+ location_of_opener); |
// Verify that |new_contents| can find |old_contents| using window.open/name. |
std::string location_of_other_window; |