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 #include "chrome/browser/extensions/app_sync_data.h" 6 7 #include "extensions/common/extension.h" 8 #include "sync/api/sync_data.h" 9 #include "sync/protocol/app_specifics.pb.h" 10 #include "sync/protocol/sync.pb.h" 11 12 namespace extensions { 13 14 AppSyncData::AppSyncData() {} 15 16 AppSyncData::AppSyncData(const syncer::SyncData& sync_data) { 17 PopulateFromSyncData(sync_data); 18 } 19 20 AppSyncData::AppSyncData(const syncer::SyncChange& sync_change) { 21 PopulateFromSyncData(sync_change.sync_data()); 22 extension_sync_data_.set_uninstalled( 23 sync_change.change_type() == syncer::SyncChange::ACTION_DELETE); 24 } 25 26 AppSyncData::AppSyncData(const Extension& extension, 27 bool enabled, 28 bool incognito_enabled, 29 const syncer::StringOrdinal& app_launch_ordinal, 30 const syncer::StringOrdinal& page_ordinal) 31 : extension_sync_data_(extension, enabled, incognito_enabled), 32 app_launch_ordinal_(app_launch_ordinal), 33 page_ordinal_(page_ordinal) { 34 } 35 36 AppSyncData::~AppSyncData() {} 37 38 syncer::SyncData AppSyncData::GetSyncData() const { 39 sync_pb::EntitySpecifics specifics; 40 PopulateAppSpecifics(specifics.mutable_app()); 41 42 return syncer::SyncData::CreateLocalData(extension_sync_data_.id(), 43 extension_sync_data_.name(), 44 specifics); 45 } 46 47 syncer::SyncChange AppSyncData::GetSyncChange( 48 syncer::SyncChange::SyncChangeType change_type) const { 49 return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); 50 } 51 52 void AppSyncData::PopulateAppSpecifics(sync_pb::AppSpecifics* specifics) const { 53 DCHECK(specifics); 54 // Only sync the ordinal values if they are valid. 55 if (app_launch_ordinal_.IsValid()) 56 specifics->set_app_launch_ordinal(app_launch_ordinal_.ToInternalValue()); 57 if (page_ordinal_.IsValid()) 58 specifics->set_page_ordinal(page_ordinal_.ToInternalValue()); 59 60 extension_sync_data_.PopulateExtensionSpecifics( 61 specifics->mutable_extension()); 62 } 63 64 void AppSyncData::PopulateFromAppSpecifics( 65 const sync_pb::AppSpecifics& specifics) { 66 extension_sync_data_.PopulateFromExtensionSpecifics(specifics.extension()); 67 68 app_launch_ordinal_ = syncer::StringOrdinal(specifics.app_launch_ordinal()); 69 page_ordinal_ = syncer::StringOrdinal(specifics.page_ordinal()); 70 } 71 72 void AppSyncData::PopulateFromSyncData(const syncer::SyncData& sync_data) { 73 PopulateFromAppSpecifics(sync_data.GetSpecifics().app()); 74 } 75 76 } // namespace extensions 77