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)#ifndef CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_types.h"
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/sessions/session_id.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/protocol/session_specifics.pb.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationEntry;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Defines a synced session for use by session sync. A synced session is a
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// list of windows along with a unique session identifer (tag) and meta-data
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// about the device being synced.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SyncedSession {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<SessionID::id_type, SessionWindow*> SyncedWindowMap;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The type of device.
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Please keep in sync with ForeignSessionHelper.java
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum DeviceType {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_UNSET = 0,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_WIN = 1,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_MACOSX = 2,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_LINUX = 3,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_CHROMEOS = 4,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_OTHER = 5,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_PHONE = 6,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TYPE_TABLET = 7
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SyncedSession();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~SyncedSession();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unique tag for each session.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string session_tag;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // User-visible name
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string session_name;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Type of device this session is from.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DeviceType device_type;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Last time this session was modified remotely.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time modified_time;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Map of windows that make up this session. Windowws are owned by the session
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // itself and free'd on destruction.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SyncedWindowMap windows;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Converts the DeviceType enum value to a string. This is used
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in the NTP handler for foreign sessions for matching session
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // types to an icon style.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string DeviceTypeAsString() const {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (device_type) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_WIN:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "win";
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_MACOSX:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "macosx";
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_LINUX:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "linux";
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_CHROMEOS:
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "chromeos";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_OTHER:
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "other";
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_PHONE:
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "phone";
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case SyncedSession::TYPE_TABLET:
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return "tablet";
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default:
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return std::string();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Convert this object to its protocol buffer equivalent. Shallow conversion,
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // does not create SessionTab protobufs.
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sync_pb::SessionHeader ToSessionHeader() const;
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SyncedSession);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Control which foreign tabs we're interested in syncing/displaying. Checks
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that the tab has navigations and contains at least one valid url.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: chrome:// and file:// are not considered valid urls (for syncing).
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ShouldSyncSessionTab(const SessionTab& tab);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks whether the window has tabs to sync. If no tabs to sync, it returns
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// true, false otherwise.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SessionWindowHasNoTabsToSync(const SessionWindow& window);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace browser_sync
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_SYNC_GLUE_SYNCED_SESSION_H_
103