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.
5 #ifndef CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_
6 #define CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_
11 #include "base/time/time.h"
12 #include "chrome/browser/sessions/session_id.h"
13 #include "chrome/browser/sessions/session_types.h"
14 #include "sync/protocol/session_specifics.pb.h"
17 class NavigationEntry
;
20 namespace browser_sync
{
22 // Defines a synced session for use by session sync. A synced session is a
23 // list of windows along with a unique session identifer (tag) and meta-data
24 // about the device being synced.
25 struct SyncedSession
{
26 typedef std::map
<SessionID::id_type
, SessionWindow
*> SyncedWindowMap
;
28 // The type of device.
29 // Please keep in sync with ForeignSessionHelper.java
44 // Unique tag for each session.
45 std::string session_tag
;
47 std::string session_name
;
49 // Type of device this session is from.
50 DeviceType device_type
;
52 // Last time this session was modified remotely.
53 base::Time modified_time
;
55 // Map of windows that make up this session. Windowws are owned by the session
56 // itself and free'd on destruction.
57 SyncedWindowMap windows
;
59 // Converts the DeviceType enum value to a string. This is used
60 // in the NTP handler for foreign sessions for matching session
61 // types to an icon style.
62 std::string
DeviceTypeAsString() const {
63 switch (device_type
) {
64 case SyncedSession::TYPE_WIN
:
66 case SyncedSession::TYPE_MACOSX
:
68 case SyncedSession::TYPE_LINUX
:
70 case SyncedSession::TYPE_CHROMEOS
:
72 case SyncedSession::TYPE_OTHER
:
74 case SyncedSession::TYPE_PHONE
:
76 case SyncedSession::TYPE_TABLET
:
83 // Convert this object to its protocol buffer equivalent. Shallow conversion,
84 // does not create SessionTab protobufs.
85 sync_pb::SessionHeader
ToSessionHeader() const;
88 DISALLOW_COPY_AND_ASSIGN(SyncedSession
);
91 // Control which foreign tabs we're interested in syncing/displaying. Checks
92 // that the tab has navigations and contains at least one valid url.
93 // Note: chrome:// and file:// are not considered valid urls (for syncing).
94 bool ShouldSyncSessionTab(const SessionTab
& tab
);
96 // Checks whether the window has tabs to sync. If no tabs to sync, it returns
97 // true, false otherwise.
98 bool SessionWindowHasNoTabsToSync(const SessionWindow
& window
);
100 } // namespace browser_sync
102 #endif // CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_