diff options
author | mad@chromium.org <mad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-10 15:20:38 +0000 |
---|---|---|
committer | mad@chromium.org <mad@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-10 15:20:38 +0000 |
commit | bf219e9eb433014439ef0f40a722f021e18bc1ca (patch) | |
tree | c0c2a44120f228e732ff82159f0295be395c60d1 /chrome/browser/sessions/session_service_unittest.cc | |
parent | 5dca49ebea4644ca5ca961996af2450876ceb30e (diff) | |
download | chromium_src-bf219e9eb433014439ef0f40a722f021e18bc1ca.zip chromium_src-bf219e9eb433014439ef0f40a722f021e18bc1ca.tar.gz chromium_src-bf219e9eb433014439ef0f40a722f021e18bc1ca.tar.bz2 |
Activate appropriate window from a session restore.
BUG=151979
Review URL: https://chromiumcodereview.appspot.com/10982098
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161116 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sessions/session_service_unittest.cc')
-rw-r--r-- | chrome/browser/sessions/session_service_unittest.cc | 216 |
1 files changed, 175 insertions, 41 deletions
diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc index 3152b3b..dd33e12 100644 --- a/chrome/browser/sessions/session_service_unittest.cc +++ b/chrome/browser/sessions/session_service_unittest.cc @@ -84,13 +84,19 @@ class SessionServiceTest : public BrowserWithTestWindowTest, } } - void ReadWindows(std::vector<SessionWindow*>* windows) { + void ReadWindows(std::vector<SessionWindow*>* windows, + SessionID::id_type* active_window_id) { // Forces closing the file. helper_.set_service(NULL); SessionService* session_service = new SessionService(path_); helper_.set_service(session_service); - helper_.ReadWindows(windows); + + SessionID::id_type* non_null_active_window_id = active_window_id; + SessionID::id_type dummy_active_window_id = 0; + if (!non_null_active_window_id) + non_null_active_window_id = &dummy_active_window_id; + helper_.ReadWindows(windows, non_null_active_window_id); } // Configures the session service with one window with one tab and a single @@ -109,7 +115,7 @@ class SessionServiceTest : public BrowserWithTestWindowTest, helper_.service()->SetPinnedState(window_id, tab_id, pinned_state); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); EXPECT_EQ(1U, windows.size()); if (HasFatalFailure()) @@ -124,6 +130,31 @@ class SessionServiceTest : public BrowserWithTestWindowTest, return tab->pinned; } + void CreateAndWriteSessionWithTwoWindows( + const SessionID& window2_id, + const SessionID& tab1_id, + const SessionID& tab2_id, + TabNavigation* nav1, + TabNavigation* nav2) { + *nav1 = + SessionTypesTestHelper::CreateNavigation("http://google.com", "abc"); + *nav2 = + SessionTypesTestHelper::CreateNavigation("http://google2.com", "abcd"); + + helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); + UpdateNavigation(window_id, tab1_id, *nav1, true); + + const gfx::Rect window2_bounds(3, 4, 5, 6); + service()->SetWindowType( + window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); + service()->SetWindowBounds(window2_id, + window2_bounds, + ui::SHOW_STATE_MAXIMIZED); + helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); + UpdateNavigation(window2_id, tab2_id, *nav2, true); + + } + SessionService* service() { return helper_.service(); } SessionBackend* backend() { return helper_.backend(); } @@ -154,7 +185,7 @@ TEST_F(SessionServiceTest, Basic) { UpdateNavigation(window_id, tab_id, nav1, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_TRUE(window_bounds == windows[0]->bounds); @@ -182,7 +213,7 @@ TEST_F(SessionServiceTest, PersistPostData) { UpdateNavigation(window_id, tab_id, nav1, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); } @@ -205,7 +236,7 @@ TEST_F(SessionServiceTest, ClosingTabStaysClosed) { service()->TabClosed(window_id, tab2_id, false); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -235,7 +266,7 @@ TEST_F(SessionServiceTest, Pruning) { service()->TabNavigationPathPrunedFromBack(window_id, tab_id, 3); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -256,26 +287,14 @@ TEST_F(SessionServiceTest, TwoWindows) { SessionID window2_id; SessionID tab1_id; SessionID tab2_id; + TabNavigation nav1; + TabNavigation nav2; - TabNavigation nav1 = - SessionTypesTestHelper::CreateNavigation("http://google.com", "abc"); - TabNavigation nav2 = - SessionTypesTestHelper::CreateNavigation("http://google2.com", "abcd"); - - helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); - UpdateNavigation(window_id, tab1_id, nav1, true); - - const gfx::Rect window2_bounds(3, 4, 5, 6); - service()->SetWindowType( - window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); - service()->SetWindowBounds(window2_id, - window2_bounds, - ui::SHOW_STATE_MAXIMIZED); - helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); - UpdateNavigation(window2_id, tab2_id, nav2, true); + CreateAndWriteSessionWithTwoWindows( + window2_id, tab1_id, tab2_id, &nav1, &nav2); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(2U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -328,7 +347,7 @@ TEST_F(SessionServiceTest, WindowWithNoTabsGetsPruned) { helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -359,7 +378,7 @@ TEST_F(SessionServiceTest, ClosingWindowDoesntCloseTabs) { service()->WindowClosing(window_id); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -403,7 +422,7 @@ TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { service()->WindowClosed(window2_id); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -443,7 +462,7 @@ TEST_F(SessionServiceTest, IgnorePopups) { UpdateNavigation(window2_id, tab2_id, nav2, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -483,7 +502,7 @@ TEST_F(SessionServiceTest, RestorePopup) { UpdateNavigation(window2_id, tab2_id, nav2, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(2U, windows.size()); int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? @@ -533,7 +552,7 @@ TEST_F(SessionServiceTest, RestoreApp) { UpdateNavigation(window2_id, tab2_id, nav2, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(2U, windows.size()); int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? @@ -557,7 +576,7 @@ TEST_F(SessionServiceTest, RestoreApp) { helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); helper_.AssertNavigationEquals(nav2, tab->navigations[0]); } -#endif +#endif // defined (USE_AURA) // Tests pruning from the front. TEST_F(SessionServiceTest, PruneFromFront) { @@ -580,7 +599,7 @@ TEST_F(SessionServiceTest, PruneFromFront) { // Read back in. ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); ASSERT_EQ(0, windows[0]->selected_tab_index); @@ -623,7 +642,7 @@ TEST_F(SessionServiceTest, PruneToEmpty) { // Read back in. ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(0U, windows.size()); } @@ -657,7 +676,7 @@ TEST_F(SessionServiceTest, PersistApplicationExtensionID) { helper_.SetTabExtensionAppID(window_id, tab_id, app_id); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); EXPECT_TRUE(app_id == windows[0]->tabs[0]->extension_app_id); @@ -680,7 +699,7 @@ TEST_F(SessionServiceTest, PersistUserAgentOverrides) { helper_.SetTabUserAgentOverride(window_id, tab_id, user_agent_override); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); SessionTab* tab = windows[0]->tabs[0]; @@ -711,7 +730,7 @@ TEST_F(SessionServiceTest, CloseTabUserGesture) { service()->TabClosed(window_id, tab_id, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_TRUE(windows.empty()); } @@ -729,7 +748,7 @@ TEST_F(SessionServiceTest, DontPersistDefault) { ui::SHOW_STATE_DEFAULT); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); ASSERT_EQ(1U, windows.size()); EXPECT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); } @@ -768,7 +787,7 @@ TEST_F(SessionServiceTest, KeepPostDataWithoutPasswords) { UpdateNavigation(window_id, tab_id, nav2, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); @@ -803,7 +822,7 @@ TEST_F(SessionServiceTest, RemovePostDataWithPasswords) { UpdateNavigation(window_id, tab_id, nav1, true); ScopedVector<SessionWindow> windows; - ReadWindows(&(windows.get())); + ReadWindows(&(windows.get()), NULL); helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); @@ -834,8 +853,123 @@ TEST_F(SessionServiceTest, CanOpenV1TabClosed) { SessionService* session_service = new SessionService(path_); helper_.set_service(session_service); ScopedVector<SessionWindow> windows; - helper_.ReadWindows(&(windows.get())); + SessionID::id_type active_window_id = 0; + helper_.ReadWindows(&(windows.get()), &active_window_id); ASSERT_EQ(1u, windows.size()); EXPECT_EQ(1u, windows[0]->tabs.size()); } -#endif +#endif // defined(OS_CHROMEOS) + +TEST_F(SessionServiceTest, ReplacePendingNavigation) { + const std::string base_url("http://google.com/"); + SessionID tab_id; + + helper_.PrepareTabInWindow(window_id, tab_id, 0, true); + + // Add 5 navigations, some with the same index + for (int i = 0; i < 5; ++i) { + TabNavigation nav = + SessionTypesTestHelper::CreateNavigation( + base_url + base::IntToString(i), "a"); + nav.set_index(i / 2); + UpdateNavigation(window_id, tab_id, nav, true); + } + + // Read back in. + ScopedVector<SessionWindow> windows; + ReadWindows(&(windows.get()), NULL); + + // The ones with index 0, and 2 should have been replaced by 1 and 3. + ASSERT_EQ(1U, windows.size()); + ASSERT_EQ(1U, windows[0]->tabs.size()); + EXPECT_EQ(3U, windows[0]->tabs[0]->navigations.size()); + EXPECT_EQ(GURL(base_url + base::IntToString(1)), + windows[0]->tabs[0]->navigations[0].virtual_url()); + EXPECT_EQ(GURL(base_url + base::IntToString(3)), + windows[0]->tabs[0]->navigations[1].virtual_url()); + EXPECT_EQ(GURL(base_url + base::IntToString(4)), + windows[0]->tabs[0]->navigations[2].virtual_url()); +} + +TEST_F(SessionServiceTest, ReplacePendingNavigationAndPrune) { + const std::string base_url("http://google.com/"); + SessionID tab_id; + + helper_.PrepareTabInWindow(window_id, tab_id, 0, true); + + for (int i = 0; i < 5; ++i) { + TabNavigation nav = + SessionTypesTestHelper::CreateNavigation( + base_url + base::IntToString(i), "a"); + nav.set_index(i); + UpdateNavigation(window_id, tab_id, nav, true); + } + + // Prune all those navigations. + helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 5); + + // Add another navigation to replace the last one. + TabNavigation nav = + SessionTypesTestHelper::CreateNavigation( + base_url + base::IntToString(5), "a"); + nav.set_index(4); + UpdateNavigation(window_id, tab_id, nav, true); + + // Read back in. + ScopedVector<SessionWindow> windows; + ReadWindows(&(windows.get()), NULL); + + // We should still have that last navigation at the end, + // even though it replaced one that was set before the prune. + ASSERT_EQ(1U, windows.size()); + ASSERT_EQ(1U, windows[0]->tabs.size()); + ASSERT_EQ(1U, windows[0]->tabs[0]->navigations.size()); + EXPECT_EQ(GURL(base_url + base::IntToString(5)), + windows[0]->tabs[0]->navigations[0].virtual_url()); +} + +TEST_F(SessionServiceTest, RestoreActivation1) { + SessionID window2_id; + SessionID tab1_id; + SessionID tab2_id; + TabNavigation nav1; + TabNavigation nav2; + + CreateAndWriteSessionWithTwoWindows( + window2_id, tab1_id, tab2_id, &nav1, &nav2); + + service()->ScheduleCommand( + service()->CreateSetActiveWindowCommand(window2_id)); + service()->ScheduleCommand( + service()->CreateSetActiveWindowCommand(window_id)); + + ScopedVector<SessionWindow> windows; + SessionID::id_type active_window_id = 0; + ReadWindows(&(windows.get()), &active_window_id); + EXPECT_EQ(window_id.id(), active_window_id); +} + +// It's easier to have two separate tests with setup/teardown than to manualy +// reset the state for the different flavors of the test. +TEST_F(SessionServiceTest, RestoreActivation2) { + SessionID window2_id; + SessionID tab1_id; + SessionID tab2_id; + TabNavigation nav1; + TabNavigation nav2; + + CreateAndWriteSessionWithTwoWindows( + window2_id, tab1_id, tab2_id, &nav1, &nav2); + + service()->ScheduleCommand( + service()->CreateSetActiveWindowCommand(window2_id)); + service()->ScheduleCommand( + service()->CreateSetActiveWindowCommand(window_id)); + service()->ScheduleCommand( + service()->CreateSetActiveWindowCommand(window2_id)); + + ScopedVector<SessionWindow> windows; + SessionID::id_type active_window_id = 0; + ReadWindows(&(windows.get()), &active_window_id); + EXPECT_EQ(window2_id.id(), active_window_id); +} |