OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/stringprintf.h" | 5 #include "base/stringprintf.h" |
6 #include "base/utf_string_conversions.h" | 6 #include "base/utf_string_conversions.h" |
7 #include "chrome/browser/automation/automation_util.h" | 7 #include "chrome/browser/automation/automation_util.h" |
8 #include "chrome/browser/extensions/extension_apitest.h" | 8 #include "chrome/browser/extensions/extension_apitest.h" |
9 #include "chrome/browser/extensions/extension_host.h" | 9 #include "chrome/browser/extensions/extension_host.h" |
10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "net/base/mock_host_resolver.h" | 23 #include "net/base/mock_host_resolver.h" |
24 | 24 |
25 using content::ExecuteJavaScript; | 25 using content::ExecuteJavaScript; |
26 using content::ExecuteJavaScriptAndExtractString; | 26 using content::ExecuteJavaScriptAndExtractString; |
27 using content::NavigationController; | 27 using content::NavigationController; |
28 using content::WebContents; | 28 using content::WebContents; |
29 using content::RenderViewHost; | 29 using content::RenderViewHost; |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 std::string WrapForJavascriptAndExtract(const char* javascript_expression) { | 33 std::wstring WrapForJavascriptAndExtract( |
34 return std::string("window.domAutomationController.send(") + | 34 const wchar_t* javascript_expression) { |
35 javascript_expression + ")"; | 35 return std::wstring(L"window.domAutomationController.send(") + |
| 36 javascript_expression + L")"; |
36 } | 37 } |
37 | 38 |
38 class IsolatedAppTest : public ExtensionBrowserTest { | 39 class IsolatedAppTest : public ExtensionBrowserTest { |
39 public: | 40 public: |
40 // Returns whether the given tab's current URL has the given cookie. | 41 // Returns whether the given tab's current URL has the given cookie. |
41 bool WARN_UNUSED_RESULT HasCookie(WebContents* contents, std::string cookie) { | 42 bool WARN_UNUSED_RESULT HasCookie(WebContents* contents, std::string cookie) { |
42 int value_size; | 43 int value_size; |
43 std::string actual_cookie; | 44 std::string actual_cookie; |
44 automation_util::GetCookies(contents->GetURL(), contents, &value_size, | 45 automation_util::GetCookies(contents->GetURL(), contents, &value_size, |
45 &actual_cookie); | 46 &actual_cookie); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 | 120 |
120 // Using JavaScript to navigate to app2 page, | 121 // Using JavaScript to navigate to app2 page, |
121 // after the non_app page has finished loading. | 122 // after the non_app page has finished loading. |
122 content::WindowedNotificationObserver observer1( | 123 content::WindowedNotificationObserver observer1( |
123 content::NOTIFICATION_LOAD_STOP, | 124 content::NOTIFICATION_LOAD_STOP, |
124 content::Source<NavigationController>( | 125 content::Source<NavigationController>( |
125 &chrome::GetActiveWebContents(browser())->GetController())); | 126 &chrome::GetActiveWebContents(browser())->GetController())); |
126 std::string script = base::StringPrintf( | 127 std::string script = base::StringPrintf( |
127 "document.location.href=\"%s\";", | 128 "document.location.href=\"%s\";", |
128 base_url.Resolve("app2/main.html").spec().c_str()); | 129 base_url.Resolve("app2/main.html").spec().c_str()); |
129 EXPECT_TRUE(ExecuteJavaScript(rvh, "", script)); | 130 EXPECT_TRUE(ExecuteJavaScript(rvh, L"", ASCIIToWide(script))); |
130 observer1.Wait(); | 131 observer1.Wait(); |
131 | 132 |
132 // This kind of navigation should not replace previous navigation entry. | 133 // This kind of navigation should not replace previous navigation entry. |
133 EXPECT_TRUE(chrome::CanGoBack(browser())); | 134 EXPECT_TRUE(chrome::CanGoBack(browser())); |
134 chrome::GoBack(browser(), CURRENT_TAB); | 135 chrome::GoBack(browser(), CURRENT_TAB); |
135 EXPECT_FALSE(chrome::CanGoBack(browser())); | 136 EXPECT_FALSE(chrome::CanGoBack(browser())); |
136 } | 137 } |
137 | 138 |
138 // Tests that cookies set within an isolated app are not visible to normal | 139 // Tests that cookies set within an isolated app are not visible to normal |
139 // pages or other apps. | 140 // pages or other apps. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 ASSERT_TRUE(GetInstalledApp(tab0)); | 176 ASSERT_TRUE(GetInstalledApp(tab0)); |
176 ASSERT_TRUE(GetInstalledApp(tab1)); | 177 ASSERT_TRUE(GetInstalledApp(tab1)); |
177 ASSERT_TRUE(!GetInstalledApp(tab2)); | 178 ASSERT_TRUE(!GetInstalledApp(tab2)); |
178 | 179 |
179 // Check that tabs see cannot each other's localStorage even though they are | 180 // Check that tabs see cannot each other's localStorage even though they are |
180 // in the same origin. | 181 // in the same origin. |
181 RenderViewHost* app1_rvh = tab0->GetRenderViewHost(); | 182 RenderViewHost* app1_rvh = tab0->GetRenderViewHost(); |
182 RenderViewHost* app2_rvh = tab1->GetRenderViewHost(); | 183 RenderViewHost* app2_rvh = tab1->GetRenderViewHost(); |
183 RenderViewHost* non_app_rvh = tab2->GetRenderViewHost(); | 184 RenderViewHost* non_app_rvh = tab2->GetRenderViewHost(); |
184 ASSERT_TRUE(ExecuteJavaScript( | 185 ASSERT_TRUE(ExecuteJavaScript( |
185 app1_rvh, "", "window.localStorage.setItem('testdata', 'ls_app1');")); | 186 app1_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app1');")); |
186 ASSERT_TRUE(ExecuteJavaScript( | 187 ASSERT_TRUE(ExecuteJavaScript( |
187 app2_rvh, "", "window.localStorage.setItem('testdata', 'ls_app2');")); | 188 app2_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app2');")); |
188 ASSERT_TRUE(ExecuteJavaScript( | 189 ASSERT_TRUE(ExecuteJavaScript( |
189 non_app_rvh, | 190 non_app_rvh, L"", |
190 "", | 191 L"window.localStorage.setItem('testdata', 'ls_normal');")); |
191 "window.localStorage.setItem('testdata', 'ls_normal');")); | |
192 | 192 |
193 const std::string& kRetrieveLocalStorage = | 193 const std::wstring& kRetrieveLocalStorage = |
194 WrapForJavascriptAndExtract( | 194 WrapForJavascriptAndExtract( |
195 "window.localStorage.getItem('testdata') || 'badval'"); | 195 L"window.localStorage.getItem('testdata') || 'badval'"); |
196 std::string result; | 196 std::string result; |
197 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 197 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
198 app1_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 198 app1_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
199 EXPECT_EQ("ls_app1", result); | 199 EXPECT_EQ("ls_app1", result); |
200 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 200 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
201 app2_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 201 app2_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
202 EXPECT_EQ("ls_app2", result); | 202 EXPECT_EQ("ls_app2", result); |
203 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 203 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
204 non_app_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 204 non_app_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
205 EXPECT_EQ("ls_normal", result); | 205 EXPECT_EQ("ls_normal", result); |
206 | 206 |
207 // Check that each tab sees its own cookie. | 207 // Check that each tab sees its own cookie. |
208 EXPECT_TRUE(HasCookie(tab0, "app1=3")); | 208 EXPECT_TRUE(HasCookie(tab0, "app1=3")); |
209 EXPECT_TRUE(HasCookie(tab1, "app2=4")); | 209 EXPECT_TRUE(HasCookie(tab1, "app2=4")); |
210 EXPECT_TRUE(HasCookie(tab2, "normalPage=5")); | 210 EXPECT_TRUE(HasCookie(tab2, "normalPage=5")); |
211 | 211 |
212 // Check that app1 tab cannot see the other cookies. | 212 // Check that app1 tab cannot see the other cookies. |
213 EXPECT_FALSE(HasCookie(tab0, "app2")); | 213 EXPECT_FALSE(HasCookie(tab0, "app2")); |
214 EXPECT_FALSE(HasCookie(tab0, "normalPage")); | 214 EXPECT_FALSE(HasCookie(tab0, "normalPage")); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 | 281 |
282 // Check that all tabs share the same localStorage if they have the same | 282 // Check that all tabs share the same localStorage if they have the same |
283 // origin. | 283 // origin. |
284 RenderViewHost* app1_rvh = | 284 RenderViewHost* app1_rvh = |
285 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(); | 285 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(); |
286 RenderViewHost* app2_rvh = | 286 RenderViewHost* app2_rvh = |
287 chrome::GetWebContentsAt(browser(), 1)->GetRenderViewHost(); | 287 chrome::GetWebContentsAt(browser(), 1)->GetRenderViewHost(); |
288 RenderViewHost* non_app_rvh = | 288 RenderViewHost* non_app_rvh = |
289 chrome::GetWebContentsAt(browser(), 2)->GetRenderViewHost(); | 289 chrome::GetWebContentsAt(browser(), 2)->GetRenderViewHost(); |
290 ASSERT_TRUE(ExecuteJavaScript( | 290 ASSERT_TRUE(ExecuteJavaScript( |
291 app1_rvh, "", "window.localStorage.setItem('testdata', 'ls_app1');")); | 291 app1_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app1');")); |
292 ASSERT_TRUE(ExecuteJavaScript( | 292 ASSERT_TRUE(ExecuteJavaScript( |
293 app2_rvh, "", "window.localStorage.setItem('testdata', 'ls_app2');")); | 293 app2_rvh, L"", L"window.localStorage.setItem('testdata', 'ls_app2');")); |
294 ASSERT_TRUE(ExecuteJavaScript( | 294 ASSERT_TRUE(ExecuteJavaScript( |
295 non_app_rvh, | 295 non_app_rvh, L"", |
296 "", | 296 L"window.localStorage.setItem('testdata', 'ls_normal');")); |
297 "window.localStorage.setItem('testdata', 'ls_normal');")); | |
298 | 297 |
299 const std::string& kRetrieveLocalStorage = | 298 const std::wstring& kRetrieveLocalStorage = |
300 WrapForJavascriptAndExtract("window.localStorage.getItem('testdata')"); | 299 WrapForJavascriptAndExtract(L"window.localStorage.getItem('testdata')"); |
301 std::string result; | 300 std::string result; |
302 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 301 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
303 app1_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 302 app1_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
304 EXPECT_EQ("ls_normal", result); | 303 EXPECT_EQ("ls_normal", result); |
305 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 304 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
306 app2_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 305 app2_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
307 EXPECT_EQ("ls_normal", result); | 306 EXPECT_EQ("ls_normal", result); |
308 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 307 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
309 non_app_rvh, "", kRetrieveLocalStorage.c_str(), &result)); | 308 non_app_rvh, L"", kRetrieveLocalStorage.c_str(), &result)); |
310 EXPECT_EQ("ls_normal", result); | 309 EXPECT_EQ("ls_normal", result); |
311 } | 310 } |
312 | 311 |
313 // Tests that subresource and media requests use the app's cookie store. | 312 // Tests that subresource and media requests use the app's cookie store. |
314 // See http://crbug.com/141172. | 313 // See http://crbug.com/141172. |
315 IN_PROC_BROWSER_TEST_F(IsolatedAppTest, SubresourceCookieIsolation) { | 314 IN_PROC_BROWSER_TEST_F(IsolatedAppTest, SubresourceCookieIsolation) { |
316 host_resolver()->AddRule("*", "127.0.0.1"); | 315 host_resolver()->AddRule("*", "127.0.0.1"); |
317 ASSERT_TRUE(test_server()->Start()); | 316 ASSERT_TRUE(test_server()->Start()); |
318 | 317 |
319 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app1"))); | 318 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app1"))); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 replace_host.SetHostStr(host_str); | 448 replace_host.SetHostStr(host_str); |
450 base_url = base_url.ReplaceComponents(replace_host); | 449 base_url = base_url.ReplaceComponents(replace_host); |
451 | 450 |
452 // Enter some state into sessionStorage three times on the same origin, but | 451 // Enter some state into sessionStorage three times on the same origin, but |
453 // for three URLs that correspond to app1, app2, and a non-isolated site. | 452 // for three URLs that correspond to app1, app2, and a non-isolated site. |
454 ui_test_utils::NavigateToURLWithDisposition( | 453 ui_test_utils::NavigateToURLWithDisposition( |
455 browser(), base_url.Resolve("app1/main.html"), | 454 browser(), base_url.Resolve("app1/main.html"), |
456 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 455 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
457 ASSERT_TRUE(ExecuteJavaScript( | 456 ASSERT_TRUE(ExecuteJavaScript( |
458 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 457 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
459 "", | 458 L"", |
460 "window.sessionStorage.setItem('testdata', 'ss_app1');")); | 459 L"window.sessionStorage.setItem('testdata', 'ss_app1');")); |
461 | 460 |
462 ui_test_utils::NavigateToURLWithDisposition( | 461 ui_test_utils::NavigateToURLWithDisposition( |
463 browser(), base_url.Resolve("app2/main.html"), | 462 browser(), base_url.Resolve("app2/main.html"), |
464 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 463 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
465 ASSERT_TRUE(ExecuteJavaScript( | 464 ASSERT_TRUE(ExecuteJavaScript( |
466 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 465 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
467 "", | 466 L"", |
468 "window.sessionStorage.setItem('testdata', 'ss_app2');")); | 467 L"window.sessionStorage.setItem('testdata', 'ss_app2');")); |
469 | 468 |
470 ui_test_utils::NavigateToURLWithDisposition( | 469 ui_test_utils::NavigateToURLWithDisposition( |
471 browser(), base_url.Resolve("non_app/main.html"), | 470 browser(), base_url.Resolve("non_app/main.html"), |
472 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 471 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
473 ASSERT_TRUE(ExecuteJavaScript( | 472 ASSERT_TRUE(ExecuteJavaScript( |
474 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 473 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
475 "", | 474 L"", |
476 "window.sessionStorage.setItem('testdata', 'ss_normal');")); | 475 L"window.sessionStorage.setItem('testdata', 'ss_normal');")); |
477 | 476 |
478 // Now, ensure that the sessionStorage is correctly partitioned, and persists | 477 // Now, ensure that the sessionStorage is correctly partitioned, and persists |
479 // when we navigate around all over the dang place. | 478 // when we navigate around all over the dang place. |
480 const std::string& kRetrieveSessionStorage = | 479 const std::wstring& kRetrieveSessionStorage = |
481 WrapForJavascriptAndExtract( | 480 WrapForJavascriptAndExtract( |
482 "window.sessionStorage.getItem('testdata') || 'badval'"); | 481 L"window.sessionStorage.getItem('testdata') || 'badval'"); |
483 std::string result; | 482 std::string result; |
484 ui_test_utils::NavigateToURLWithDisposition( | 483 ui_test_utils::NavigateToURLWithDisposition( |
485 browser(), base_url.Resolve("app1/main.html"), | 484 browser(), base_url.Resolve("app1/main.html"), |
486 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 485 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
487 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 486 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
488 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 487 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
489 "", kRetrieveSessionStorage.c_str(), &result)); | 488 L"", kRetrieveSessionStorage.c_str(), &result)); |
490 EXPECT_EQ("ss_app1", result); | 489 EXPECT_EQ("ss_app1", result); |
491 | 490 |
492 ui_test_utils::NavigateToURLWithDisposition( | 491 ui_test_utils::NavigateToURLWithDisposition( |
493 browser(), base_url.Resolve("app2/main.html"), | 492 browser(), base_url.Resolve("app2/main.html"), |
494 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 493 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
495 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 494 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
496 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 495 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
497 "", kRetrieveSessionStorage.c_str(), &result)); | 496 L"", kRetrieveSessionStorage.c_str(), &result)); |
498 EXPECT_EQ("ss_app2", result); | 497 EXPECT_EQ("ss_app2", result); |
499 | 498 |
500 ui_test_utils::NavigateToURLWithDisposition( | 499 ui_test_utils::NavigateToURLWithDisposition( |
501 browser(), base_url.Resolve("non_app/main.html"), | 500 browser(), base_url.Resolve("non_app/main.html"), |
502 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 501 CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
503 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( | 502 ASSERT_TRUE(ExecuteJavaScriptAndExtractString( |
504 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), | 503 chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(), |
505 "", kRetrieveSessionStorage.c_str(), &result)); | 504 L"", kRetrieveSessionStorage.c_str(), &result)); |
506 EXPECT_EQ("ss_normal", result); | 505 EXPECT_EQ("ss_normal", result); |
507 } | 506 } |
OLD | NEW |