summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-19 03:28:07 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-19 03:28:07 +0000
commitde002cb39af0edd9512e9ee4df11b18e719b3d23 (patch)
treeb3d1277834fd4be89da5dc27880b8c43c454bb1b
parentd37601c8c9096c4f185067b3e5f54d1ae001108b (diff)
downloadchromium_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.cc1
-rw-r--r--chrome/browser/sync/profile_sync_service.cc2
-rw-r--r--chrome/browser/sync/sync_prefs.cc2
-rw-r--r--chrome/browser/ui/webui/sync_setup_handler.cc2
-rw-r--r--chrome/common/pref_names.cc2
-rw-r--r--chrome/common/pref_names.h1
-rw-r--r--sync/internal_api/public/base/model_type.h3
-rw-r--r--sync/protocol/managed_user_shared_setting_specifics.proto29
-rw-r--r--sync/protocol/proto_value_conversions.cc12
-rw-r--r--sync/protocol/proto_value_conversions.h6
-rw-r--r--sync/protocol/proto_value_conversions_unittest.cc9
-rw-r--r--sync/protocol/sync.proto3
-rw-r--r--sync/sync_proto.gypi1
-rw-r--r--sync/syncable/model_type.cc27
-rw-r--r--sync/syncable/nigori_util.cc4
-rw-r--r--sync/tools/testserver/chromiumsync.py9
-rw-r--r--sync/util/data_type_histogram.h3
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; \