session_service_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_backend.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service_test_helper.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_types.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/sessions/serialized_navigation_entry_test_helper.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/WebKit/Source/Platform/chromium/public/WebHTTPBody.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/glue_serialize.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using sessions::SerializedNavigationEntry; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using sessions::SerializedNavigationEntryTestHelper; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionServiceTest : public BrowserWithTestWindowTest, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionServiceTest() : window_bounds(0, 1, 2, 3), sync_save_count_(0) {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWithTestWindowTest::SetUp(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string b = base::Int64ToString(base::Time::Now().ToInternalValue()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_ = temp_dir_.path().Append(FILE_PATH_LITERAL("SessionTestDirs")); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CreateDirectory(path_)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_ = path_.AppendASCII(b); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* session_service = new SessionService(path_); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(session_service); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window_id, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Upon notification, increment the sync_save_count variable 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Observe(int type, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(type, chrome::NOTIFICATION_SESSION_SERVICE_SAVED); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_save_count_++; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(NULL); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWithTestWindowTest::TearDown(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateNavigation( 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SessionID& window_id, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SessionID& tab_id, 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SerializedNavigationEntry& navigation, 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool select) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->UpdateTabNavigation(window_id, tab_id, navigation); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (select) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetSelectedNavigationIndex( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_id, tab_id, navigation.index()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReadWindows(std::vector<SessionWindow*>* windows, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type* active_window_id) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces closing the file. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(NULL); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* session_service = new SessionService(path_); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(session_service); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type* non_null_active_window_id = active_window_id; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type dummy_active_window_id = 0; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!non_null_active_window_id) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_null_active_window_id = &dummy_active_window_id; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.ReadWindows(windows, non_null_active_window_id); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Configures the session service with one window with one tab and a single 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. If |pinned_state| is true or |write_always| is true, the 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pinned state of the tab is updated. The session service is then recreated 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the pinned state of the read back tab is returned. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateAndWriteSessionWithOneTab(bool pinned_state, bool write_always) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pinned_state || write_always) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->SetPinnedState(window_id, tab_id, pinned_state); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, windows.size()); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HasFatalFailure()) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, windows[0]->tabs.size()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HasFatalFailure()) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tab->pinned; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateAndWriteSessionWithTwoWindows( 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& window2_id, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab1_id, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab2_id, 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav1, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav2) { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *nav1 = SerializedNavigationEntryTestHelper::CreateNavigation( 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *nav2 = SerializedNavigationEntryTestHelper::CreateNavigation( 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab1_id, *nav1, true); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window2_bounds(3, 4, 5, 6); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_bounds, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, *nav2, true); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* service() { return helper_.service(); } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionBackend* backend() { return helper_.backend(); } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window_bounds; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window_id; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sync_save_count_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Path used in testing. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionServiceTestHelper helper_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, Basic) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetOriginalRequestURL( 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL("http://original.request.com"), &nav1); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(window_bounds == windows[0]->bounds); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(Browser::TYPE_TABBED, windows[0]->type); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure we persist post entries. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistPostData) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ClosingTabStaysClosed) { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(tab_id.id(), tab2_id.id()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab2_id, 1, false); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab2_id, nav2, true); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window_id, tab2_id, false); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, Pruning) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 6; ++i) { 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav = (i % 2) == 0 ? &nav1 : &nav2; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav->set_index(i); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, *nav, true); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabNavigationPathPrunedFromBack(window_id, tab_id, 3); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We left the selected index at 5, then pruned. When rereading the 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // index should get reset to last valid navigation, which is 2. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 2, 3, *tab); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, tab->navigations.size()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[1]); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[2]); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, TwoWindows) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows.size()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[1]->selected_tab_index); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[1]->tabs.size()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* rt1; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* rt2; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (windows[0]->window_id.id() == window_id.id()) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[1]->window_id.id()); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_MAXIMIZED, windows[1]->show_state); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt1 = windows[0]->tabs[0]; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt2 = windows[1]->tabs[0]; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[0]->window_id.id()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[1]->window_id.id()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_MAXIMIZED, windows[0]->show_state); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_NORMAL, windows[1]->show_state); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt1 = windows[1]->tabs[0]; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt2 = windows[0]->tabs[0]; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = rt1; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab1_id, 0, 0, 1, *tab); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = rt2; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, WindowWithNoTabsGetsPruned) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab1_id, nav1, true); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window2_bounds(3, 4, 5, 6); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_bounds, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab1_id, 0, 0, 1, *tab); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ClosingWindowDoesntCloseTabs) { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(tab_id.id(), tab2_id.id()); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab2_id, 1, false); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab2_id, nav2, true); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosing(window_id); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows[0]->tabs.size()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = windows[0]->tabs[1]; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab2_id, 1, 0, 1, *tab); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosing(window2_id); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window2_id, tab2_id, false); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosed(window2_id); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure we don't track popups. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, IgnorePopups) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_defaults::kRestorePopups) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; // This test is only applicable if popups aren't restored. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_POPUP, SessionService::TYPE_NORMAL); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure we track popups. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestorePopup) { 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!browser_defaults::kRestorePopups) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; // This test is only applicable if popups are restored. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_POPUP, SessionService::TYPE_NORMAL); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows.size()); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0 : 1; 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int popup_index = tabbed_index == 0 ? 1 : 0; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[tabbed_index]->selected_tab_index); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[tabbed_index]->window_id.id()); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[tabbed_index]->tabs.size()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[tabbed_index]->tabs[0]; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[popup_index]->selected_tab_index); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[popup_index]->window_id.id()); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[popup_index]->tabs.size()); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = windows[popup_index]->tabs[0]; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined (OS_CHROMEOS) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Makes sure we track apps. Only applicable on chromeos. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreApp) { 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_POPUP, SessionService::TYPE_APP); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowAppName(window2_id, "TestApp"); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows.size()); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0 : 1; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int app_index = tabbed_index == 0 ? 1 : 0; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[tabbed_index]->selected_tab_index); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[tabbed_index]->window_id.id()); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[tabbed_index]->tabs.size()); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[tabbed_index]->tabs[0]; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[app_index]->selected_tab_index); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[app_index]->window_id.id()); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[app_index]->tabs.size()); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(windows[app_index]->type == Browser::TYPE_POPUP); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("TestApp", windows[app_index]->app_name); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = windows[app_index]->tabs[0]; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined (OS_CHROMEOS) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests pruning from the front. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PruneFromFront) { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, with the 4th selected. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, (i == 3)); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune the first two navigations from the front. 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 2); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There shouldn't be an app id. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(windows[0]->tabs[0]->extension_app_id.empty()); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should be left with three navigations, the 2nd selected. 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, tab->current_navigation_index); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, tab->navigations.size()); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(2)) == 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[0].virtual_url()); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(3)) == 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[1].virtual_url()); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(4)) == 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[2].virtual_url()); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Prunes from front so that we have no entries. 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PruneToEmpty) { 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, with the 4th selected. 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, (i == 3)); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune the first two navigations from the front. 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 5); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, windows.size()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Don't set the pinned state and make sure the pinned value is false. 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedDefaultsToFalse) { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(CreateAndWriteSessionWithOneTab(false, false)); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Explicitly set the pinned state to false and make sure we get back false. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedFalseWhenSetToFalse) { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(CreateAndWriteSessionWithOneTab(false, true)); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Explicitly set the pinned state to true and make sure we get back true. 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedTrue) { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CreateAndWriteSessionWithOneTab(true, true)); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure application extension ids are persisted. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistApplicationExtensionID) { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string app_id("foo"); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.SetTabExtensionAppID(window_id, tab_id, app_id); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(app_id == windows[0]->tabs[0]->extension_app_id); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check that user agent overrides are persisted. 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistUserAgentOverrides) { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user_agent_override = "Mozilla/5.0 (X11; Linux x86_64) " 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 " 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Safari/535.19"; 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetIsOverridingUserAgent(true, &nav1); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.SetTabUserAgentOverride(window_id, tab_id, user_agent_override); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(user_agent_override == tab->user_agent_override); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the notification for SESSION_SERVICE_SAVED is working properly. 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, SavedSessionNotification) { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_SESSION_SERVICE_SAVED, 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->Save(); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(sync_save_count_, 1); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure a tab closed by a user gesture is not restored. 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, CloseTabUserGesture) { 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window_id, tab_id, true); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(windows.empty()); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies SetWindowBounds maps SHOW_STATE_DEFAULT to SHOW_STATE_NORMAL. 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, DontPersistDefault) { 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window_id, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_DEFAULT); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, KeepPostDataWithoutPasswords) { 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a content state representing a HTTP body without posted passwords. 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebHTTPBody http_body; 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_body.initialize(); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char char_data[] = "data"; 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_body.appendData(WebKit::WebData(char_data, sizeof(char_data)-1)); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebHistoryItem history_item; 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_item.initialize(); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_item.setHTTPBody(http_body); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_state = webkit_glue::HistoryItemToString(history_item); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a TabNavigation containing content_state and representing a POST 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "title"); 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav1); 800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a TabNavigation containing content_state and representing a normal 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://google.com/nopost", "title"); 807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav2); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav2.set_index(1); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav2, true); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected: the content state of both navigations was saved and restored. 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, windows[0]->tabs[0]->navigations.size()); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RemovePostDataWithPasswords) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a content state representing a HTTP body with posted passwords. 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebHTTPBody http_body; 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_body.initialize(); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char char_data[] = "data"; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_body.appendData(WebKit::WebData(char_data, sizeof(char_data)-1)); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_body.setContainsPasswordData(true); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebHistoryItem history_item; 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_item.initialize(); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_item.setHTTPBody(http_body); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string content_state = webkit_glue::HistoryItemToString(history_item); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a TabNavigation containing content_state and representing a POST 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request with passwords. 842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "title"); 845c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetContentState(content_state, &nav1); 846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expected: the HTTP body was removed from the content state of the POST 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation with passwords. 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(content_state, windows[0]->tabs[0]->navigations[0].content_state()); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is only applicable to chromeos. 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies migration of tab/window closed works. 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, CanOpenV1TabClosed) { 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath v1_file_path; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &v1_file_path)); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // v1_session_file contains a tab closed command with the original id. The 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file was generated from ClosingTabStaysClosed. If we successfully processed 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the file we'll have one tab. 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v1_file_path = 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v1_file_path.AppendASCII("sessions").AppendASCII("v1_session_file"); 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_file_path(path_); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_file_path = dest_file_path.AppendASCII("Current Session"); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces closing the file. 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(NULL); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CopyFile(v1_file_path, dest_file_path)); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* session_service = new SessionService(path_); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.set_service(session_service); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.ReadWindows(&(windows.get()), &active_window_id); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, windows.size()); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, windows[0]->tabs.size()); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ReplacePendingNavigation) { 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, some with the same index 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i / 2); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ones with index 0, and 2 should have been replaced by 1 and 3. 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, windows[0]->tabs[0]->navigations.size()); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(1)), 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[0].virtual_url()); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(3)), 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[1].virtual_url()); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(4)), 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[2].virtual_url()); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ReplacePendingNavigationAndPrune) { 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune all those navigations. 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 5); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add another navigation to replace the last one. 938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(5), "a"); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(4); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should still have that last navigation at the end, 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // even though it replaced one that was set before the prune. 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs[0]->navigations.size()); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(5)), 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[0].virtual_url()); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreActivation1) { 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window_id)); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), &active_window_id); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(window_id.id(), active_window_id); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It's easier to have two separate tests with setup/teardown than to manualy 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reset the state for the different flavors of the test. 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreActivation2) { 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window_id)); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), &active_window_id); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(window2_id.id(), active_window_id); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1002