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" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/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" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/synchronization/waitable_event.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/browser_process.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/profiles/profile_manager.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_backend.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service_test_helper.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_types.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/url_constants.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h" 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/test/base/testing_browser_process.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/test/base/testing_profile_manager.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/sessions/serialized_navigation_entry_test_helper.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/page_state.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using sessions::SerializedNavigationEntry; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using sessions::SerializedNavigationEntryTestHelper; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionServiceTest : public BrowserWithTestWindowTest, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionServiceTest() : window_bounds(0, 1, 2, 3), sync_save_count_(0) {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWithTestWindowTest::SetUp(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch profile_manager_.reset( 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_TRUE(profile_manager_->SetUp()); 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch std::string b = base::Int64ToString(base::Time::Now().ToInternalValue()); 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch TestingProfile* profile = profile_manager_->CreateTestingProfile(b); 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SessionService* session_service = new SessionService(profile); 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch path_ = profile->GetPath(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 62c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(session_service); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window_id, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Upon notification, increment the sync_save_count variable 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Observe(int type, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationSource& source, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(type, chrome::NOTIFICATION_SESSION_SERVICE_SAVED); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_save_count_++; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 80c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(NULL); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWithTestWindowTest::TearDown(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UpdateNavigation( 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SessionID& window_id, 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SessionID& tab_id, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const SerializedNavigationEntry& navigation, 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool select) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->UpdateTabNavigation(window_id, tab_id, navigation); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (select) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetSelectedNavigationIndex( 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_id, tab_id, navigation.index()); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReadWindows(std::vector<SessionWindow*>* windows, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type* active_window_id) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces closing the file. 99c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(NULL); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* session_service = new SessionService(path_); 102c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(session_service); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type* non_null_active_window_id = active_window_id; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type dummy_active_window_id = 0; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!non_null_active_window_id) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) non_null_active_window_id = &dummy_active_window_id; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.ReadWindows(windows, non_null_active_window_id); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Configures the session service with one window with one tab and a single 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. If |pinned_state| is true or |write_always| is true, the 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pinned state of the tab is updated. The session service is then recreated 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the pinned state of the read back tab is returned. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateAndWriteSessionWithOneTab(bool pinned_state, bool write_always) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pinned_state || write_always) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->SetPinnedState(window_id, tab_id, pinned_state); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, windows.size()); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HasFatalFailure()) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, windows[0]->tabs.size()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HasFatalFailure()) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tab->pinned; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateAndWriteSessionWithTwoWindows( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& window2_id, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab1_id, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab2_id, 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav1, 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav2) { 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *nav1 = SerializedNavigationEntryTestHelper::CreateNavigation( 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *nav2 = SerializedNavigationEntryTestHelper::CreateNavigation( 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab1_id, *nav1, true); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window2_bounds(3, 4, 5, 6); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_bounds, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, *nav2, true); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* service() { return helper_.service(); } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window_bounds; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window_id; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sync_save_count_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Path used in testing. 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path_; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionServiceTestHelper helper_; 180e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<TestingProfileManager> profile_manager_; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, Basic) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetOriginalRequestURL( 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL("http://original.request.com"), &nav1); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(window_bounds == windows[0]->bounds); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(Browser::TYPE_TABBED, windows[0]->type); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure we persist post entries. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistPostData) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ClosingTabStaysClosed) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(tab_id.id(), tab2_id.id()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab2_id, 1, false); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab2_id, nav2, true); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window_id, tab2_id, false); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, Pruning) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 6; ++i) { 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry* nav = (i % 2) == 0 ? &nav1 : &nav2; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav->set_index(i); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, *nav, true); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabNavigationPathPrunedFromBack(window_id, tab_id, 3); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We left the selected index at 5, then pruned. When rereading the 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // index should get reset to last valid navigation, which is 2. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 2, 3, *tab); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, tab->navigations.size()); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[1]); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[2]); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, TwoWindows) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows.size()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[1]->selected_tab_index); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[1]->tabs.size()); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* rt1; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* rt2; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (windows[0]->window_id.id() == window_id.id()) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[1]->window_id.id()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_MAXIMIZED, windows[1]->show_state); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt1 = windows[0]->tabs[0]; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt2 = windows[1]->tabs[0]; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[0]->window_id.id()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[1]->window_id.id()); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_MAXIMIZED, windows[0]->show_state); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ui::SHOW_STATE_NORMAL, windows[1]->show_state); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt1 = windows[1]->tabs[0]; 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rt2 = windows[0]->tabs[0]; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = rt1; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab1_id, 0, 0, 1, *tab); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = rt2; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, WindowWithNoTabsGetsPruned) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab1_id, nav1, true); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect window2_bounds(3, 4, 5, 6); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_bounds, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab1_id, 0, 0, 1, *tab); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ClosingWindowDoesntCloseTabs) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(tab_id.id(), tab2_id.id()); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab2_id, 1, false); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab2_id, nav2, true); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosing(window_id); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows[0]->tabs.size()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = windows[0]->tabs[1]; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab2_id, 1, 0, 1, *tab); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 414e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochTEST_F(SessionServiceTest, LockingWindowRemembersAll) { 415e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SessionID window2_id; 416e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SessionID tab1_id; 417e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SessionID tab2_id; 418e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SerializedNavigationEntry nav1; 419e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SerializedNavigationEntry nav2; 420e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 421e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch CreateAndWriteSessionWithTwoWindows( 422e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch window2_id, tab1_id, tab2_id, &nav1, &nav2); 423e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 424e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_TRUE(service()->profile() != NULL); 425e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_TRUE(g_browser_process->profile_manager() != NULL); 426e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ProfileInfoCache& profile_info = 427e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch g_browser_process->profile_manager()->GetProfileInfoCache(); 428e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch size_t profile_index = profile_info.GetIndexOfProfileWithPath( 429e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service()->profile()->GetPath()); 430e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_NE(std::string::npos, profile_index); 431e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch profile_info.SetProfileSigninRequiredAtIndex(profile_index, true); 432e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 433e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service()->WindowClosing(window_id); 434e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service()->WindowClosed(window_id); 435e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service()->WindowClosing(window2_id); 436e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch service()->WindowClosed(window2_id); 437e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 438e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ScopedVector<SessionWindow> windows; 439e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ReadWindows(&(windows.get()), NULL); 440e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 441e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_EQ(2U, windows.size()); 442e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_EQ(1U, windows[0]->tabs.size()); 443e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ASSERT_EQ(1U, windows[1]->tabs.size()); 444e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 445e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosing(window2_id); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window2_id, tab2_id, false); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->WindowClosed(window2_id); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure we don't track popups. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, IgnorePopups) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_POPUP, SessionService::TYPE_NORMAL); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 501c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined (OS_CHROMEOS) 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Makes sure we track apps. Only applicable on chromeos. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreApp) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window2_id.id(), window_id.id()); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowType( 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, Browser::TYPE_POPUP, SessionService::TYPE_APP); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window2_id, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowAppName(window2_id, "TestApp"); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google2.com", "abcd"); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window2_id, tab2_id, nav2, true); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, windows.size()); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0 : 1; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int app_index = tabbed_index == 0 ? 1 : 0; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[tabbed_index]->selected_tab_index); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[tabbed_index]->window_id.id()); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[tabbed_index]->tabs.size()); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[tabbed_index]->tabs[0]; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[app_index]->selected_tab_index); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window2_id.id(), windows[app_index]->window_id.id()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[app_index]->tabs.size()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(windows[app_index]->type == Browser::TYPE_POPUP); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ("TestApp", windows[app_index]->app_name); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = windows[app_index]->tabs[0]; 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, tab->navigations[0]); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined (OS_CHROMEOS) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests pruning from the front. 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PruneFromFront) { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, with the 4th selected. 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, (i == 3)); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune the first two navigations from the front. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 2); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There shouldn't be an app id. 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(windows[0]->tabs[0]->extension_app_id.empty()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should be left with three navigations, the 2nd selected. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, tab->current_navigation_index); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, tab->navigations.size()); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(2)) == 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[0].virtual_url()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(3)) == 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[1].virtual_url()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GURL(base_url + base::IntToString(4)) == 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->navigations[2].virtual_url()); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Prunes from front so that we have no entries. 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PruneToEmpty) { 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, with the 4th selected. 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, (i == 3)); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune the first two navigations from the front. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 5); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, windows.size()); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Don't set the pinned state and make sure the pinned value is false. 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedDefaultsToFalse) { 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(CreateAndWriteSessionWithOneTab(false, false)); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Explicitly set the pinned state to false and make sure we get back false. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedFalseWhenSetToFalse) { 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(CreateAndWriteSessionWithOneTab(false, true)); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Explicitly set the pinned state to true and make sure we get back true. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PinnedTrue) { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(CreateAndWriteSessionWithOneTab(true, true)); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure application extension ids are persisted. 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistApplicationExtensionID) { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string app_id("foo"); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.SetTabExtensionAppID(window_id, tab_id, app_id); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(app_id == windows[0]->tabs[0]->extension_app_id); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check that user agent overrides are persisted. 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, PersistUserAgentOverrides) { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user_agent_override = "Mozilla/5.0 (X11; Linux x86_64) " 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 " 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Safari/535.19"; 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetIsOverridingUserAgent(true, &nav1); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.SetTabUserAgentOverride(window_id, tab_id, user_agent_override); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(user_agent_override == tab->user_agent_override); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the notification for SESSION_SERVICE_SAVED is working properly. 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, SavedSessionNotification) { 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_SESSION_SERVICE_SAVED, 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->Save(); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(sync_save_count_, 1); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure a tab closed by a user gesture is not restored. 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, CloseTabUserGesture) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 728c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 729c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 730c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->TabClosed(window_id, tab_id, true); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(windows.empty()); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies SetWindowBounds maps SHOW_STATE_DEFAULT to SHOW_STATE_NORMAL. 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, DontPersistDefault) { 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "abc"); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetWindowBounds(window_id, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_DEFAULT); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, windows[0]->show_state); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, KeepPostDataWithoutPasswords) { 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a page state representing a HTTP body without posted passwords. 76690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::PageState page_state = 76790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::PageState::CreateForTesting(GURL(), false, "data", NULL); 76890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 76990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a TabNavigation containing page_state and representing a POST 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "title"); 77490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav1); 775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a TabNavigation containing page_state and representing a normal 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2 = 780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://google.com/nopost", "title"); 78290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav2); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav2.set_index(1); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav2, true); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Expected: the page state of both navigations was saved and restored. 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, windows[0]->tabs[0]->navigations.size()); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RemovePostDataWithPasswords) { 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(window_id.id(), tab_id.id()); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a page state representing a HTTP body with posted passwords. 80590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::PageState page_state = 80690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::PageState::CreateForTesting(GURL(), true, "data", NULL); 80790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 80890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a TabNavigation containing page_state and representing a POST 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request with passwords. 810c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1 = 811c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://google.com", "title"); 81390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetPageState(page_state, &nav1); 814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::SetHasPostData(true, &nav1); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.AssertSingleWindowWithSingleTab(windows.get(), 1); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Expected: the HTTP body was removed from the page state of the POST 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation with passwords. 82590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_NE(page_state, windows[0]->tabs[0]->navigations[0].page_state()); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test is only applicable to chromeos. 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies migration of tab/window closed works. 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, CanOpenV1TabClosed) { 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath v1_file_path; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &v1_file_path)); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // v1_session_file contains a tab closed command with the original id. The 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file was generated from ClosingTabStaysClosed. If we successfully processed 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the file we'll have one tab. 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v1_file_path = 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v1_file_path.AppendASCII("sessions").AppendASCII("v1_session_file"); 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_file_path(path_); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_file_path = dest_file_path.AppendASCII("Current Session"); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces closing the file. 843c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(NULL); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::CopyFile(v1_file_path, dest_file_path)); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionService* session_service = new SessionService(path_); 848c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch helper_.SetService(session_service); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.ReadWindows(&(windows.get()), &active_window_id); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, windows.size()); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, windows[0]->tabs.size()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ReplacePendingNavigation) { 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add 5 navigations, some with the same index 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 865c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 866c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i / 2); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ones with index 0, and 2 should have been replaced by 1 and 3. 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, windows[0]->tabs[0]->navigations.size()); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(1)), 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[0].virtual_url()); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(3)), 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[1].virtual_url()); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(4)), 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[2].virtual_url()); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, ReplacePendingNavigationAndPrune) { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string base_url("http://google.com/"); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab_id; 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 5; ++i) { 895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(i), "a"); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(i); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prune all those navigations. 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_.service()->TabNavigationPathPrunedFromFront(window_id, tab_id, 5); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add another navigation to replace the last one. 906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav = 907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_url + base::IntToString(5), "a"); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nav.set_index(4); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav, true); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read back in. 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should still have that last navigation at the end, 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // even though it replaced one that was set before the prune. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs[0]->navigations.size()); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(base_url + base::IntToString(5)), 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows[0]->tabs[0]->navigations[0].virtual_url()); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreActivation1) { 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window_id)); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), &active_window_id); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(window_id.id(), active_window_id); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It's easier to have two separate tests with setup/teardown than to manualy 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reset the state for the different flavors of the test. 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(SessionServiceTest, RestoreActivation2) { 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID window2_id; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab1_id; 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID tab2_id; 952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav1; 953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SerializedNavigationEntry nav2; 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateAndWriteSessionWithTwoWindows( 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_id, tab1_id, tab2_id, &nav1, &nav2); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window_id)); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->ScheduleCommand( 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->CreateSetActiveWindowCommand(window2_id)); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionWindow> windows; 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type active_window_id = 0; 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReadWindows(&(windows.get()), &active_window_id); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(window2_id.id(), active_window_id); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 970a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 971a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Makes sure we don't track blacklisted URLs. 972a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(SessionServiceTest, IgnoreBlacklistedUrls) { 973a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SessionID tab_id; 974a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 975a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntry nav1 = 976a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 977a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "http://google.com", "abc"); 978a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntry nav2 = 979a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 980a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chrome::kChromeUIQuitURL, "quit"); 981a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntry nav3 = 982a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SerializedNavigationEntryTestHelper::CreateNavigation( 983a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chrome::kChromeUIRestartURL, "restart"); 984a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 985a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) helper_.PrepareTabInWindow(window_id, tab_id, 0, true); 986a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav1, true); 987a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav2, true); 988a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) UpdateNavigation(window_id, tab_id, nav3, true); 989a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 990a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ScopedVector<SessionWindow> windows; 991a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ReadWindows(&(windows.get()), NULL); 992a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 993a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 994a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(0, windows[0]->selected_tab_index); 995a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(window_id.id(), windows[0]->window_id.id()); 996a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_EQ(1U, windows[0]->tabs.size()); 997a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 998a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SessionTab* tab = windows[0]->tabs[0]; 999a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); 1000a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) helper_.AssertNavigationEquals(nav1, tab->navigations[0]); 1001a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 10021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Functions used by GetSessionsAndDestroy. 10041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 10051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid OnGotPreviousSession(ScopedVector<SessionWindow> windows, 10071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionID::id_type ignored_active_window) { 10081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FAIL() << "SessionService was destroyed, this shouldn't be reached."; 10091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid PostBackToThread(base::MessageLoop* message_loop, 10121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop* run_loop) { 10131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci message_loop->PostTask(FROM_HERE, 10141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&base::RunLoop::Quit, 10151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(run_loop))); 10161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 10191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that SessionService::GetLastSession() works correctly if the 10211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// SessionService is deleted during processing. To verify the problematic case 10221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// does the following: 10231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 1. Sends a task to the background thread that blocks. 10241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 2. Asks SessionService for the last session commands. This is blocked by 1. 10251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 3. Posts another task to the background thread, this too is blocked by 1. 10261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 4. Deletes SessionService. 10271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 5. Signals the semaphore that 2 and 3 are waiting on, allowing 10281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// GetLastSession() to continue. 10291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 6. runs the message loop, this is quit when the task scheduled in 3 posts 10301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// back to the ui thread to quit the run loop. 10311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The call to get the previous session should never be invoked because the 10321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// SessionService was destroyed before SessionService could process the results. 10331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SessionServiceTest, GetSessionsAndDestroy) { 10341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::CancelableTaskTracker cancelable_task_tracker; 10351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop run_loop; 10361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WaitableEvent event(true, false); 10371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci helper_.RunTaskOnBackendThread(FROM_HERE, 10381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&base::WaitableEvent::Wait, 10391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(&event))); 10401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service()->GetLastSession(base::Bind(&OnGotPreviousSession), 10411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &cancelable_task_tracker); 10421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci helper_.RunTaskOnBackendThread( 10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FROM_HERE, 10441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&PostBackToThread, 10451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(base::MessageLoop::current()), 10461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(&run_loop))); 10471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delete helper_.ReleaseService(); 10481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event.Signal(); 10491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci run_loop.Run(); 10501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1051