172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sessions/session_service_test_helper.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sessions/session_backend.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sessions/session_id.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sessions/session_service.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sessions/session_types.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::Time;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSessionServiceTestHelper::SessionServiceTestHelper() {}
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSessionServiceTestHelper::SessionServiceTestHelper(SessionService* service)
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    : service_(service) {}
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSessionServiceTestHelper::~SessionServiceTestHelper() {}
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::RestoreSessionFromCommands(
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::vector<SessionCommand*>& commands,
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<SessionWindow*>* valid_windows) {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  service()->RestoreSessionFromCommands(commands, valid_windows);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::PrepareTabInWindow(const SessionID& window_id,
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                  const SessionID& tab_id,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                  int visual_index,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                  bool select) {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  service()->SetTabWindow(window_id, tab_id);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  service()->SetTabIndexInWindow(window_id, tab_id, visual_index);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (select)
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    service()->SetSelectedTabInWindow(window_id, visual_index);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::SetTabExtensionAppID(
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const SessionID& window_id,
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const SessionID& tab_id,
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::string& extension_app_id) {
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  service()->SetTabExtensionAppID(window_id, tab_id, extension_app_id);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Be sure and null out service to force closing the file.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::ReadWindows(
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<SessionWindow*>* windows) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time last_time;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedVector<SessionCommand> read_commands;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  backend()->ReadLastSessionCommandsImpl(&(read_commands.get()));
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RestoreSessionFromCommands(read_commands.get(), windows);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::AssertTabEquals(SessionID& window_id,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               SessionID& tab_id,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               int visual_index,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               int nav_index,
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               size_t nav_count,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               const SessionTab& session_tab) {
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(window_id.id(), session_tab.window_id.id());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(tab_id.id(), session_tab.tab_id.id());
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AssertTabEquals(visual_index, nav_index, nav_count, session_tab);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::AssertTabEquals(
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int visual_index,
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int nav_index,
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    size_t nav_count,
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const SessionTab& session_tab) {
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(visual_index, session_tab.tab_visual_index);
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(nav_index, session_tab.current_navigation_index);
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(nav_count, session_tab.navigations.size());
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::AssertNavigationEquals(
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const TabNavigation& expected,
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const TabNavigation& actual) {
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(expected.virtual_url() == actual.virtual_url());
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected.referrer(), actual.referrer());
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected.title(), actual.title());
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected.state(), actual.state());
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected.transition(), actual.transition());
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(expected.type_mask(), actual.type_mask());
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SessionServiceTestHelper::AssertSingleWindowWithSingleTab(
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const std::vector<SessionWindow*>& windows,
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    size_t nav_count) {
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1U, windows.size());
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1U, windows[0]->tabs.size());
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(nav_count, windows[0]->tabs[0]->navigations.size());
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSessionBackend* SessionServiceTestHelper::backend() {
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return service_->backend();
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
98