blob: a7ec0221734f1406ad8ae9e677de7d71c05663a1 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sessions/session_types.h"
#include "base/basictypes.h"
#include "base/stl_util.h"
#include "chrome/browser/sessions/session_command.h"
#include "chrome/browser/ui/browser.h"
using sessions::SerializedNavigationEntry;
// SessionTab -----------------------------------------------------------------
SessionTab::SessionTab()
: tab_visual_index(-1),
current_navigation_index(-1),
pinned(false) {
}
SessionTab::~SessionTab() {
}
void SessionTab::SetFromSyncData(const sync_pb::SessionTab& sync_data,
base::Time timestamp) {
window_id.set_id(sync_data.window_id());
tab_id.set_id(sync_data.tab_id());
tab_visual_index = sync_data.tab_visual_index();
current_navigation_index = sync_data.current_navigation_index();
pinned = sync_data.pinned();
extension_app_id = sync_data.extension_app_id();
user_agent_override.clear();
this->timestamp = timestamp;
navigations.clear();
for (int i = 0; i < sync_data.navigation_size(); ++i) {
navigations.push_back(
SerializedNavigationEntry::FromSyncData(i, sync_data.navigation(i)));
}
session_storage_persistent_id.clear();
}
sync_pb::SessionTab SessionTab::ToSyncData() const {
sync_pb::SessionTab sync_data;
sync_data.set_tab_id(tab_id.id());
sync_data.set_window_id(window_id.id());
sync_data.set_tab_visual_index(tab_visual_index);
sync_data.set_current_navigation_index(current_navigation_index);
sync_data.set_pinned(pinned);
sync_data.set_extension_app_id(extension_app_id);
for (std::vector<SerializedNavigationEntry>::const_iterator
it = navigations.begin(); it != navigations.end(); ++it) {
*sync_data.add_navigation() = it->ToSyncData();
}
return sync_data;
}
// SessionWindow ---------------------------------------------------------------
SessionWindow::SessionWindow()
: selected_tab_index(-1),
type(Browser::TYPE_TABBED),
is_constrained(true),
show_state(ui::SHOW_STATE_DEFAULT) {
}
SessionWindow::~SessionWindow() {
STLDeleteElements(&tabs);
}
sync_pb::SessionWindow SessionWindow::ToSyncData() const {
sync_pb::SessionWindow sync_data;
sync_data.set_window_id(window_id.id());
sync_data.set_selected_tab_index(selected_tab_index);
switch (type) {
case Browser::TYPE_TABBED:
sync_data.set_browser_type(
sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
break;
case Browser::TYPE_POPUP:
sync_data.set_browser_type(
sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
break;
default:
NOTREACHED() << "Unhandled browser type.";
}
for (size_t i = 0; i < tabs.size(); i++)
sync_data.add_tab(tabs[i]->tab_id.id());
return sync_data;
}