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_types.h"
6
7#include "base/basictypes.h"
8#include "base/stl_util.h"
9#include "chrome/browser/sessions/session_command.h"
10#include "chrome/browser/ui/browser.h"
11
12using sessions::SerializedNavigationEntry;
13
14// SessionTab -----------------------------------------------------------------
15
16SessionTab::SessionTab()
17    : tab_visual_index(-1),
18      current_navigation_index(-1),
19      pinned(false) {
20}
21
22SessionTab::~SessionTab() {
23}
24
25void SessionTab::SetFromSyncData(const sync_pb::SessionTab& sync_data,
26                                 base::Time timestamp) {
27  window_id.set_id(sync_data.window_id());
28  tab_id.set_id(sync_data.tab_id());
29  tab_visual_index = sync_data.tab_visual_index();
30  current_navigation_index = sync_data.current_navigation_index();
31  pinned = sync_data.pinned();
32  extension_app_id = sync_data.extension_app_id();
33  user_agent_override.clear();
34  this->timestamp = timestamp;
35  navigations.clear();
36  for (int i = 0; i < sync_data.navigation_size(); ++i) {
37    navigations.push_back(
38        SerializedNavigationEntry::FromSyncData(i, sync_data.navigation(i)));
39  }
40  session_storage_persistent_id.clear();
41}
42
43sync_pb::SessionTab SessionTab::ToSyncData() const {
44  sync_pb::SessionTab sync_data;
45  sync_data.set_tab_id(tab_id.id());
46  sync_data.set_window_id(window_id.id());
47  sync_data.set_tab_visual_index(tab_visual_index);
48  sync_data.set_current_navigation_index(current_navigation_index);
49  sync_data.set_pinned(pinned);
50  sync_data.set_extension_app_id(extension_app_id);
51  for (std::vector<SerializedNavigationEntry>::const_iterator
52           it = navigations.begin(); it != navigations.end(); ++it) {
53    *sync_data.add_navigation() = it->ToSyncData();
54  }
55  return sync_data;
56}
57
58// SessionWindow ---------------------------------------------------------------
59
60SessionWindow::SessionWindow()
61    : selected_tab_index(-1),
62      type(Browser::TYPE_TABBED),
63      is_constrained(true),
64      show_state(ui::SHOW_STATE_DEFAULT) {
65}
66
67SessionWindow::~SessionWindow() {
68  STLDeleteElements(&tabs);
69}
70
71sync_pb::SessionWindow SessionWindow::ToSyncData() const {
72  sync_pb::SessionWindow sync_data;
73  sync_data.set_window_id(window_id.id());
74  sync_data.set_selected_tab_index(selected_tab_index);
75  switch (type) {
76    case Browser::TYPE_TABBED:
77      sync_data.set_browser_type(
78          sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
79      break;
80    case Browser::TYPE_POPUP:
81      sync_data.set_browser_type(
82        sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
83      break;
84    default:
85      NOTREACHED() << "Unhandled browser type.";
86  }
87
88  for (size_t i = 0; i < tabs.size(); i++)
89    sync_data.add_tab(tabs[i]->tab_id.id());
90
91  return sync_data;
92}
93