OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/extension_sync_data.h" | 5 #include "chrome/browser/extensions/extension_sync_data.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
9 #include "chrome/browser/sync/protocol/app_specifics.pb.h" | 9 #include "chrome/browser/sync/protocol/app_specifics.pb.h" |
10 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" | 10 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" |
11 | 11 |
12 ExtensionSyncData::ExtensionSyncData() | 12 ExtensionSyncData::ExtensionSyncData() |
13 : uninstalled_(false), | 13 : uninstalled_(false), |
14 enabled_(false), | 14 enabled_(false), |
15 incognito_enabled_(false), | 15 incognito_enabled_(false), |
16 type_(Extension::SYNC_TYPE_NONE) { | 16 type_(Extension::SYNC_TYPE_NONE), |
| 17 notifications_initial_setup_done_(false), |
| 18 notifications_disabled_(false) { |
17 } | 19 } |
18 | 20 |
19 ExtensionSyncData::ExtensionSyncData(const SyncData& sync_data) | 21 ExtensionSyncData::ExtensionSyncData(const SyncData& sync_data) |
20 : uninstalled_(false), | 22 : uninstalled_(false), |
21 enabled_(false), | 23 enabled_(false), |
22 incognito_enabled_(false), | 24 incognito_enabled_(false), |
23 type_(Extension::SYNC_TYPE_NONE) { | 25 type_(Extension::SYNC_TYPE_NONE), |
| 26 notifications_initial_setup_done_(false), |
| 27 notifications_disabled_(false) { |
24 PopulateFromSyncData(sync_data); | 28 PopulateFromSyncData(sync_data); |
25 } | 29 } |
26 | 30 |
27 ExtensionSyncData::ExtensionSyncData(const SyncChange& sync_change) | 31 ExtensionSyncData::ExtensionSyncData(const SyncChange& sync_change) |
28 : uninstalled_(sync_change.change_type() == SyncChange::ACTION_DELETE) { | 32 : uninstalled_(sync_change.change_type() == SyncChange::ACTION_DELETE) { |
29 PopulateFromSyncData(sync_change.sync_data()); | 33 PopulateFromSyncData(sync_change.sync_data()); |
30 } | 34 } |
31 | 35 |
32 ExtensionSyncData::ExtensionSyncData(const Extension& extension, | 36 ExtensionSyncData::ExtensionSyncData(const Extension& extension, |
33 bool enabled, | 37 bool enabled, |
34 bool incognito_enabled) | 38 bool incognito_enabled, |
| 39 bool notifications_initial_setup_done, |
| 40 bool notifications_disabled) |
35 : id_(extension.id()), | 41 : id_(extension.id()), |
36 uninstalled_(false), | 42 uninstalled_(false), |
37 enabled_(enabled), | 43 enabled_(enabled), |
38 incognito_enabled_(incognito_enabled), | 44 incognito_enabled_(incognito_enabled), |
39 type_(extension.GetSyncType()), | 45 type_(extension.GetSyncType()), |
40 version_(*extension.version()), | 46 version_(*extension.version()), |
41 update_url_(extension.update_url()), | 47 update_url_(extension.update_url()), |
42 name_(extension.name()) { | 48 name_(extension.name()), |
| 49 notifications_initial_setup_done_(notifications_initial_setup_done), |
| 50 notifications_disabled_(notifications_disabled) { |
43 } | 51 } |
44 | 52 |
45 ExtensionSyncData::~ExtensionSyncData() {} | 53 ExtensionSyncData::~ExtensionSyncData() {} |
46 | 54 |
| 55 void ExtensionSyncData::PopulateAppSpecifics( |
| 56 sync_pb::AppSpecifics* specifics) const { |
| 57 DCHECK(specifics); |
| 58 sync_pb::AppNotificationSettings* notif_settings = |
| 59 specifics->mutable_notification_settings(); |
| 60 notif_settings->set_initial_setup_done(notifications_initial_setup_done_); |
| 61 notif_settings->set_disabled(notifications_disabled_); |
| 62 PopulateSyncSpecifics(specifics->mutable_extension()); |
| 63 } |
| 64 |
47 void ExtensionSyncData::PopulateSyncSpecifics( | 65 void ExtensionSyncData::PopulateSyncSpecifics( |
48 sync_pb::ExtensionSpecifics* specifics) const { | 66 sync_pb::ExtensionSpecifics* specifics) const { |
49 DCHECK(Extension::IdIsValid(id_)); | 67 DCHECK(Extension::IdIsValid(id_)); |
50 specifics->set_id(id_); | 68 specifics->set_id(id_); |
51 specifics->set_update_url(update_url_.spec()); | 69 specifics->set_update_url(update_url_.spec()); |
52 specifics->set_version(version_.GetString()); | 70 specifics->set_version(version_.GetString()); |
53 specifics->set_enabled(enabled_); | 71 specifics->set_enabled(enabled_); |
54 specifics->set_incognito_enabled(incognito_enabled_); | 72 specifics->set_incognito_enabled(incognito_enabled_); |
55 specifics->set_name(name_); | 73 specifics->set_name(name_); |
56 } | 74 } |
57 | 75 |
58 SyncData ExtensionSyncData::GetSyncData() const { | 76 SyncData ExtensionSyncData::GetSyncData() const { |
59 sync_pb::EntitySpecifics specifics; | 77 sync_pb::EntitySpecifics specifics; |
60 sync_pb::ExtensionSpecifics* extension_specifics = NULL; | |
61 | 78 |
62 switch (type_) { | 79 switch (type_) { |
63 case Extension::SYNC_TYPE_EXTENSION: | 80 case Extension::SYNC_TYPE_EXTENSION: |
64 extension_specifics = specifics.MutableExtension(sync_pb::extension); | 81 PopulateSyncSpecifics(specifics.MutableExtension(sync_pb::extension)); |
65 break; | 82 break; |
66 case Extension::SYNC_TYPE_APP: | 83 case Extension::SYNC_TYPE_APP: |
67 extension_specifics = | 84 PopulateAppSpecifics(specifics.MutableExtension(sync_pb::app)); |
68 specifics.MutableExtension(sync_pb::app)->mutable_extension(); | |
69 break; | 85 break; |
70 default: | 86 default: |
71 LOG(FATAL) << "Attempt to get non-syncable data."; | 87 LOG(FATAL) << "Attempt to get non-syncable data."; |
72 } | 88 } |
73 | 89 |
74 PopulateSyncSpecifics(extension_specifics); | |
75 | |
76 return SyncData::CreateLocalData(id_, name_, specifics); | 90 return SyncData::CreateLocalData(id_, name_, specifics); |
77 } | 91 } |
78 | 92 |
79 SyncChange ExtensionSyncData::GetSyncChange( | 93 SyncChange ExtensionSyncData::GetSyncChange( |
80 SyncChange::SyncChangeType change_type) const { | 94 SyncChange::SyncChangeType change_type) const { |
81 return SyncChange(change_type, GetSyncData()); | 95 return SyncChange(change_type, GetSyncData()); |
82 } | 96 } |
83 | 97 |
84 void ExtensionSyncData::PopulateFromExtensionSpecifics( | 98 void ExtensionSyncData::PopulateFromExtensionSpecifics( |
85 const sync_pb::ExtensionSpecifics& specifics) { | 99 const sync_pb::ExtensionSpecifics& specifics) { |
(...skipping 19 matching lines...) Expand all Loading... |
105 name_ = specifics.name(); | 119 name_ = specifics.name(); |
106 } | 120 } |
107 | 121 |
108 void ExtensionSyncData::PopulateFromSyncData(const SyncData& sync_data) { | 122 void ExtensionSyncData::PopulateFromSyncData(const SyncData& sync_data) { |
109 const sync_pb::EntitySpecifics& entity_specifics = sync_data.GetSpecifics(); | 123 const sync_pb::EntitySpecifics& entity_specifics = sync_data.GetSpecifics(); |
110 sync_pb::ExtensionSpecifics extension_expecifics; | 124 sync_pb::ExtensionSpecifics extension_expecifics; |
111 if (entity_specifics.HasExtension(sync_pb::extension)) { | 125 if (entity_specifics.HasExtension(sync_pb::extension)) { |
112 extension_expecifics = entity_specifics.GetExtension(sync_pb::extension); | 126 extension_expecifics = entity_specifics.GetExtension(sync_pb::extension); |
113 type_ = Extension::SYNC_TYPE_EXTENSION; | 127 type_ = Extension::SYNC_TYPE_EXTENSION; |
114 } else if (entity_specifics.HasExtension(sync_pb::app)) { | 128 } else if (entity_specifics.HasExtension(sync_pb::app)) { |
115 extension_expecifics = | 129 sync_pb::AppSpecifics app_specifics = entity_specifics.GetExtension( |
116 entity_specifics.GetExtension(sync_pb::app).extension(); | 130 sync_pb::app); |
| 131 extension_expecifics = app_specifics.extension(); |
117 type_ = Extension::SYNC_TYPE_APP; | 132 type_ = Extension::SYNC_TYPE_APP; |
| 133 notifications_initial_setup_done_ = |
| 134 app_specifics.has_notification_settings() && |
| 135 app_specifics.notification_settings().has_initial_setup_done() && |
| 136 app_specifics.notification_settings().initial_setup_done(); |
| 137 notifications_disabled_ = |
| 138 app_specifics.has_notification_settings() && |
| 139 app_specifics.notification_settings().has_disabled() && |
| 140 app_specifics.notification_settings().disabled(); |
118 } else { | 141 } else { |
119 LOG(FATAL) << "Attempt to sync bad EntitySpecifics."; | 142 LOG(FATAL) << "Attempt to sync bad EntitySpecifics."; |
120 } | 143 } |
121 PopulateFromExtensionSpecifics(extension_expecifics); | 144 PopulateFromExtensionSpecifics(extension_expecifics); |
122 } | 145 } |
123 | 146 |
OLD | NEW |