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

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

Issue 2868983003: Ensure History > Recent Tabs restore preserves window disposition. (Closed)
Patch Set: Remove NOTREACHED(). Created 3 years, 4 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/tab_restore_browsertest.cc
diff --git a/chrome/browser/sessions/tab_restore_browsertest.cc b/chrome/browser/sessions/tab_restore_browsertest.cc
index 7e2dcd4314f4b5fd90bce0244e379856f2270f2a..072af3b8118f895a3d86eaa46a0bc36143234edc 100644
--- a/chrome/browser/sessions/tab_restore_browsertest.cc
+++ b/chrome/browser/sessions/tab_restore_browsertest.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_live_tab_context.h"
#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/find_bar/find_notification_details.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_paths.h"
@@ -422,6 +423,69 @@ IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreIntoSameWindow) {
browser->tab_strip_model()->GetActiveWebContents()->GetURL());
}
+// Open a window with two tabs, close the window, then restore the window.
+// Ensure that the restored window has the expected bounds.
+IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindowBounds) {
+ // Create a browser window with two tabs.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(), url1_, WindowOpenDisposition::CURRENT_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(), url2_, WindowOpenDisposition::NEW_FOREGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+
+ // Create a second browser window.
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(), GURL(chrome::kChromeUINewTabURL),
+ WindowOpenDisposition::NEW_WINDOW,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER);
+ EXPECT_EQ(2u, active_browser_list_->size());
+
+ // Deliberately change the bounds of the first window to something different.
+ gfx::Rect bounds = browser()->window()->GetBounds();
+ bounds.set_width(640);
+ bounds.set_height(480);
+ bounds.Offset(20, 20);
+ browser()->window()->SetBounds(bounds);
+ gfx::Rect bounds2 = browser()->window()->GetBounds();
+ EXPECT_EQ(bounds, bounds2);
+
+ // Close the first window.
+ content::WindowedNotificationObserver close_window_observer(
+ chrome::NOTIFICATION_BROWSER_CLOSED,
+ content::NotificationService::AllSources());
+ chrome::CloseWindow(browser());
+ close_window_observer.Wait();
+ EXPECT_EQ(1u, active_browser_list_->size());
+
+ // Check that the TabRestoreService has the contents of the closed window and
+ // the correct bounds.
+ Browser* browser = GetBrowser(0);
+ sessions::TabRestoreService* service =
+ TabRestoreServiceFactory::GetForProfile(browser->profile());
+ const sessions::TabRestoreService::Entries& entries = service->entries();
+ EXPECT_EQ(1u, entries.size());
+ sessions::TabRestoreService::Entry* entry = entries.front().get();
+ ASSERT_EQ(sessions::TabRestoreService::WINDOW, entry->type);
+ sessions::TabRestoreService::Window* entry_win =
+ static_cast<sessions::TabRestoreService::Window*>(entry);
+ EXPECT_EQ(bounds, entry_win->bounds);
+ auto& tabs = entry_win->tabs;
+ EXPECT_EQ(2u, tabs.size());
+
+ // Restore the window. Ensure that a second window is created, that is has 2
+ // tabs, and that it has the expected bounds.
+ service->RestoreMostRecentEntry(browser->live_tab_context());
+ EXPECT_EQ(2u, active_browser_list_->size());
+ browser = GetBrowser(1);
+ EXPECT_EQ(2, browser->tab_strip_model()->count());
+ // We expect the overridden bounds to the browser window to have been
+ // specified at window creation. The actual bounds of the window itself may
+ // change as the browser refuses to create windows that are offscreen, so will
+ // adjust bounds slightly in some cases.
+ EXPECT_EQ(bounds, browser->override_bounds());
+}
+
// Open a window with two tabs, close both (closing the window), then restore
// one by ID. Guards against regression of crbug.com/622752.
IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreTabFromClosedWindowByID) {

Powered by Google App Engine
This is Rietveld 408576698