diff options
Diffstat (limited to 'chrome/browser/sync/glue/synced_device_tracker.cc')
-rw-r--r-- | chrome/browser/sync/glue/synced_device_tracker.cc | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/chrome/browser/sync/glue/synced_device_tracker.cc b/chrome/browser/sync/glue/synced_device_tracker.cc index bf7fa92..e77463e 100644 --- a/chrome/browser/sync/glue/synced_device_tracker.cc +++ b/chrome/browser/sync/glue/synced_device_tracker.cc @@ -13,6 +13,7 @@ #include "sync/internal_api/public/user_share.h" #include "sync/internal_api/public/write_node.h" #include "sync/internal_api/public/write_transaction.h" +#include "sync/util/time.h" namespace browser_sync { @@ -157,25 +158,28 @@ void SyncedDeviceTracker::InitLocalDeviceInfoContinuation( } void SyncedDeviceTracker::WriteLocalDeviceInfo(const DeviceInfo& info) { - sync_pb::DeviceInfoSpecifics specifics; DCHECK_EQ(cache_guid_, info.guid()); - specifics.set_cache_guid(cache_guid_); - specifics.set_client_name(info.client_name()); - specifics.set_chrome_version(info.chrome_version()); - specifics.set_sync_user_agent(info.sync_user_agent()); - specifics.set_device_type(info.device_type()); - - WriteDeviceInfo(specifics, local_device_info_tag_); + WriteDeviceInfo(info, local_device_info_tag_); } -void SyncedDeviceTracker::WriteDeviceInfo( - const sync_pb::DeviceInfoSpecifics& specifics, - const std::string& tag) { +void SyncedDeviceTracker::WriteDeviceInfo(const DeviceInfo& info, + const std::string& tag) { syncer::WriteTransaction trans(FROM_HERE, user_share_); syncer::WriteNode node(&trans); + sync_pb::DeviceInfoSpecifics specifics; + specifics.set_cache_guid(info.guid()); + specifics.set_client_name(info.client_name()); + specifics.set_chrome_version(info.chrome_version()); + specifics.set_sync_user_agent(info.sync_user_agent()); + specifics.set_device_type(info.device_type()); + if (node.InitByClientTagLookup(syncer::DEVICE_INFO, tag) == syncer::BaseNode::INIT_OK) { + const sync_pb::DeviceInfoSpecifics& sync_specifics = + node.GetDeviceInfoSpecifics(); + if (sync_specifics.has_backup_timestamp()) + specifics.set_backup_timestamp(sync_specifics.backup_timestamp()); node.SetDeviceInfoSpecifics(specifics); node.SetTitle(specifics.client_name()); } else { @@ -195,4 +199,33 @@ void SyncedDeviceTracker::WriteDeviceInfo( } } +void SyncedDeviceTracker::UpdateLocalDeviceBackupTime(base::Time backup_time) { + syncer::WriteTransaction trans(FROM_HERE, user_share_); + syncer::WriteNode node(&trans); + + if (node.InitByClientTagLookup(syncer::DEVICE_INFO, local_device_info_tag_) + == syncer::BaseNode::INIT_OK) { + sync_pb::DeviceInfoSpecifics specifics = node.GetDeviceInfoSpecifics(); + int64 new_backup_timestamp = syncer::TimeToProtoTime(backup_time); + if (!specifics.has_backup_timestamp() || + specifics.backup_timestamp() != new_backup_timestamp) { + specifics.set_backup_timestamp(new_backup_timestamp); + node.SetDeviceInfoSpecifics(specifics); + } + } +} + +base::Time SyncedDeviceTracker::GetLocalDeviceBackupTime() const { + syncer::ReadTransaction trans(FROM_HERE, user_share_); + syncer::ReadNode node(&trans); + if (node.InitByClientTagLookup(syncer::DEVICE_INFO, local_device_info_tag_) + == syncer::BaseNode::INIT_OK && + node.GetDeviceInfoSpecifics().has_backup_timestamp()) { + return syncer::ProtoTimeToTime( + node.GetDeviceInfoSpecifics().backup_timestamp()); + } else { + return base::Time(); + } +} + } // namespace browser_sync |