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 "chrome/browser/sessions/session_service_test_helper.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_backend.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_types.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/sessions/serialized_navigation_entry_test_helper.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/sessions/session_id.h" 14c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "content/public/browser/browser_thread.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::Time; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionServiceTestHelper::SessionServiceTestHelper() {} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionServiceTestHelper::SessionServiceTestHelper(SessionService* service) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : service_(service) {} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionServiceTestHelper::~SessionServiceTestHelper() {} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::PrepareTabInWindow(const SessionID& window_id, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab_id, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visual_index, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool select) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetTabWindow(window_id, tab_id); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetTabIndexInWindow(window_id, tab_id, visual_index); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (select) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetSelectedTabInWindow(window_id, visual_index); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::SetTabExtensionAppID( 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& window_id, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab_id, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_app_id) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetTabExtensionAppID(window_id, tab_id, extension_app_id); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::SetTabUserAgentOverride( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& window_id, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionID& tab_id, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user_agent_override) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->SetTabUserAgentOverride(window_id, tab_id, user_agent_override); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::SetForceBrowserNotAliveWithNoWindows( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force_browser_not_alive_with_no_windows) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->force_browser_not_alive_with_no_windows_ = 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) force_browser_not_alive_with_no_windows; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Be sure and null out service to force closing the file. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::ReadWindows( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<SessionWindow*>* windows, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionID::id_type* active_window_id) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Time last_time; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<SessionCommand> read_commands; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) backend()->ReadLastSessionCommandsImpl(&(read_commands.get())); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service()->RestoreSessionFromCommands( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_commands.get(), windows, active_window_id); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SessionServiceTestHelper::AssertTabEquals(const SessionID& window_id, 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SessionID& tab_id, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visual_index, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nav_index, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t nav_count, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionTab& session_tab) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(window_id.id(), session_tab.window_id.id()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(tab_id.id(), session_tab.tab_id.id()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertTabEquals(visual_index, nav_index, nav_count, session_tab); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::AssertTabEquals( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int visual_index, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int nav_index, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t nav_count, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SessionTab& session_tab) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(visual_index, session_tab.tab_visual_index); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nav_index, session_tab.current_navigation_index); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(nav_count, session_tab.navigations.size()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(sky): nuke this and change to call directly into 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// SerializedNavigationEntryTestHelper. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::AssertNavigationEquals( 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const sessions::SerializedNavigationEntry& expected, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const sessions::SerializedNavigationEntry& actual) { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sessions::SerializedNavigationEntryTestHelper::ExpectNavigationEquals( 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected, actual); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionServiceTestHelper::AssertSingleWindowWithSingleTab( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<SessionWindow*>& windows, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t nav_count) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, windows.size()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, windows[0]->tabs.size()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(nav_count, windows[0]->tabs[0]->navigations.size()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionBackend* SessionServiceTestHelper::backend() { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return service_->backend(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 109c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 110c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochvoid SessionServiceTestHelper::SetService(SessionService* service) { 111c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch service_.reset(service); 112c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Execute IO tasks posted by the SessionService. 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunAllBlockingPoolTasksUntilIdle(); 114c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch} 115c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SessionServiceTestHelper::RunTaskOnBackendThread( 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const tracked_objects::Location& from_here, 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Closure& task) { 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_->RunTaskOnBackendThread(from_here, task); 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 121