blob: f6c37f41693647121f2b32cdcf569f8eb8e7cf76 [file] [log] [blame]
// Copyright 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.
#ifndef COMPONENTS_SYNC_SESSIONS_SYNCED_SESSION_H_
#define COMPONENTS_SYNC_SESSIONS_SYNCED_SESSION_H_
#include <map>
#include <memory>
#include <set>
#include <string>
#include "base/macros.h"
#include "base/time/time.h"
#include "components/sessions/core/session_id.h"
#include "components/sessions/core/session_types.h"
#include "components/sync/protocol/session_specifics.pb.h"
#include "components/sync/protocol/sync_enums.pb.h"
namespace sync_sessions {
// A Sync wrapper for a SessionWindow.
struct SyncedSessionWindow {
SyncedSessionWindow();
~SyncedSessionWindow();
// Convert this object into its sync protocol buffer equivalent.
sync_pb::SessionWindow ToSessionWindowProto() const;
// Type of the window. See session_specifics.proto.
sync_pb::SessionWindow::BrowserType window_type;
// The SessionWindow this object wraps.
sessions::SessionWindow wrapped_window;
private:
DISALLOW_COPY_AND_ASSIGN(SyncedSessionWindow);
};
// Defines a synced session for use by session sync. A synced session is a
// list of windows along with a unique session identifer (tag) and meta-data
// about the device being synced.
struct SyncedSession {
SyncedSession();
~SyncedSession();
// Unique tag for each session.
std::string session_tag;
// User-visible name
std::string session_name;
// Type of device this session is from.
sync_pb::SyncEnums::DeviceType device_type;
// Last time this session was modified remotely. This is the max of the header
// and all children tab mtimes.
base::Time modified_time;
// Map of windows that make up this session.
std::map<SessionID::id_type, std::unique_ptr<SyncedSessionWindow>> windows;
// A tab node id is part of the identifier for the sync tab objects. Tab node
// ids are not used for interacting with the model/browser tabs. However, when
// when we want to delete a foreign session, we use these values to inform
// sync which tabs to delete. We are extracting these tab node ids from
// individual session (tab, not header) specifics, but store them here in the
// SyncedSession during runtime. We do this because tab node ids may be reused
// for different tabs, and tracking which tab id is currently associated with
// each tab node id is both difficult and unnecessary. See comments at
// SyncedSessionTracker::GetTabImpl for a concrete example of id reuse.
std::set<int> tab_node_ids;
// Convert this object to its protocol buffer equivalent. Shallow conversion,
// does not create SessionTab protobufs.
sync_pb::SessionHeader ToSessionHeaderProto() const;
private:
DISALLOW_COPY_AND_ASSIGN(SyncedSession);
};
} // namespace sync_sessions
#endif // COMPONENTS_SYNC_SESSIONS_SYNCED_SESSION_H_