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_types.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_command.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using sessions::SerializedNavigationEntry;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SessionTab -----------------------------------------------------------------
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionTab::SessionTab()
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : tab_visual_index(-1),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_navigation_index(-1),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pinned(false) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionTab::~SessionTab() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SessionTab::SetFromSyncData(const sync_pb::SessionTab& sync_data,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 base::Time timestamp) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  window_id.set_id(sync_data.window_id());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tab_id.set_id(sync_data.tab_id());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tab_visual_index = sync_data.tab_visual_index();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  current_navigation_index = sync_data.current_navigation_index();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pinned = sync_data.pinned();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extension_app_id = sync_data.extension_app_id();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_agent_override.clear();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this->timestamp = timestamp;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  navigations.clear();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < sync_data.navigation_size(); ++i) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    navigations.push_back(
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        SerializedNavigationEntry::FromSyncData(i, sync_data.navigation(i)));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  session_storage_persistent_id.clear();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sync_pb::SessionTab SessionTab::ToSyncData() const {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_pb::SessionTab sync_data;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_tab_id(tab_id.id());
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_window_id(window_id.id());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_tab_visual_index(tab_visual_index);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_current_navigation_index(current_navigation_index);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_pinned(pinned);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sync_data.set_extension_app_id(extension_app_id);
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (std::vector<SerializedNavigationEntry>::const_iterator
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           it = navigations.begin(); it != navigations.end(); ++it) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *sync_data.add_navigation() = it->ToSyncData();
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return sync_data;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SessionWindow ---------------------------------------------------------------
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionWindow::SessionWindow()
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : selected_tab_index(-1),
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      type(Browser::TYPE_TABBED),
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      is_constrained(true),
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      show_state(ui::SHOW_STATE_DEFAULT) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SessionWindow::~SessionWindow() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  STLDeleteElements(&tabs);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)sync_pb::SessionWindow SessionWindow::ToSyncData() const {
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sync_pb::SessionWindow sync_data;
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sync_data.set_window_id(window_id.id());
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sync_data.set_selected_tab_index(selected_tab_index);
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  switch (type) {
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case Browser::TYPE_TABBED:
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      sync_data.set_browser_type(
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case Browser::TYPE_POPUP:
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      sync_data.set_browser_type(
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    default:
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NOTREACHED() << "Unhandled browser type.";
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < tabs.size(); i++)
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    sync_data.add_tab(tabs[i]->tab_id.id());
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return sync_data;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
93