Chromium Code Reviews| Index: chrome/browser/extensions/extension_sync_data.cc |
| diff --git a/chrome/browser/extensions/extension_sync_data.cc b/chrome/browser/extensions/extension_sync_data.cc |
| index 31df101642edf351192b45e09a965aed685d0941..e499c7e9ee9e9fcbc60ad08b55e3f51468eec756 100644 |
| --- a/chrome/browser/extensions/extension_sync_data.cc |
| +++ b/chrome/browser/extensions/extension_sync_data.cc |
| @@ -38,27 +38,6 @@ ExtensionSyncData::ExtensionSyncData() |
| installed_by_custodian_(false) { |
| } |
| -ExtensionSyncData::ExtensionSyncData(const syncer::SyncData& sync_data) |
| - : uninstalled_(false), |
| - enabled_(false), |
| - incognito_enabled_(false), |
| - remote_install_(false), |
| - all_urls_enabled_(BOOLEAN_UNSET), |
| - installed_by_custodian_(false) { |
| - PopulateFromSyncData(sync_data); |
| -} |
| - |
| -ExtensionSyncData::ExtensionSyncData(const syncer::SyncChange& sync_change) |
| - : uninstalled_(sync_change.change_type() == |
| - syncer::SyncChange::ACTION_DELETE), |
| - enabled_(false), |
| - incognito_enabled_(false), |
| - remote_install_(false), |
| - all_urls_enabled_(BOOLEAN_UNSET), |
| - installed_by_custodian_(false) { |
| - PopulateFromSyncData(sync_change.sync_data()); |
| -} |
| - |
| ExtensionSyncData::ExtensionSyncData(const Extension& extension, |
| bool enabled, |
| bool incognito_enabled, |
| @@ -79,6 +58,28 @@ ExtensionSyncData::ExtensionSyncData(const Extension& extension, |
| ExtensionSyncData::~ExtensionSyncData() {} |
| +// static |
| +scoped_ptr<ExtensionSyncData> ExtensionSyncData::CreateFromSyncData( |
| + const syncer::SyncData& sync_data) { |
| + scoped_ptr<ExtensionSyncData> data(new ExtensionSyncData); |
| + if (data->PopulateFromSyncData(sync_data)) |
| + return data.Pass(); |
| + return NULL; |
| +} |
| + |
| +// static |
| +scoped_ptr<ExtensionSyncData> ExtensionSyncData::CreateFromSyncChange( |
| + const syncer::SyncChange& sync_change) { |
| + scoped_ptr<ExtensionSyncData> data( |
| + CreateFromSyncData(sync_change.sync_data())); |
| + if (!data.get()) |
| + return NULL; |
| + |
| + data->set_uninstalled(sync_change.change_type() == |
| + syncer::SyncChange::ACTION_DELETE); |
| + return data.Pass(); |
| +} |
| + |
| syncer::SyncData ExtensionSyncData::GetSyncData() const { |
| sync_pb::EntitySpecifics specifics; |
| PopulateExtensionSpecifics(specifics.mutable_extension()); |
| @@ -106,24 +107,27 @@ void ExtensionSyncData::PopulateExtensionSpecifics( |
| specifics->set_name(name_); |
| } |
| -void ExtensionSyncData::PopulateFromExtensionSpecifics( |
| +bool ExtensionSyncData::PopulateFromExtensionSpecifics( |
| const sync_pb::ExtensionSpecifics& specifics) { |
| if (!crx_file::id_util::IdIsValid(specifics.id())) { |
| - LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad ID):\n" |
| + LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad ID):\n" |
|
not at google - send to devlin
2015/03/11 23:21:34
Can we track this in UMA, with an enum for why (ba
Yoyo Zhou
2015/03/12 00:25:48
Done.
|
| << GetExtensionSpecificsLogMessage(specifics); |
| + return false; |
| } |
| Version specifics_version(specifics.version()); |
| if (!specifics_version.IsValid()) { |
| - LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad version):\n" |
| + LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad version):\n" |
| << GetExtensionSpecificsLogMessage(specifics); |
| + return false; |
| } |
| // The update URL must be either empty or valid. |
| GURL specifics_update_url(specifics.update_url()); |
| if (!specifics_update_url.is_empty() && !specifics_update_url.is_valid()) { |
| - LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad update URL):\n" |
| + LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad update URL):\n" |
| << GetExtensionSpecificsLogMessage(specifics); |
| + return false; |
| } |
| id_ = specifics.id(); |
| @@ -142,20 +146,22 @@ void ExtensionSyncData::PopulateFromExtensionSpecifics( |
| remote_install_ = specifics.remote_install(); |
| installed_by_custodian_ = specifics.installed_by_custodian(); |
| name_ = specifics.name(); |
| + return true; |
| } |
| void ExtensionSyncData::set_uninstalled(bool uninstalled) { |
| uninstalled_ = uninstalled; |
| } |
| -void ExtensionSyncData::PopulateFromSyncData( |
| +bool ExtensionSyncData::PopulateFromSyncData( |
| const syncer::SyncData& sync_data) { |
| const sync_pb::EntitySpecifics& entity_specifics = sync_data.GetSpecifics(); |
| if (entity_specifics.has_extension()) { |
| - PopulateFromExtensionSpecifics(entity_specifics.extension()); |
| + return PopulateFromExtensionSpecifics(entity_specifics.extension()); |
| } else { |
|
not at google - send to devlin
2015/03/11 23:21:34
no else after return
Yoyo Zhou
2015/03/12 00:25:48
Done.
|
| - LOG(FATAL) << "Attempt to sync bad EntitySpecifics."; |
| + LOG(ERROR) << "Attempt to sync bad EntitySpecifics: no extension data."; |
| + return false; |
| } |
| } |