1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sessions/session_service_test_helper.h"
6
7#include "base/memory/scoped_vector.h"
8#include "chrome/browser/sessions/session_backend.h"
9#include "chrome/browser/sessions/session_id.h"
10#include "chrome/browser/sessions/session_service.h"
11#include "chrome/browser/sessions/session_types.h"
12#include "components/sessions/serialized_navigation_entry_test_helper.h"
13#include "content/public/browser/browser_thread.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16using base::Time;
17
18SessionServiceTestHelper::SessionServiceTestHelper() {}
19
20SessionServiceTestHelper::SessionServiceTestHelper(SessionService* service)
21    : service_(service) {}
22
23SessionServiceTestHelper::~SessionServiceTestHelper() {}
24
25void SessionServiceTestHelper::PrepareTabInWindow(const SessionID& window_id,
26                                                  const SessionID& tab_id,
27                                                  int visual_index,
28                                                  bool select) {
29  service()->SetTabWindow(window_id, tab_id);
30  service()->SetTabIndexInWindow(window_id, tab_id, visual_index);
31  if (select)
32    service()->SetSelectedTabInWindow(window_id, visual_index);
33}
34
35void SessionServiceTestHelper::SetTabExtensionAppID(
36    const SessionID& window_id,
37    const SessionID& tab_id,
38    const std::string& extension_app_id) {
39  service()->SetTabExtensionAppID(window_id, tab_id, extension_app_id);
40}
41
42void SessionServiceTestHelper::SetTabUserAgentOverride(
43    const SessionID& window_id,
44    const SessionID& tab_id,
45    const std::string& user_agent_override) {
46  service()->SetTabUserAgentOverride(window_id, tab_id, user_agent_override);
47}
48
49void SessionServiceTestHelper::SetForceBrowserNotAliveWithNoWindows(
50    bool force_browser_not_alive_with_no_windows) {
51  service()->force_browser_not_alive_with_no_windows_ =
52      force_browser_not_alive_with_no_windows;
53}
54
55// Be sure and null out service to force closing the file.
56void SessionServiceTestHelper::ReadWindows(
57    std::vector<SessionWindow*>* windows,
58    SessionID::id_type* active_window_id) {
59  Time last_time;
60  ScopedVector<SessionCommand> read_commands;
61  backend()->ReadLastSessionCommandsImpl(&(read_commands.get()));
62  service()->RestoreSessionFromCommands(
63      read_commands.get(), windows, active_window_id);
64}
65
66void SessionServiceTestHelper::AssertTabEquals(SessionID& window_id,
67                                               SessionID& tab_id,
68                                               int visual_index,
69                                               int nav_index,
70                                               size_t nav_count,
71                                               const SessionTab& session_tab) {
72  EXPECT_EQ(window_id.id(), session_tab.window_id.id());
73  EXPECT_EQ(tab_id.id(), session_tab.tab_id.id());
74  AssertTabEquals(visual_index, nav_index, nav_count, session_tab);
75}
76
77void SessionServiceTestHelper::AssertTabEquals(
78    int visual_index,
79    int nav_index,
80    size_t nav_count,
81    const SessionTab& session_tab) {
82  EXPECT_EQ(visual_index, session_tab.tab_visual_index);
83  EXPECT_EQ(nav_index, session_tab.current_navigation_index);
84  ASSERT_EQ(nav_count, session_tab.navigations.size());
85}
86
87// TODO(sky): nuke this and change to call directly into
88// SerializedNavigationEntryTestHelper.
89void SessionServiceTestHelper::AssertNavigationEquals(
90    const sessions::SerializedNavigationEntry& expected,
91    const sessions::SerializedNavigationEntry& actual) {
92  sessions::SerializedNavigationEntryTestHelper::ExpectNavigationEquals(
93      expected, actual);
94}
95
96void SessionServiceTestHelper::AssertSingleWindowWithSingleTab(
97    const std::vector<SessionWindow*>& windows,
98    size_t nav_count) {
99  ASSERT_EQ(1U, windows.size());
100  EXPECT_EQ(1U, windows[0]->tabs.size());
101  EXPECT_EQ(nav_count, windows[0]->tabs[0]->navigations.size());
102}
103
104SessionBackend* SessionServiceTestHelper::backend() {
105  return service_->backend();
106}
107
108void SessionServiceTestHelper::SetService(SessionService* service) {
109  service_.reset(service);
110  // Execute IO tasks posted by the SessionService.
111  content::BrowserThread::GetBlockingPool()->FlushForTesting();
112}
113
114