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 #ifndef CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_ 6 #define CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "base/time/time.h" 12 #include "chrome/browser/sessions/session_types.h" 13 #include "components/sessions/session_id.h" 14 #include "sync/protocol/session_specifics.pb.h" 15 16 namespace content { 17 class NavigationEntry; 18 } 19 20 namespace browser_sync { 21 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; 27 28 // The type of device. 29 // Please keep in sync with ForeignSessionHelper.java 30 enum DeviceType { 31 TYPE_UNSET = 0, 32 TYPE_WIN = 1, 33 TYPE_MACOSX = 2, 34 TYPE_LINUX = 3, 35 TYPE_CHROMEOS = 4, 36 TYPE_OTHER = 5, 37 TYPE_PHONE = 6, 38 TYPE_TABLET = 7 39 }; 40 41 SyncedSession(); 42 ~SyncedSession(); 43 44 // Unique tag for each session. 45 std::string session_tag; 46 // User-visible name 47 std::string session_name; 48 49 // Type of device this session is from. 50 DeviceType device_type; 51 52 // Last time this session was modified remotely. 53 base::Time modified_time; 54 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; 58 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. DeviceTypeAsStringSyncedSession62 std::string DeviceTypeAsString() const { 63 switch (device_type) { 64 case SyncedSession::TYPE_WIN: 65 return "win"; 66 case SyncedSession::TYPE_MACOSX: 67 return "macosx"; 68 case SyncedSession::TYPE_LINUX: 69 return "linux"; 70 case SyncedSession::TYPE_CHROMEOS: 71 return "chromeos"; 72 case SyncedSession::TYPE_OTHER: 73 return "other"; 74 case SyncedSession::TYPE_PHONE: 75 return "phone"; 76 case SyncedSession::TYPE_TABLET: 77 return "tablet"; 78 default: 79 return std::string(); 80 } 81 } 82 83 // Convert this object to its protocol buffer equivalent. Shallow conversion, 84 // does not create SessionTab protobufs. 85 sync_pb::SessionHeader ToSessionHeader() const; 86 87 private: 88 DISALLOW_COPY_AND_ASSIGN(SyncedSession); 89 }; 90 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); 95 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); 99 100 } // namespace browser_sync 101 102 #endif // CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_ 103