Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Unified Diff: chrome/browser/extensions/app_sync_data.cc

Issue 996213005: Don't crash when trying to create an ExtensionSyncData from invalid SyncData. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/app_sync_data.cc
diff --git a/chrome/browser/extensions/app_sync_data.cc b/chrome/browser/extensions/app_sync_data.cc
index 6548ef5ca05e474d978b11dfac06bf9185279792..24d10cfae5ea6b934796fbf0acd50f4ace339835 100644
--- a/chrome/browser/extensions/app_sync_data.cc
+++ b/chrome/browser/extensions/app_sync_data.cc
@@ -15,16 +15,6 @@ namespace extensions {
AppSyncData::AppSyncData() {}
-AppSyncData::AppSyncData(const syncer::SyncData& sync_data) {
- PopulateFromSyncData(sync_data);
-}
-
-AppSyncData::AppSyncData(const syncer::SyncChange& sync_change) {
- PopulateFromSyncData(sync_change.sync_data());
- extension_sync_data_.set_uninstalled(
- sync_change.change_type() == syncer::SyncChange::ACTION_DELETE);
-}
-
AppSyncData::AppSyncData(const Extension& extension,
bool enabled,
bool incognito_enabled,
@@ -50,6 +40,27 @@ AppSyncData::AppSyncData(const Extension& extension,
AppSyncData::~AppSyncData() {}
+// static
+scoped_ptr<AppSyncData> AppSyncData::CreateFromSyncData(
+ const syncer::SyncData& sync_data) {
+ scoped_ptr<AppSyncData> data(new AppSyncData);
+ if (data->PopulateFromSyncData(sync_data))
+ return data.Pass();
+ return NULL;
+}
+
+// static
+scoped_ptr<AppSyncData> AppSyncData::CreateFromSyncChange(
+ const syncer::SyncChange& sync_change) {
+ scoped_ptr<AppSyncData> data(CreateFromSyncData(sync_change.sync_data()));
+ if (!data.get())
+ return NULL;
+
+ data->extension_sync_data_.set_uninstalled(sync_change.change_type() ==
+ syncer::SyncChange::ACTION_DELETE);
+ return data.Pass();
+}
+
syncer::SyncData AppSyncData::GetSyncData() const {
sync_pb::EntitySpecifics specifics;
PopulateAppSpecifics(specifics.mutable_app());
@@ -95,9 +106,11 @@ void AppSyncData::PopulateAppSpecifics(sync_pb::AppSpecifics* specifics) const {
specifics->mutable_extension());
}
-void AppSyncData::PopulateFromAppSpecifics(
+bool AppSyncData::PopulateFromAppSpecifics(
const sync_pb::AppSpecifics& specifics) {
- extension_sync_data_.PopulateFromExtensionSpecifics(specifics.extension());
+ if (!extension_sync_data_.PopulateFromExtensionSpecifics(
+ specifics.extension()))
+ return false;
app_launch_ordinal_ = syncer::StringOrdinal(specifics.app_launch_ordinal());
page_ordinal_ = syncer::StringOrdinal(specifics.page_ordinal());
@@ -109,10 +122,11 @@ void AppSyncData::PopulateFromAppSpecifics(
bookmark_app_url_ = specifics.bookmark_app_url();
bookmark_app_description_ = specifics.bookmark_app_description();
bookmark_app_icon_color_ = specifics.bookmark_app_icon_color();
+ return true;
}
-void AppSyncData::PopulateFromSyncData(const syncer::SyncData& sync_data) {
- PopulateFromAppSpecifics(sync_data.GetSpecifics().app());
+bool AppSyncData::PopulateFromSyncData(const syncer::SyncData& sync_data) {
+ return PopulateFromAppSpecifics(sync_data.GetSpecifics().app());
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698