| Index: chrome/browser/sessions/better_session_restore_browsertest.cc
|
| diff --git a/chrome/browser/sessions/better_session_restore_browsertest.cc b/chrome/browser/sessions/better_session_restore_browsertest.cc
|
| index 11ea512655390e10e98c5b89dbd7df711f94a002..262f07b4509f15604f1d39aae108d52dab244dce 100644
|
| --- a/chrome/browser/sessions/better_session_restore_browsertest.cc
|
| +++ b/chrome/browser/sessions/better_session_restore_browsertest.cc
|
| @@ -10,9 +10,11 @@
|
| #include "base/prefs/pref_service.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/content_settings/cookie_settings.h"
|
| #include "chrome/browser/infobars/confirm_infobar_delegate.h"
|
| #include "chrome/browser/infobars/infobar_service.h"
|
| +#include "chrome/browser/lifetime/application_lifetime.h"
|
| #include "chrome/browser/prefs/session_startup_pref.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_impl.h"
|
| @@ -97,6 +99,27 @@ net::URLRequestJob* URLRequestFakerForPostRequests(
|
| true);
|
| }
|
|
|
| +class WebContentsCloseObserver : public content::WebContentsObserver {
|
| + public:
|
| + explicit WebContentsCloseObserver(content::WebContents* web_contents)
|
| + : content::WebContentsObserver(web_contents) {}
|
| +
|
| + virtual void WebContentsDestroyed(
|
| + content::WebContents* web_contents) OVERRIDE {
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::UI, FROM_HERE, run_loop_.QuitClosure());
|
| + }
|
| +
|
| + void Wait() {
|
| + run_loop_.Run();
|
| + }
|
| +
|
| + private:
|
| + base::RunLoop run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WebContentsCloseObserver);
|
| +};
|
| +
|
| } // namespace
|
|
|
| class BetterSessionRestoreTest : public InProcessBrowserTest {
|
| @@ -184,7 +207,11 @@ class BetterSessionRestoreTest : public InProcessBrowserTest {
|
| }
|
|
|
| void CheckReloadedPageNotRestored() {
|
| - CheckTitle(browser(), title_storing_);
|
| + CheckReloadedPageNotRestored(browser());
|
| + }
|
| +
|
| + void CheckReloadedPageNotRestored(Browser* browser) {
|
| + CheckTitle(browser, title_storing_);
|
| }
|
|
|
| void CheckTitle(Browser* browser, const string16& expected_title) {
|
| @@ -230,7 +257,12 @@ class BetterSessionRestoreTest : public InProcessBrowserTest {
|
| }
|
|
|
| void CheckFormRestored(bool text_present, bool password_present) {
|
| - CheckReloadedPageRestored();
|
| + CheckFormRestored(browser(), text_present, password_present);
|
| + }
|
| +
|
| + void CheckFormRestored(
|
| + Browser* browser, bool text_present, bool password_present) {
|
| + CheckReloadedPageRestored(browser);
|
| if (text_present) {
|
| EXPECT_TRUE(g_last_upload_bytes.Get().find("posted-text") !=
|
| std::string::npos);
|
| @@ -255,6 +287,26 @@ class BetterSessionRestoreTest : public InProcessBrowserTest {
|
| }
|
| }
|
|
|
| + virtual Browser* RelaunchBrowser(Browser* browser) {
|
| + Profile* profile = browser->profile();
|
| + SessionServiceFactory::GetForProfile(profile)->
|
| + force_browser_not_alive_with_no_windows_ = true;
|
| + content::WindowedNotificationObserver browser_close_observer(
|
| + chrome::NOTIFICATION_BROWSER_CLOSED,
|
| + content::NotificationService::AllSources());
|
| + chrome::StartKeepAlive();
|
| + browser->window()->Close();
|
| + browser_close_observer.Wait();
|
| +
|
| + Browser* new_browser = CreateBrowser(profile);
|
| + chrome::EndKeepAlive();
|
| + content::WebContents* web_contents =
|
| + new_browser->tab_strip_model()->GetActiveWebContents();
|
| + EXPECT_EQ(std::string(content::kAboutBlankURL),
|
| + web_contents->GetURL().spec());
|
| + return new_browser;
|
| + }
|
| +
|
| std::string fake_server_address() {
|
| return fake_server_address_;
|
| }
|
| @@ -284,6 +336,22 @@ class ContinueWhereILeftOffTest : public BetterSessionRestoreTest {
|
| browser()->profile(), SessionStartupPref(SessionStartupPref::LAST));
|
| }
|
|
|
| + protected:
|
| + virtual Browser* RelaunchBrowser(Browser* browser) OVERRIDE {
|
| + const GURL url =
|
| + browser->tab_strip_model()->GetActiveWebContents()->GetURL();
|
| + content::WindowedNotificationObserver session_restore_observer(
|
| + chrome::NOTIFICATION_SESSION_RESTORE_DONE,
|
| + content::NotificationService::AllSources());
|
| + Browser* new_browser = BetterSessionRestoreTest::RelaunchBrowser(browser);
|
| + session_restore_observer.Wait();
|
| + WebContentsCloseObserver tab_close_observer(
|
| + new_browser->tab_strip_model()->GetActiveWebContents());
|
| + new_browser->tab_strip_model()->GetActiveWebContents()->Close();
|
| + tab_close_observer.Wait();
|
| + return new_browser;
|
| + }
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ContinueWhereILeftOffTest);
|
| };
|
|
|
| @@ -360,6 +428,44 @@ IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PostWithPassword) {
|
| CheckFormRestored(false, false);
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, SessionCookiesBrowserClose) {
|
| + // Set the startup preference to "continue where I left off" and visit a page
|
| + // which stores a session cookie.
|
| + StoreDataWithPage("session_cookies.html");
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + // The browsing session will be continued; just wait for the page to reload
|
| + // and check the stored data.
|
| + CheckReloadedPageRestored(new_browser);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest,
|
| + CookiesClearedOnBrowserClose) {
|
| + StoreDataWithPage("cookies.html");
|
| + // Normally cookies are restored.
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + CheckReloadedPageRestored(new_browser);
|
| + // ... but not if the content setting is set to clear on exit.
|
| + CookieSettings::Factory::GetForProfile(new_browser->profile())->
|
| + SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
|
| + new_browser = RelaunchBrowser(new_browser);
|
| + CheckReloadedPageNotRestored(new_browser);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest, PostBrowserClose) {
|
| + PostFormWithPage("post.html", false);
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + CheckFormRestored(new_browser, true, false);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ContinueWhereILeftOffTest,
|
| + PostWithPasswordBrowserClose) {
|
| + PostFormWithPage("post_with_password.html", true);
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + CheckReloadedPageRestored(new_browser);
|
| + // The form data contained passwords, so it's removed completely.
|
| + CheckFormRestored(new_browser, false, false);
|
| +}
|
| +
|
| class RestartTest : public BetterSessionRestoreTest {
|
| public:
|
| RestartTest() { }
|
| @@ -530,3 +636,25 @@ IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, CookiesClearedOnExit) {
|
| web_contents->GetURL().spec());
|
| StoreDataWithPage("local_storage.html");
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, SessionCookiesBrowserClose) {
|
| + StoreDataWithPage("session_cookies.html");
|
| + // When we navigate to the page again, it doens't see the data previously
|
| + // stored.
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + StoreDataWithPage(new_browser, "session_cookies.html");
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(NoSessionRestoreTest, CookiesClearedOnBrowserClose) {
|
| + StoreDataWithPage("cookies.html");
|
| +
|
| + // Normally cookies are restored.
|
| + Browser* new_browser = RelaunchBrowser(browser());
|
| + NavigateAndCheckStoredData(new_browser, "cookies.html");
|
| +
|
| + // ... but not if the content setting is set to clear on exit.
|
| + CookieSettings::Factory::GetForProfile(new_browser->profile())->
|
| + SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
|
| + new_browser = RelaunchBrowser(new_browser);
|
| + StoreDataWithPage(new_browser, "local_storage.html");
|
| +}
|
|
|