Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(550)

Unified Diff: chrome/browser/extensions/isolated_app_browsertest.cc

Issue 10600009: Support partitioning of storage contexts based on render_id. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix comments Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698