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/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
12 #include "chrome/browser/content_settings/cookie_settings.h" | 12 #include "chrome/browser/content_settings/cookie_settings.h" |
13 #include "chrome/browser/prefs/pref_service.h" | 13 #include "chrome/browser/prefs/pref_service.h" |
14 #include "chrome/browser/prefs/session_startup_pref.h" | 14 #include "chrome/browser/prefs/session_startup_pref.h" |
15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
17 #include "chrome/browser/ui/browser_list.h" | 17 #include "chrome/browser/ui/browser_list.h" |
18 #include "chrome/browser/ui/browser_tabstrip.h" | 18 #include "chrome/browser/ui/browser_tabstrip.h" |
19 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
20 #include "chrome/common/content_settings.h" | 20 #include "chrome/common/content_settings.h" |
21 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
22 #include "chrome/test/base/in_process_browser_test.h" | 22 #include "chrome/test/base/in_process_browser_test.h" |
23 #include "chrome/test/base/ui_test_utils.h" | 23 #include "chrome/test/base/ui_test_utils.h" |
24 #include "content/public/browser/web_contents.h" | 24 #include "content/public/browser/web_contents.h" |
| 25 #include "content/public/common/url_constants.h" |
25 #include "content/public/test/browser_test_utils.h" | 26 #include "content/public/test/browser_test_utils.h" |
26 #include "net/base/net_util.h" | 27 #include "net/base/net_util.h" |
27 #include "net/base/upload_bytes_element_reader.h" | 28 #include "net/base/upload_bytes_element_reader.h" |
28 #include "net/base/upload_data_stream.h" | 29 #include "net/base/upload_data_stream.h" |
29 #include "net/url_request/url_request.h" | 30 #include "net/url_request/url_request.h" |
30 #include "net/url_request/url_request_filter.h" | 31 #include "net/url_request/url_request_filter.h" |
31 #include "net/url_request/url_request_test_job.h" | 32 #include "net/url_request/url_request_test_job.h" |
32 | 33 |
33 namespace { | 34 namespace { |
34 | 35 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 content::TitleWatcher title_watcher(web_contents, title_storing_); | 125 content::TitleWatcher title_watcher(web_contents, title_storing_); |
125 title_watcher.AlsoWaitForTitle(title_pass_); | 126 title_watcher.AlsoWaitForTitle(title_pass_); |
126 title_watcher.AlsoWaitForTitle(title_error_write_failed_); | 127 title_watcher.AlsoWaitForTitle(title_error_write_failed_); |
127 title_watcher.AlsoWaitForTitle(title_error_empty_); | 128 title_watcher.AlsoWaitForTitle(title_error_empty_); |
128 ui_test_utils::NavigateToURL( | 129 ui_test_utils::NavigateToURL( |
129 browser(), GURL(fake_server_address_ + test_path_ + filename)); | 130 browser(), GURL(fake_server_address_ + test_path_ + filename)); |
130 string16 final_title = title_watcher.WaitAndGetTitle(); | 131 string16 final_title = title_watcher.WaitAndGetTitle(); |
131 EXPECT_EQ(title_storing_, final_title); | 132 EXPECT_EQ(title_storing_, final_title); |
132 } | 133 } |
133 | 134 |
| 135 void NavigateAndCheckStoredData(const std::string& filename) { |
| 136 // Navigate to a page which has previously stored data; check that the |
| 137 // stored data can be accessed. |
| 138 content::WebContents* web_contents = |
| 139 chrome::GetActiveWebContents(browser()); |
| 140 content::TitleWatcher title_watcher(web_contents, title_pass_); |
| 141 title_watcher.AlsoWaitForTitle(title_storing_); |
| 142 title_watcher.AlsoWaitForTitle(title_error_write_failed_); |
| 143 title_watcher.AlsoWaitForTitle(title_error_empty_); |
| 144 ui_test_utils::NavigateToURL( |
| 145 browser(), GURL(fake_server_address_ + test_path_ + filename)); |
| 146 string16 final_title = title_watcher.WaitAndGetTitle(); |
| 147 EXPECT_EQ(title_pass_, final_title); |
| 148 } |
| 149 |
134 void CheckReloadedPageRestored() { | 150 void CheckReloadedPageRestored() { |
135 CheckTitle(title_pass_); | 151 CheckTitle(title_pass_); |
136 } | 152 } |
137 | 153 |
138 void CheckReloadedPageNotRestored() { | 154 void CheckReloadedPageNotRestored() { |
139 CheckTitle(title_storing_); | 155 CheckTitle(title_storing_); |
140 } | 156 } |
141 | 157 |
142 void CheckTitle(const string16& expected_title) { | 158 void CheckTitle(const string16& expected_title) { |
143 content::WebContents* web_contents = chrome::GetWebContentsAt(browser(), 0); | 159 content::WebContents* web_contents = chrome::GetWebContentsAt(browser(), 0); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 std::string test_path_; | 227 std::string test_path_; |
212 string16 title_pass_; | 228 string16 title_pass_; |
213 string16 title_storing_; | 229 string16 title_storing_; |
214 string16 title_error_write_failed_; | 230 string16 title_error_write_failed_; |
215 string16 title_error_empty_; | 231 string16 title_error_empty_; |
216 | 232 |
217 DISALLOW_COPY_AND_ASSIGN(BetterSessionRestoreTest); | 233 DISALLOW_COPY_AND_ASSIGN(BetterSessionRestoreTest); |
218 }; | 234 }; |
219 | 235 |
220 class ContinueWhereILeftOffTest : public BetterSessionRestoreTest { | 236 class ContinueWhereILeftOffTest : public BetterSessionRestoreTest { |
| 237 public: |
| 238 virtual void SetUpOnMainThread() OVERRIDE { |
| 239 SessionStartupPref::SetStartupPref( |
| 240 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); |
| 241 } |
221 }; | 242 }; |
222 | 243 |
223 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionCookies) { | 244 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionCookies) { |
224 // Set the startup preference to "continue where I left off" and visit a page | 245 // Set the startup preference to "continue where I left off" and visit a page |
225 // which stores a session cookie. | 246 // which stores a session cookie. |
226 SessionStartupPref::SetStartupPref( | |
227 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
228 StoreDataWithPage("session_cookies.html"); | 247 StoreDataWithPage("session_cookies.html"); |
229 } | 248 } |
230 | 249 |
231 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionCookies) { | 250 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionCookies) { |
232 // The browsing session will be continued; just wait for the page to reload | 251 // The browsing session will be continued; just wait for the page to reload |
233 // and check the stored data. | 252 // and check the stored data. |
234 CheckReloadedPageRestored(); | 253 CheckReloadedPageRestored(); |
235 } | 254 } |
236 | 255 |
237 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionStorage) { | 256 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_SessionStorage) { |
238 SessionStartupPref::SetStartupPref( | |
239 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
240 StoreDataWithPage("session_storage.html"); | 257 StoreDataWithPage("session_storage.html"); |
241 } | 258 } |
242 | 259 |
243 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionStorage) { | 260 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionStorage) { |
244 CheckReloadedPageRestored(); | 261 CheckReloadedPageRestored(); |
245 } | 262 } |
246 | 263 |
247 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, | 264 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, |
248 PRE_PRE_LocalStorageClearedOnExit) { | 265 PRE_PRE_LocalStorageClearedOnExit) { |
249 SessionStartupPref::SetStartupPref( | |
250 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
251 StoreDataWithPage("local_storage.html"); | 266 StoreDataWithPage("local_storage.html"); |
252 } | 267 } |
253 | 268 |
254 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, | 269 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, |
255 PRE_LocalStorageClearedOnExit) { | 270 PRE_LocalStorageClearedOnExit) { |
256 // Normally localStorage is restored. | 271 // Normally localStorage is restored. |
257 CheckReloadedPageRestored(); | 272 CheckReloadedPageRestored(); |
258 // ... but not if it's set to clear on exit. | 273 // ... but not if it's set to clear on exit. |
259 CookieSettings::Factory::GetForProfile(browser()->profile())-> | 274 CookieSettings::Factory::GetForProfile(browser()->profile())-> |
260 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); | 275 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); |
261 } | 276 } |
262 | 277 |
263 // Flaky on Linux: http://crbug.com/163096 | 278 // Flaky on Linux: http://crbug.com/163096 |
264 #if defined(OS_LINUX) | 279 #if defined(OS_LINUX) |
265 #define MAYBE_LocalStorageClearedOnExit DISABLED_LocalStorageClearedOnExit | 280 #define MAYBE_LocalStorageClearedOnExit DISABLED_LocalStorageClearedOnExit |
266 #else | 281 #else |
267 #define MAYBE_LocalStorageClearedOnExit LocalStorageClearedOnExit | 282 #define MAYBE_LocalStorageClearedOnExit LocalStorageClearedOnExit |
268 #endif | 283 #endif |
269 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, | 284 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, |
270 MAYBE_LocalStorageClearedOnExit) { | 285 MAYBE_LocalStorageClearedOnExit) { |
271 CheckReloadedPageNotRestored(); | 286 CheckReloadedPageNotRestored(); |
272 } | 287 } |
273 | 288 |
274 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, | 289 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, |
275 PRE_PRE_CookiesClearedOnExit) { | 290 PRE_PRE_CookiesClearedOnExit) { |
276 SessionStartupPref::SetStartupPref( | |
277 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
278 StoreDataWithPage("cookies.html"); | 291 StoreDataWithPage("cookies.html"); |
279 } | 292 } |
280 | 293 |
281 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_CookiesClearedOnExit) { | 294 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_CookiesClearedOnExit) { |
282 // Normally cookies are restored. | 295 // Normally cookies are restored. |
283 CheckReloadedPageRestored(); | 296 CheckReloadedPageRestored(); |
284 // ... but not if the content setting is set to clear on exit. | 297 // ... but not if the content setting is set to clear on exit. |
285 CookieSettings::Factory::GetForProfile(browser()->profile())-> | 298 CookieSettings::Factory::GetForProfile(browser()->profile())-> |
286 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); | 299 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); |
287 } | 300 } |
288 | 301 |
289 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, CookiesClearedOnExit) { | 302 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, CookiesClearedOnExit) { |
290 CheckReloadedPageNotRestored(); | 303 CheckReloadedPageNotRestored(); |
291 } | 304 } |
292 | 305 |
293 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_Post) { | 306 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_Post) { |
294 SessionStartupPref::SetStartupPref( | |
295 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
296 PostFormWithPage("post.html", false); | 307 PostFormWithPage("post.html", false); |
297 } | 308 } |
298 | 309 |
299 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, Post) { | 310 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, Post) { |
300 CheckFormRestored(true, false); | 311 CheckFormRestored(true, false); |
301 } | 312 } |
302 | 313 |
303 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_PostWithPassword) { | 314 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PRE_PostWithPassword) { |
304 SessionStartupPref::SetStartupPref( | |
305 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); | |
306 PostFormWithPage("post_with_password.html", true); | 315 PostFormWithPage("post_with_password.html", true); |
307 } | 316 } |
308 | 317 |
309 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PostWithPassword) { | 318 IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PostWithPassword) { |
310 CheckReloadedPageRestored(); | 319 CheckReloadedPageRestored(); |
311 // The form data contained passwords, so it's removed completely. | 320 // The form data contained passwords, so it's removed completely. |
312 CheckFormRestored(false, false); | 321 CheckFormRestored(false, false); |
313 } | 322 } |
314 | 323 |
315 class RestartTest : public BetterSessionRestoreTest { | 324 class RestartTest : public BetterSessionRestoreTest { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 | 394 |
386 IN_PROC_BROWSER_TEST_F(RestartTest, PRE_PostWithPassword) { | 395 IN_PROC_BROWSER_TEST_F(RestartTest, PRE_PostWithPassword) { |
387 PostFormWithPage("post_with_password.html", true); | 396 PostFormWithPage("post_with_password.html", true); |
388 Restart(); | 397 Restart(); |
389 } | 398 } |
390 | 399 |
391 IN_PROC_BROWSER_TEST_F(RestartTest, PostWithPassword) { | 400 IN_PROC_BROWSER_TEST_F(RestartTest, PostWithPassword) { |
392 // The form data contained passwords, so it's removed completely. | 401 // The form data contained passwords, so it's removed completely. |
393 CheckFormRestored(false, false); | 402 CheckFormRestored(false, false); |
394 } | 403 } |
| 404 |
| 405 // These tests ensure that the Better Session Restore features are not triggered |
| 406 // when they shouldn't be. |
| 407 class NoSessionRestoreTest : public BetterSessionRestoreTest { |
| 408 public: |
| 409 virtual void SetUpOnMainThread() OVERRIDE { |
| 410 SessionStartupPref::SetStartupPref( |
| 411 browser()->profile(), SessionStartupPref(SessionStartupPref::DEFAULT)); |
| 412 } |
| 413 }; |
| 414 |
| 415 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_SessionCookies) { |
| 416 StoreDataWithPage("session_cookies.html"); |
| 417 } |
| 418 |
| 419 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, SessionCookies) { |
| 420 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 421 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 422 // When we navigate to the page again, it doens't see the data previously |
| 423 // stored. |
| 424 StoreDataWithPage("session_cookies.html"); |
| 425 } |
| 426 |
| 427 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_SessionStorage) { |
| 428 StoreDataWithPage("session_storage.html"); |
| 429 } |
| 430 |
| 431 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, SessionStorage) { |
| 432 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 433 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 434 StoreDataWithPage("session_storage.html"); |
| 435 } |
| 436 |
| 437 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, |
| 438 PRE_PRE_LocalStorageClearedOnExit) { |
| 439 StoreDataWithPage("local_storage.html"); |
| 440 } |
| 441 |
| 442 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_LocalStorageClearedOnExit) { |
| 443 // Normally localStorage is persisted. |
| 444 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 445 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 446 NavigateAndCheckStoredData("local_storage.html"); |
| 447 // ... but not if it's set to clear on exit. |
| 448 CookieSettings::Factory::GetForProfile(browser()->profile())-> |
| 449 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); |
| 450 } |
| 451 |
| 452 // See flakiness comment above. |
| 453 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, MAYBE_LocalStorageClearedOnExit) { |
| 454 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 455 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 456 StoreDataWithPage("local_storage.html"); |
| 457 } |
| 458 |
| 459 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_PRE_CookiesClearedOnExit) { |
| 460 StoreDataWithPage("cookies.html"); |
| 461 } |
| 462 |
| 463 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, PRE_CookiesClearedOnExit) { |
| 464 // Normally cookies are restored. |
| 465 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 466 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 467 NavigateAndCheckStoredData("cookies.html"); |
| 468 // ... but not if the content setting is set to clear on exit. |
| 469 CookieSettings::Factory::GetForProfile(browser()->profile())-> |
| 470 SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); |
| 471 } |
| 472 |
| 473 IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, CookiesClearedOnExit) { |
| 474 content::WebContents* web_contents = chrome::GetActiveWebContents(browser()); |
| 475 EXPECT_EQ(std::string(chrome::kAboutBlankURL), web_contents->GetURL().spec()); |
| 476 StoreDataWithPage("local_storage.html"); |
| 477 } |
OLD | NEW |