Index: chrome/browser/sessions/session_restore_browsertest_chromeos.cc |
diff --git a/chrome/browser/sessions/session_restore_browsertest_chromeos.cc b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc |
index de48f66ddc7d65b5485acada0fb9b328f5a30cc7..f769318899ab69010d49e059a46e800c0e872df6 100644 |
--- a/chrome/browser/sessions/session_restore_browsertest_chromeos.cc |
+++ b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc |
@@ -2,6 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "chrome/browser/sessions/session_restore.h" |
+ |
#include <stddef.h> |
#include <list> |
@@ -78,9 +80,16 @@ class SessionRestoreTestChromeOS : public InProcessBrowserTest { |
browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); |
} |
- Profile* profile() { return browser()->profile(); } |
+ Profile* profile() { |
+ if (!profile_) |
+ profile_ = browser()->profile(); |
+ |
+ return profile_; |
+ } |
+ private: |
std::list<Browser*> browser_list_; |
+ Profile* profile_ = nullptr; |
}; |
// Thse tests are in pairs. The PRE_ test creates some browser windows and |
@@ -203,3 +212,50 @@ IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, RestoreMinimized) { |
// they have a browser running instead of just showing them an empty desktop. |
EXPECT_EQ(1u, minimized_count); |
} |
+ |
+// Tests that restoring session windows after crash should keep consistent |
+// minimized window counts (crbug.com/694854). |
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, |
+ PRE_RestoreSessionWindowsAfterCrash) { |
+ // One browser window is always created by default. |
+ ASSERT_TRUE(browser()); |
+ browser()->window()->Minimize(); |
+ |
+ Browser* browser2 = |
+ CreateBrowserWithParams(Browser::CreateParams(profile(), true)); |
+ browser2->window()->Minimize(); |
+ |
+ Browser* browser3 = |
+ CreateBrowserWithParams(Browser::CreateParams(profile(), true)); |
+ browser3->window()->Minimize(); |
+ |
+ EXPECT_TRUE(browser()->window()->IsMinimized()); |
+ EXPECT_TRUE(browser2->window()->IsMinimized()); |
+ EXPECT_TRUE(browser3->window()->IsMinimized()); |
+ |
+ // Do not turn on startup session restore. |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, |
+ RestoreSessionWindowsAfterCrash) { |
+ // By default, there will be one browser window opened. |
+ ASSERT_EQ(1u, BrowserList::GetInstance()->size()); |
+ Browser* default_browser = BrowserList::GetInstance()->GetLastActive(); |
+ |
+ content::WindowedNotificationObserver close_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::Source<Browser>(default_browser)); |
+ // |default_browser| will be closed before session restore of last session. |
+ SessionRestore::RestoreSessionAfterCrash(default_browser); |
+ close_observer.Wait(); |
+ |
+ size_t total_count = 0; |
+ size_t minimized_count = 0; |
+ for (auto* browser : *BrowserList::GetInstance()) { |
+ ++total_count; |
+ if (browser->window()->IsMinimized()) |
+ ++minimized_count; |
+ } |
+ EXPECT_EQ(3u, total_count); |
+ EXPECT_EQ(2u, minimized_count); |
+} |