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

Unified Diff: chrome/browser/sessions/better_session_restore_browsertest.cc

Issue 25414005: Clear session-only data when all browser windows are closed. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 2 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/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");
+}
« no previous file with comments | « no previous file | chrome/browser/sessions/session_data_deleter.h » ('j') | chrome/browser/sessions/session_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698