diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-19 03:28:07 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-19 03:28:07 +0000 |
commit | de002cb39af0edd9512e9ee4df11b18e719b3d23 (patch) | |
tree | b3d1277834fd4be89da5dc27880b8c43c454bb1b | |
parent | d37601c8c9096c4f185067b3e5f54d1ae001108b (diff) | |
download | chromium_src-de002cb39af0edd9512e9ee4df11b18e719b3d23.zip chromium_src-de002cb39af0edd9512e9ee4df11b18e719b3d23.tar.gz chromium_src-de002cb39af0edd9512e9ee4df11b18e719b3d23.tar.bz2 |
Add Sync datatype for shared managed user settings.
BUG=316168
Review URL: https://codereview.chromium.org/76333002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241779 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/sync/glue/model_association_manager.cc | 1 | ||||
-rw-r--r-- | chrome/browser/sync/profile_sync_service.cc | 2 | ||||
-rw-r--r-- | chrome/browser/sync/sync_prefs.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/webui/sync_setup_handler.cc | 2 | ||||
-rw-r--r-- | chrome/common/pref_names.cc | 2 | ||||
-rw-r--r-- | chrome/common/pref_names.h | 1 | ||||
-rw-r--r-- | sync/internal_api/public/base/model_type.h | 3 | ||||
-rw-r--r-- | sync/protocol/managed_user_shared_setting_specifics.proto | 29 | ||||
-rw-r--r-- | sync/protocol/proto_value_conversions.cc | 12 | ||||
-rw-r--r-- | sync/protocol/proto_value_conversions.h | 6 | ||||
-rw-r--r-- | sync/protocol/proto_value_conversions_unittest.cc | 9 | ||||
-rw-r--r-- | sync/protocol/sync.proto | 3 | ||||
-rw-r--r-- | sync/sync_proto.gypi | 1 | ||||
-rw-r--r-- | sync/syncable/model_type.cc | 27 | ||||
-rw-r--r-- | sync/syncable/nigori_util.cc | 4 | ||||
-rw-r--r-- | sync/tools/testserver/chromiumsync.py | 9 | ||||
-rw-r--r-- | sync/util/data_type_histogram.h | 3 |
17 files changed, 110 insertions, 6 deletions
diff --git a/chrome/browser/sync/glue/model_association_manager.cc b/chrome/browser/sync/glue/model_association_manager.cc index 106f1c4c1..6c75c53 100644 --- a/chrome/browser/sync/glue/model_association_manager.cc +++ b/chrome/browser/sync/glue/model_association_manager.cc @@ -55,6 +55,7 @@ static const syncer::ModelType kStartOrder[] = { syncer::FAVICON_IMAGES, syncer::FAVICON_TRACKING, syncer::MANAGED_USER_SETTINGS, + syncer::MANAGED_USER_SHARED_SETTINGS, syncer::ARTICLES, }; diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc index 2cb9b1e..3fa370e 100644 --- a/chrome/browser/sync/profile_sync_service.cc +++ b/chrome/browser/sync/profile_sync_service.cc @@ -1618,7 +1618,7 @@ const browser_sync::user_selectable_type::UserSelectableSyncType browser_sync::user_selectable_type::PROXY_TABS }; - COMPILE_ASSERT(30 == syncer::MODEL_TYPE_COUNT, UpdateCustomConfigHistogram); + COMPILE_ASSERT(31 == syncer::MODEL_TYPE_COUNT, UpdateCustomConfigHistogram); if (!sync_everything) { const syncer::ModelTypeSet current_types = GetPreferredDataTypes(); diff --git a/chrome/browser/sync/sync_prefs.cc b/chrome/browser/sync/sync_prefs.cc index 57b68a4..794ee47 100644 --- a/chrome/browser/sync/sync_prefs.cc +++ b/chrome/browser/sync/sync_prefs.cc @@ -341,6 +341,8 @@ const char* SyncPrefs::GetPrefNameForDataType(syncer::ModelType data_type) { return prefs::kSyncManagedUsers; case syncer::ARTICLES: return prefs::kSyncArticles; + case syncer::MANAGED_USER_SHARED_SETTINGS: + return prefs::kSyncManagedUserSharedSettings; default: break; } diff --git a/chrome/browser/ui/webui/sync_setup_handler.cc b/chrome/browser/ui/webui/sync_setup_handler.cc index c9cab92..7b4c1bf 100644 --- a/chrome/browser/ui/webui/sync_setup_handler.cc +++ b/chrome/browser/ui/webui/sync_setup_handler.cc @@ -95,7 +95,7 @@ const char* kDataTypeNames[] = { "tabs" }; -COMPILE_ASSERT(30 == syncer::MODEL_TYPE_COUNT, +COMPILE_ASSERT(31 == syncer::MODEL_TYPE_COUNT, update_kDataTypeNames_to_match_UserSelectableTypes); typedef std::map<syncer::ModelType, const char*> ModelTypeNameMap; diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index b6b0e65..931efc8 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -1861,6 +1861,8 @@ const char kSyncFaviconImages[] = "sync.favicon_images"; const char kSyncFaviconTracking[] = "sync.favicon_tracking"; const char kSyncHistoryDeleteDirectives[] = "sync.history_delete_directives"; const char kSyncManagedUserSettings[] = "sync.managed_user_settings"; +const char kSyncManagedUserSharedSettings[] = + "sync.managed_user_shared_settings"; const char kSyncManagedUsers[] = "sync.managed_users"; const char kSyncArticles[] = "sync.articles"; const char kSyncPasswords[] = "sync.passwords"; diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index d6cb76a..526ed18 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -625,6 +625,7 @@ extern const char kSyncFaviconImages[]; extern const char kSyncFaviconTracking[]; extern const char kSyncHistoryDeleteDirectives[]; extern const char kSyncManagedUserSettings[]; +extern const char kSyncManagedUserSharedSettings[]; extern const char kSyncManagedUsers[]; extern const char kSyncArticles[]; extern const char kSyncPasswords[]; diff --git a/sync/internal_api/public/base/model_type.h b/sync/internal_api/public/base/model_type.h index c618c450..4777be4 100644 --- a/sync/internal_api/public/base/model_type.h +++ b/sync/internal_api/public/base/model_type.h @@ -99,6 +99,9 @@ enum ModelType { // by this user and can have restrictions applied. MANAGED_USERS and // MANAGED_USER_SETTINGS can not be encrypted. MANAGED_USERS, + // Managed user shared settings. Shared settings can be modified both by the + // manager and the supervised user. + MANAGED_USER_SHARED_SETTINGS, // Distilled articles. ARTICLES, // App List items diff --git a/sync/protocol/managed_user_shared_setting_specifics.proto b/sync/protocol/managed_user_shared_setting_specifics.proto new file mode 100644 index 0000000..afedfe5 --- /dev/null +++ b/sync/protocol/managed_user_shared_setting_specifics.proto @@ -0,0 +1,29 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Sync protocol datatype extension for managed user shared settings. + +// Update proto_value_conversions{.h,.cc,_unittest.cc} if you change +// any fields in this file. + +syntax = "proto2"; + +option optimize_for = LITE_RUNTIME; +option retain_unknown_fields = true; + +package sync_pb; + +// Properties of managed user shared setting sync objects. +message ManagedUserSharedSettingSpecifics { + // The MU ID for the managed user to whom the setting applies. + optional string mu_id = 1; + // The key of the setting. + optional string key = 2; + // The setting value. The setting is a JSON encoding of an arbitrary + // Javascript value. + optional string value = 3; + // This flag is set by the server to acknowledge that it has committed a + // change to a setting. + optional bool acknowledged = 4 [default = false]; +} diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc index 5c8a7ab..a7ccdf2 100644 --- a/sync/protocol/proto_value_conversions.cc +++ b/sync/protocol/proto_value_conversions.cc @@ -567,6 +567,16 @@ base::DictionaryValue* ManagedUserSpecificsToValue( return value; } +base::DictionaryValue* ManagedUserSharedSettingSpecificsToValue( + const sync_pb::ManagedUserSharedSettingSpecifics& proto) { + base::DictionaryValue* value = new base::DictionaryValue(); + SET_STR(mu_id); + SET_STR(key); + SET_STR(value); + SET_BOOL(acknowledged); + return value; +} + base::DictionaryValue* NigoriSpecificsToValue( const sync_pb::NigoriSpecifics& proto) { base::DictionaryValue* value = new base::DictionaryValue(); @@ -725,6 +735,8 @@ base::DictionaryValue* EntitySpecificsToValue( SET_FIELD(favicon_tracking, FaviconTrackingSpecificsToValue); SET_FIELD(history_delete_directive, HistoryDeleteDirectiveSpecificsToValue); SET_FIELD(managed_user_setting, ManagedUserSettingSpecificsToValue); + SET_FIELD(managed_user_shared_setting, + ManagedUserSharedSettingSpecificsToValue); SET_FIELD(managed_user, ManagedUserSpecificsToValue); SET_FIELD(nigori, NigoriSpecificsToValue); SET_FIELD(password, PasswordSpecificsToValue); diff --git a/sync/protocol/proto_value_conversions.h b/sync/protocol/proto_value_conversions.h index 9bf45e32..9357031 100644 --- a/sync/protocol/proto_value_conversions.h +++ b/sync/protocol/proto_value_conversions.h @@ -47,6 +47,7 @@ class HistoryDeleteDirectiveSpecifics; class KeystoreEncryptionFlagsSpecifics; class Media; class ManagedUserSettingSpecifics; +class ManagedUserSharedSettingSpecifics; class ManagedUserSpecifics; class NigoriSpecifics; class PasswordSpecifics; @@ -230,6 +231,11 @@ SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSettingSpecificsToValue( SYNC_EXPORT_PRIVATE base::DictionaryValue* ManagedUserSpecificsToValue( const sync_pb::ManagedUserSpecifics& managed_user_specifics); +SYNC_EXPORT_PRIVATE base::DictionaryValue* + ManagedUserSharedSettingSpecificsToValue( + const sync_pb::ManagedUserSharedSettingSpecifics& + managed_user_shared_setting_specifics); + SYNC_EXPORT_PRIVATE base::DictionaryValue* MediaToValue( const sync_pb::Media& media); diff --git a/sync/protocol/proto_value_conversions_unittest.cc b/sync/protocol/proto_value_conversions_unittest.cc index 1366dd5..986c7a9 100644 --- a/sync/protocol/proto_value_conversions_unittest.cc +++ b/sync/protocol/proto_value_conversions_unittest.cc @@ -24,6 +24,8 @@ #include "sync/protocol/favicon_image_specifics.pb.h" #include "sync/protocol/favicon_tracking_specifics.pb.h" #include "sync/protocol/managed_user_setting_specifics.pb.h" +#include "sync/protocol/managed_user_shared_setting_specifics.pb.h" +#include "sync/protocol/managed_user_specifics.pb.h" #include "sync/protocol/nigori_specifics.pb.h" #include "sync/protocol/password_specifics.pb.h" #include "sync/protocol/preference_specifics.pb.h" @@ -53,7 +55,7 @@ TEST_F(ProtoValueConversionsTest, ProtoChangeCheck) { // If this number changes, that means we added or removed a data // type. Don't forget to add a unit test for {New // type}SpecificsToValue below. - EXPECT_EQ(30, MODEL_TYPE_COUNT); + EXPECT_EQ(31, MODEL_TYPE_COUNT); // We'd also like to check if we changed any field in our messages. // However, that's hard to do: sizeof could work, but it's @@ -210,6 +212,10 @@ TEST_F(ProtoValueConversionsTest, ManagedUserSpecificsToValue) { TestSpecificsToValue(ManagedUserSpecificsToValue); } +TEST_F(ProtoValueConversionsTest, ManagedUserSharedSettingSpecificsToValue) { + TestSpecificsToValue(ManagedUserSharedSettingSpecificsToValue); +} + TEST_F(ProtoValueConversionsTest, NigoriSpecificsToValue) { TestSpecificsToValue(NigoriSpecificsToValue); } @@ -275,6 +281,7 @@ TEST_F(ProtoValueConversionsTest, EntitySpecificsToValue) { SET_FIELD(favicon_tracking); SET_FIELD(history_delete_directive); SET_FIELD(managed_user_setting); + SET_FIELD(managed_user_shared_setting); SET_FIELD(managed_user); SET_FIELD(nigori); SET_FIELD(password); diff --git a/sync/protocol/sync.proto b/sync/protocol/sync.proto index fa6d8ea..449c836 100644 --- a/sync/protocol/sync.proto +++ b/sync/protocol/sync.proto @@ -35,6 +35,7 @@ import "get_updates_caller_info.proto"; import "history_delete_directive_specifics.proto"; import "nigori_specifics.proto"; import "managed_user_setting_specifics.proto"; +import "managed_user_shared_setting_specifics.proto"; import "managed_user_specifics.proto"; import "password_specifics.proto"; import "preference_specifics.proto"; @@ -120,6 +121,8 @@ message EntitySpecifics { optional FaviconImageSpecifics favicon_image = 182019; optional ManagedUserSettingSpecifics managed_user_setting = 186662; optional ManagedUserSpecifics managed_user = 194582; + optional ManagedUserSharedSettingSpecifics managed_user_shared_setting = + 202026; optional ArticleSpecifics article = 223759; optional AppListSpecifics app_list = 229170; } diff --git a/sync/sync_proto.gypi b/sync/sync_proto.gypi index 968ee9dd..29b80d0 100644 --- a/sync/sync_proto.gypi +++ b/sync/sync_proto.gypi @@ -31,6 +31,7 @@ 'protocol/history_delete_directive_specifics.proto', 'protocol/nigori_specifics.proto', 'protocol/managed_user_setting_specifics.proto', + 'protocol/managed_user_shared_setting_specifics.proto', 'protocol/managed_user_specifics.proto', 'protocol/password_specifics.proto', 'protocol/preference_specifics.proto', diff --git a/sync/syncable/model_type.cc b/sync/syncable/model_type.cc index fa33118..ecc62fe 100644 --- a/sync/syncable/model_type.cc +++ b/sync/syncable/model_type.cc @@ -110,6 +110,9 @@ void AddDefaultFieldValue(ModelType datatype, case MANAGED_USERS: specifics->mutable_managed_user(); break; + case MANAGED_USER_SHARED_SETTINGS: + specifics->mutable_managed_user_shared_setting(); + break; case ARTICLES: specifics->mutable_article(); break; @@ -206,6 +209,8 @@ int GetSpecificsFieldNumberFromModelType(ModelType model_type) { return sync_pb::EntitySpecifics::kManagedUserSettingFieldNumber; case MANAGED_USERS: return sync_pb::EntitySpecifics::kManagedUserFieldNumber; + case MANAGED_USER_SHARED_SETTINGS: + return sync_pb::EntitySpecifics::kManagedUserSharedSettingFieldNumber; case ARTICLES: return sync_pb::EntitySpecifics::kArticleFieldNumber; default: @@ -330,6 +335,9 @@ ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) { if (specifics.has_managed_user()) return MANAGED_USERS; + if (specifics.has_managed_user_shared_setting()) + return MANAGED_USER_SHARED_SETTINGS; + if (specifics.has_article()) return ARTICLES; @@ -386,6 +394,9 @@ ModelTypeSet EncryptableUserTypes() { encryptable_user_types.Remove(MANAGED_USER_SETTINGS); // Managed users are not encrypted since they are managed server-side. encryptable_user_types.Remove(MANAGED_USERS); + // Managed user shared settings are not encrypted since they are managed + // server-side and shared between manager and supervised user. + encryptable_user_types.Remove(MANAGED_USER_SHARED_SETTINGS); // Proxy types have no sync representation and are therefore not encrypted. // Note however that proxy types map to one or more protocol types, which // may or may not be encrypted themselves. @@ -500,6 +511,8 @@ const char* ModelTypeToString(ModelType model_type) { return "Managed User Settings"; case MANAGED_USERS: return "Managed Users"; + case MANAGED_USER_SHARED_SETTINGS: + return "Managed User Shared Settings"; case ARTICLES: return "Articles"; case PROXY_TABS: @@ -577,6 +590,8 @@ int ModelTypeToHistogramInt(ModelType model_type) { return 28; case APP_LIST: return 29; + case MANAGED_USER_SHARED_SETTINGS: + return 30; // Silence a compiler warning. case MODEL_TYPE_COUNT: return 0; @@ -664,6 +679,8 @@ ModelType ModelTypeFromString(const std::string& model_type_string) { return MANAGED_USER_SETTINGS; else if (model_type_string == "Managed Users") return MANAGED_USERS; + else if (model_type_string == "Managed User Shared Settings") + return MANAGED_USER_SHARED_SETTINGS; else if (model_type_string == "Articles") return ARTICLES; else if (model_type_string == "Tabs") @@ -760,6 +777,8 @@ std::string ModelTypeToRootTag(ModelType type) { return "google_chrome_managed_user_settings"; case MANAGED_USERS: return "google_chrome_managed_users"; + case MANAGED_USER_SHARED_SETTINGS: + return "google_chrome_managed_user_shared_settings"; case ARTICLES: return "google_chrome_articles"; case PROXY_TABS: @@ -802,6 +821,8 @@ const char kFaviconImageNotificationType[] = "FAVICON_IMAGE"; const char kFaviconTrackingNotificationType[] = "FAVICON_TRACKING"; const char kManagedUserSettingNotificationType[] = "MANAGED_USER_SETTING"; const char kManagedUserNotificationType[] = "MANAGED_USER"; +const char kManagedUserSharedSettingNotificationType[] = + "MANAGED_USER_SHARED_SETTING"; const char kArticleNotificationType[] = "ARTICLE"; } // namespace @@ -886,6 +907,9 @@ bool RealModelTypeToNotificationType(ModelType model_type, case MANAGED_USERS: *notification_type = kManagedUserNotificationType; return true; + case MANAGED_USER_SHARED_SETTINGS: + *notification_type = kManagedUserSharedSettingNotificationType; + return true; case ARTICLES: *notification_type = kArticleNotificationType; return true; @@ -976,6 +1000,9 @@ bool NotificationTypeToRealModelType(const std::string& notification_type, } else if (notification_type == kManagedUserNotificationType) { *model_type = MANAGED_USERS; return true; + } else if (notification_type == kManagedUserSharedSettingNotificationType) { + *model_type = MANAGED_USER_SHARED_SETTINGS; + return true; } else if (notification_type == kArticleNotificationType) { *model_type = ARTICLES; return true; diff --git a/sync/syncable/nigori_util.cc b/sync/syncable/nigori_util.cc index 107a68f..af0545e 100644 --- a/sync/syncable/nigori_util.cc +++ b/sync/syncable/nigori_util.cc @@ -242,7 +242,7 @@ void UpdateNigoriFromEncryptedTypes(ModelTypeSet encrypted_types, bool encrypt_everything, sync_pb::NigoriSpecifics* nigori) { nigori->set_encrypt_everything(encrypt_everything); - COMPILE_ASSERT(30 == MODEL_TYPE_COUNT, UpdateEncryptedTypes); + COMPILE_ASSERT(31 == MODEL_TYPE_COUNT, UpdateEncryptedTypes); nigori->set_encrypt_bookmarks( encrypted_types.Has(BOOKMARKS)); nigori->set_encrypt_preferences( @@ -278,7 +278,7 @@ ModelTypeSet GetEncryptedTypesFromNigori( return ModelTypeSet::All(); ModelTypeSet encrypted_types; - COMPILE_ASSERT(30 == MODEL_TYPE_COUNT, UpdateEncryptedTypes); + COMPILE_ASSERT(31 == MODEL_TYPE_COUNT, UpdateEncryptedTypes); if (nigori.encrypt_bookmarks()) encrypted_types.Put(BOOKMARKS); if (nigori.encrypt_preferences()) diff --git a/sync/tools/testserver/chromiumsync.py b/sync/tools/testserver/chromiumsync.py index 496cb6a..79eb114 100644 --- a/sync/tools/testserver/chromiumsync.py +++ b/sync/tools/testserver/chromiumsync.py @@ -40,6 +40,7 @@ import favicon_tracking_specifics_pb2 import history_delete_directive_specifics_pb2 import managed_user_setting_specifics_pb2 import managed_user_specifics_pb2 +import managed_user_shared_setting_specifics_pb2 import nigori_specifics_pb2 import password_specifics_pb2 import preference_specifics_pb2 @@ -74,6 +75,7 @@ ALL_TYPES = ( EXTENSIONS, HISTORY_DELETE_DIRECTIVE, MANAGED_USER_SETTING, + MANAGED_USER_SHARED_SETTING, MANAGED_USER, NIGORI, PASSWORD, @@ -86,7 +88,7 @@ ALL_TYPES = ( TYPED_URL, EXTENSION_SETTINGS, FAVICON_IMAGES, - FAVICON_TRACKING) = range(28) + FAVICON_TRACKING) = range(29) # An enumeration on the frequency at which the server should send errors # to the client. This would be specified by the url that triggers the error. @@ -119,6 +121,8 @@ SYNC_TYPE_TO_DESCRIPTOR = { FAVICON_IMAGES: SYNC_TYPE_FIELDS['favicon_image'], FAVICON_TRACKING: SYNC_TYPE_FIELDS['favicon_tracking'], HISTORY_DELETE_DIRECTIVE: SYNC_TYPE_FIELDS['history_delete_directive'], + MANAGED_USER_SHARED_SETTING: + SYNC_TYPE_FIELDS['managed_user_shared_setting'], MANAGED_USER_SETTING: SYNC_TYPE_FIELDS['managed_user_setting'], MANAGED_USER: SYNC_TYPE_FIELDS['managed_user'], NIGORI: SYNC_TYPE_FIELDS['nigori'], @@ -526,6 +530,9 @@ class SyncDataModel(object): PermanentItem('google_chrome_managed_users', name='Managed Users', parent_tag=ROOT_ID, sync_type=MANAGED_USER), + PermanentItem('google_chrome_managed_user_shared_settings', + name='Managed User Shared Settings', + parent_tag=ROOT_ID, sync_type=MANAGED_USER_SHARED_SETTING), PermanentItem('google_chrome_nigori', name='Nigori', parent_tag=ROOT_ID, sync_type=NIGORI), PermanentItem('google_chrome_passwords', name='Passwords', diff --git a/sync/util/data_type_histogram.h b/sync/util/data_type_histogram.h index e3a8d6f..11be1ec 100644 --- a/sync/util/data_type_histogram.h +++ b/sync/util/data_type_histogram.h @@ -114,6 +114,9 @@ case ::syncer::MANAGED_USERS: \ PER_DATA_TYPE_MACRO("ManagedUser"); \ break; \ + case ::syncer::MANAGED_USER_SHARED_SETTINGS: \ + PER_DATA_TYPE_MACRO("ManagedUserSharedSetting"); \ + break; \ case ::syncer::ARTICLES: \ PER_DATA_TYPE_MACRO("Article"); \ break; \ |