Index: chrome/browser/extensions/isolated_app_browsertest.cc |
diff --git a/chrome/browser/extensions/isolated_app_browsertest.cc b/chrome/browser/extensions/isolated_app_browsertest.cc |
index 46d063702be311a8b90c46a11cdcf9533cc8d849..45f0258d2628cc8edcaf01b5a29a394f0ea4acb2 100644 |
--- a/chrome/browser/extensions/isolated_app_browsertest.cc |
+++ b/chrome/browser/extensions/isolated_app_browsertest.cc |
@@ -22,6 +22,9 @@ |
using content::NavigationController; |
using content::WebContents; |
+using content::RenderViewHost; |
+using ui_test_utils::ExecuteJavaScript; |
+using ui_test_utils::ExecuteJavaScriptAndExtractString; |
namespace { |
@@ -59,6 +62,13 @@ class IsolatedAppTest : public ExtensionBrowserTest { |
// Tests that cookies set within an isolated app are not visible to normal |
// pages or other apps. |
+// |
+// TODO(ajwong): Also test what happens if an app spans multiple sites in its |
+// extent. These origins should also be isolated, but still have origin-based |
+// separation as you would expect. |
+// |
+// TODO(ajwong): How do we test sessionStorage? Install app and watch |
+// sessionStorage get wiped away during reload? |
Charlie Reis
2012/07/02 23:21:23
Normally session storage exists for the lifetime o
awong
2012/07/09 20:37:43
I've amended the comment. FYI, session storage is
|
IN_PROC_BROWSER_TEST_F(IsolatedAppTest, CookieIsolation) { |
host_resolver()->AddRule("*", "127.0.0.1"); |
ASSERT_TRUE(test_server()->Start()); |
@@ -119,7 +129,7 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, CookieIsolation) { |
EXPECT_FALSE(HasCookie(tab3, "nonAppFrame")); |
// Check that isolation persists even if the tab crashes and is reloaded. |
- chrome::SelectNumberedTab(browser(), 1); |
+ chrome::SelectNumberedTab(browser(), 0); |
ui_test_utils::CrashTab(tab1); |
ui_test_utils::WindowedNotificationObserver observer( |
content::NOTIFICATION_LOAD_STOP, |
@@ -130,6 +140,30 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, CookieIsolation) { |
EXPECT_TRUE(HasCookie(tab1, "app1=3")); |
EXPECT_FALSE(HasCookie(tab1, "app2")); |
EXPECT_FALSE(HasCookie(tab1, "normalPage")); |
+ |
+ // Check that tabs see cannot each others localStorage even though they are |
Charlie Reis
2012/07/02 23:21:23
nit: other's
awong
2012/07/09 20:37:43
Done.
|
+ // in the same origin. |
+ RenderViewHost* app1_rvh = tab1->GetRenderViewHost(); |
+ RenderViewHost* app2_rvh = tab2->GetRenderViewHost(); |
+ RenderViewHost* non_app_rvh = tab3->GetRenderViewHost(); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ app1_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app1');")); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ app2_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app2');")); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ non_app_rvh, L"", |
+ L"window.localStorage.setItem('testdata', 'ls_normal');")); |
+ |
+ std::string result; |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ app1_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_app1", result); |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ app2_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_app2", result); |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ non_app_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_normal", result); |
} |
// Ensure that cookies are not isolated if the isolated apps are not installed. |
@@ -168,6 +202,33 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, NoCookieIsolationWithoutApp) { |
EXPECT_TRUE(HasCookie(browser()->GetWebContentsAt(2), "app1=3")); |
EXPECT_TRUE(HasCookie(browser()->GetWebContentsAt(2), "app2=4")); |
EXPECT_TRUE(HasCookie(browser()->GetWebContentsAt(2), "nonAppFrame=6")); |
+ |
+ // Check that all tabs share the same localStorage if they have the same |
+ // origin. |
+ RenderViewHost* app1_rvh = |
+ browser()->GetWebContentsAt(0)->GetRenderViewHost(); |
+ RenderViewHost* app2_rvh = |
+ browser()->GetWebContentsAt(1)->GetRenderViewHost(); |
+ RenderViewHost* non_app_rvh = |
+ browser()->GetWebContentsAt(2)->GetRenderViewHost(); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ app1_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app1');")); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ app2_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app2');")); |
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
+ non_app_rvh, L"", |
+ L"window.localStorage.setItem('testdata', 'ls_normal');")); |
+ |
+ std::string result; |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ app1_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_normal", result); |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ app2_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_normal", result); |
+ ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
+ non_app_rvh, L"", L"window.localStorage.getItem('testdata');", &result)); |
+ EXPECT_EQ("ls_normal", result); |
} |
// Tests that isolated apps processes do not render top-level non-app pages. |