summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralbertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-09 20:28:46 +0000
committeralbertb@chromium.org <albertb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-09 20:28:46 +0000
commit9b55ffc6446732df180a70e0898e12103fc6b4b2 (patch)
treeacf2c465c3583089db3864a7232e814c811d13f4
parent92e09378ac701637d3057a9d1200c9d7c3b6d04f (diff)
downloadchromium_src-9b55ffc6446732df180a70e0898e12103fc6b4b2.zip
chromium_src-9b55ffc6446732df180a70e0898e12103fc6b4b2.tar.gz
chromium_src-9b55ffc6446732df180a70e0898e12103fc6b4b2.tar.bz2
sync: Add PriorityPreference protobuf and supporting code.
BUG=168648 Review URL: https://chromiumcodereview.appspot.com/11734009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175874 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/test_profile_sync_service.cc9
-rw-r--r--chrome/browser/sync/user_selectable_sync_type.h1
-rw-r--r--sync/internal_api/base_node.cc6
-rw-r--r--sync/internal_api/public/base/model_type.h5
-rw-r--r--sync/internal_api/public/base_node.h5
-rw-r--r--sync/internal_api/public/write_node.h5
-rw-r--r--sync/internal_api/sync_manager_impl_unittest.cc3
-rw-r--r--sync/internal_api/write_node.cc7
-rw-r--r--sync/protocol/priority_preference_specifics.proto21
-rw-r--r--sync/protocol/proto_value_conversions.cc10
-rw-r--r--sync/protocol/proto_value_conversions.h4
-rw-r--r--sync/protocol/proto_value_conversions_unittest.cc8
-rw-r--r--sync/protocol/sync.proto2
-rw-r--r--sync/protocol/sync_proto.gyp1
-rw-r--r--sync/syncable/model_type.cc24
-rw-r--r--sync/util/data_type_histogram.h3
18 files changed, 111 insertions, 6 deletions
diff --git a/chrome/browser/sync/glue/model_association_manager.cc b/chrome/browser/sync/glue/model_association_manager.cc
index 15d8365..7ce9a2a 100644
--- a/chrome/browser/sync/glue/model_association_manager.cc
+++ b/chrome/browser/sync/glue/model_association_manager.cc
@@ -30,6 +30,7 @@ static const syncer::ModelType kStartOrder[] = {
syncer::EXPERIMENTS, // Listed for completeness.
syncer::BOOKMARKS, // UI thread datatypes.
syncer::PREFERENCES,
+ syncer::PRIORITY_PREFERENCES,
syncer::EXTENSIONS,
syncer::APPS,
syncer::THEMES,
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
index aabef52..7296d00 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -1308,7 +1308,7 @@ void ProfileSyncService::UpdateSelectedTypesHistogram(
browser_sync::user_selectable_type::TYPED_URLS
};
- COMPILE_ASSERT(21 == syncer::MODEL_TYPE_COUNT, UpdateCustomConfigHistogram);
+ COMPILE_ASSERT(22 == syncer::MODEL_TYPE_COUNT, UpdateCustomConfigHistogram);
COMPILE_ASSERT(arraysize(model_types) ==
browser_sync::user_selectable_type::SELECTABLE_DATATYPE_COUNT,
UpdateCustomConfigHistogram);
diff --git a/chrome/browser/sync/test_profile_sync_service.cc b/chrome/browser/sync/test_profile_sync_service.cc
index 978b7ef..4a15312 100644
--- a/chrome/browser/sync/test_profile_sync_service.cc
+++ b/chrome/browser/sync/test_profile_sync_service.cc
@@ -26,9 +26,10 @@ using syncer::sessions::SyncSessionSnapshot;
using syncer::sessions::SyncSourceInfo;
using syncer::UserShare;
using syncer::syncable::Directory;
-using syncer::NIGORI;
using syncer::DEVICE_INFO;
using syncer::EXPERIMENTS;
+using syncer::NIGORI;
+using syncer::PRIORITY_PREFERENCES;
namespace browser_sync {
@@ -136,7 +137,7 @@ void SyncBackendHostForProfileSyncTest
if (!directory->InitialSyncEndedForType(NIGORI)) {
syncer::TestUserShare::CreateRoot(NIGORI, user_share);
- // A side effect of adding the NIGORI mode (normally done by the
+ // A side effect of adding the NIGORI node (normally done by the
// syncer) is a decryption attempt, which will fail the first time.
}
@@ -148,6 +149,10 @@ void SyncBackendHostForProfileSyncTest
syncer::TestUserShare::CreateRoot(EXPERIMENTS, user_share);
}
+ if (!directory->InitialSyncEndedForType(PRIORITY_PREFERENCES)) {
+ syncer::TestUserShare::CreateRoot(PRIORITY_PREFERENCES, user_share);
+ }
+
restored_types = syncer::ModelTypeSet::All();
}
diff --git a/chrome/browser/sync/user_selectable_sync_type.h b/chrome/browser/sync/user_selectable_sync_type.h
index ee18c02..a9785f9 100644
--- a/chrome/browser/sync/user_selectable_sync_type.h
+++ b/chrome/browser/sync/user_selectable_sync_type.h
@@ -44,6 +44,7 @@ enum UserSelectableSyncType {
// APP_NOTIFICATIONS,
// DEVICE_INFO,
// EXPERIMENTS,
+ // PRIORITY_PREFERENCES,
// Number of sync datatypes exposed to the user via checboxes in the UI.
SELECTABLE_DATATYPE_COUNT = 10,
diff --git a/sync/internal_api/base_node.cc b/sync/internal_api/base_node.cc
index f30c36e..4ae318b 100644
--- a/sync/internal_api/base_node.cc
+++ b/sync/internal_api/base_node.cc
@@ -343,6 +343,12 @@ const sync_pb::ExperimentsSpecifics& BaseNode::GetExperimentsSpecifics() const {
return GetEntitySpecifics().experiments();
}
+const sync_pb::PriorityPreferenceSpecifics&
+ BaseNode::GetPriorityPreferenceSpecifics() const {
+ DCHECK_EQ(GetModelType(), PRIORITY_PREFERENCES);
+ return GetEntitySpecifics().priority_preference();
+}
+
const sync_pb::EntitySpecifics& BaseNode::GetEntitySpecifics() const {
return GetUnencryptedSpecifics(GetEntry());
}
diff --git a/sync/internal_api/public/base/model_type.h b/sync/internal_api/public/base/model_type.h
index c0ac0ed..d8a5348 100644
--- a/sync/internal_api/public/base/model_type.h
+++ b/sync/internal_api/public/base/model_type.h
@@ -94,7 +94,10 @@ enum ModelType {
DEVICE_INFO,
// Flags to enable experimental features.
EXPERIMENTS,
- LAST_CONTROL_MODEL_TYPE = EXPERIMENTS,
+ // These preferences are never encrypted so that they can be applied before
+ // the encryption system is fully initialized.
+ PRIORITY_PREFERENCES,
+ LAST_CONTROL_MODEL_TYPE = PRIORITY_PREFERENCES,
LAST_REAL_MODEL_TYPE = LAST_CONTROL_MODEL_TYPE,
diff --git a/sync/internal_api/public/base_node.h b/sync/internal_api/public/base_node.h
index b3946fb..3602923 100644
--- a/sync/internal_api/public/base_node.h
+++ b/sync/internal_api/public/base_node.h
@@ -161,6 +161,11 @@ class SYNC_EXPORT BaseNode {
// data. Can only be called if GetModelType() == EXPERIMENTS.
const sync_pb::ExperimentsSpecifics& GetExperimentsSpecifics() const;
+ // Getter specific to the PRIORITY_PREFERENCE datatype. Returns protobuf
+ // data. Can only be called if GetModelType() == PRIORITY_PREFERENCE.
+ const sync_pb::PriorityPreferenceSpecifics&
+ GetPriorityPreferenceSpecifics() const;
+
const sync_pb::EntitySpecifics& GetEntitySpecifics() const;
// Returns the local external ID associated with the node.
diff --git a/sync/internal_api/public/write_node.h b/sync/internal_api/public/write_node.h
index 3d843a0..73baa6f 100644
--- a/sync/internal_api/public/write_node.h
+++ b/sync/internal_api/public/write_node.h
@@ -166,6 +166,11 @@ class SYNC_EXPORT WriteNode : public BaseNode {
// Should only be called if GetModelType() == EXPERIMENTS.
void SetExperimentsSpecifics(const sync_pb::ExperimentsSpecifics& specifics);
+ // Set the priority preference specifics.
+ // Should only be called if GetModelType() == PRIORITY_PREFERENCE.
+ void SetPriorityPreferenceSpecifics(
+ const sync_pb::PriorityPreferenceSpecifics& specifics);
+
// Implementation of BaseNode's abstract virtual accessors.
virtual const syncable::Entry* GetEntry() const OVERRIDE;
diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
index b4ca259..fd981f1 100644
--- a/sync/internal_api/sync_manager_impl_unittest.cc
+++ b/sync/internal_api/sync_manager_impl_unittest.cc
@@ -863,6 +863,7 @@ class SyncManagerTest : public testing::Test,
(*out)[SESSIONS] = GROUP_PASSIVE;
(*out)[PASSWORDS] = GROUP_PASSIVE;
(*out)[PREFERENCES] = GROUP_PASSIVE;
+ (*out)[PRIORITY_PREFERENCES] = GROUP_PASSIVE;
}
virtual void OnChangesApplied(
@@ -1247,7 +1248,7 @@ TEST_F(SyncManagerTest, GetChildNodeIds) {
const ListValue* nodes = NULL;
ASSERT_TRUE(return_args.Get().GetList(0, &nodes));
ASSERT_TRUE(nodes);
- EXPECT_EQ(8u, nodes->GetSize());
+ EXPECT_EQ(9u, nodes->GetSize());
}
TEST_F(SyncManagerTest, GetChildNodeIdsFailure) {
diff --git a/sync/internal_api/write_node.cc b/sync/internal_api/write_node.cc
index 2057c25..5628571 100644
--- a/sync/internal_api/write_node.cc
+++ b/sync/internal_api/write_node.cc
@@ -198,6 +198,13 @@ void WriteNode::SetExperimentsSpecifics(
SetEntitySpecifics(entity_specifics);
}
+void WriteNode::SetPriorityPreferenceSpecifics(
+ const sync_pb::PriorityPreferenceSpecifics& new_value) {
+ sync_pb::EntitySpecifics entity_specifics;
+ entity_specifics.mutable_priority_preference()->CopyFrom(new_value);
+ SetEntitySpecifics(entity_specifics);
+}
+
void WriteNode::SetEntitySpecifics(
const sync_pb::EntitySpecifics& new_value) {
ModelType new_specifics_type =
diff --git a/sync/protocol/priority_preference_specifics.proto b/sync/protocol/priority_preference_specifics.proto
new file mode 100644
index 0000000..e52e0be
--- /dev/null
+++ b/sync/protocol/priority_preference_specifics.proto
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 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 priority preferences.
+
+// 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 a synced priority preference.
+message PriorityPreferenceSpecifics {
+ optional string name = 1;
+ optional string value = 2;
+}
diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc
index d72b6de..97a989d 100644
--- a/sync/protocol/proto_value_conversions.cc
+++ b/sync/protocol/proto_value_conversions.cc
@@ -24,6 +24,7 @@
#include "sync/protocol/nigori_specifics.pb.h"
#include "sync/protocol/password_specifics.pb.h"
#include "sync/protocol/preference_specifics.pb.h"
+#include "sync/protocol/priority_preference_specifics.pb.h"
#include "sync/protocol/proto_enum_conversions.h"
#include "sync/protocol/search_engine_specifics.pb.h"
#include "sync/protocol/session_specifics.pb.h"
@@ -299,6 +300,14 @@ DictionaryValue* BookmarkSpecificsToValue(
return value;
}
+DictionaryValue* PriorityPreferenceSpecificsToValue(
+ const sync_pb::PriorityPreferenceSpecifics& proto) {
+ DictionaryValue* value = new DictionaryValue();
+ SET_STR(name);
+ SET_STR(value);
+ return value;
+}
+
DictionaryValue* DeviceInfoSpecificsToValue(
const sync_pb::DeviceInfoSpecifics& proto) {
DictionaryValue* value = new DictionaryValue();
@@ -466,6 +475,7 @@ DictionaryValue* EntitySpecificsToValue(
SET_FIELD(nigori, NigoriSpecificsToValue);
SET_FIELD(password, PasswordSpecificsToValue);
SET_FIELD(preference, PreferenceSpecificsToValue);
+ SET_FIELD(priority_preference, PriorityPreferenceSpecificsToValue);
SET_FIELD(search_engine, SearchEngineSpecificsToValue);
SET_FIELD(session, SessionSpecificsToValue);
SET_FIELD(synced_notification, SyncedNotificationSpecificsToValue);
diff --git a/sync/protocol/proto_value_conversions.h b/sync/protocol/proto_value_conversions.h
index a553e56..9003194 100644
--- a/sync/protocol/proto_value_conversions.h
+++ b/sync/protocol/proto_value_conversions.h
@@ -43,6 +43,7 @@ class NigoriSpecifics;
class PasswordSpecifics;
class PasswordSpecificsData;
class PreferenceSpecifics;
+class PriorityPreferenceSpecifics;
class SearchEngineSpecifics;
class SessionHeader;
class SessionSpecifics;
@@ -141,6 +142,9 @@ SYNC_EXPORT_PRIVATE base::DictionaryValue* DeviceInfoSpecificsToValue(
SYNC_EXPORT_PRIVATE base::DictionaryValue* ExperimentsSpecificsToValue(
const sync_pb::ExperimentsSpecifics& proto);
+SYNC_EXPORT_PRIVATE base::DictionaryValue* PriorityPreferenceSpecificsToValue(
+ const sync_pb::PriorityPreferenceSpecifics& proto);
+
SYNC_EXPORT_PRIVATE base::DictionaryValue* ExtensionSettingSpecificsToValue(
const sync_pb::ExtensionSettingSpecifics& extension_setting_specifics);
diff --git a/sync/protocol/proto_value_conversions_unittest.cc b/sync/protocol/proto_value_conversions_unittest.cc
index bc4e652..2bac903 100644
--- a/sync/protocol/proto_value_conversions_unittest.cc
+++ b/sync/protocol/proto_value_conversions_unittest.cc
@@ -24,6 +24,7 @@
#include "sync/protocol/nigori_specifics.pb.h"
#include "sync/protocol/password_specifics.pb.h"
#include "sync/protocol/preference_specifics.pb.h"
+#include "sync/protocol/priority_preference_specifics.pb.h"
#include "sync/protocol/search_engine_specifics.pb.h"
#include "sync/protocol/session_specifics.pb.h"
#include "sync/protocol/sync.pb.h"
@@ -49,7 +50,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(21, MODEL_TYPE_COUNT);
+ EXPECT_EQ(22, 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
@@ -138,6 +139,10 @@ TEST_F(ProtoValueConversionsTest, BookmarkSpecificsData) {
EXPECT_EQ(icon_url, encoded_icon_url);
}
+TEST_F(ProtoValueConversionsTest, PriorityPreferenceSpecificsToValue) {
+ TestSpecificsToValue(PriorityPreferenceSpecificsToValue);
+}
+
TEST_F(ProtoValueConversionsTest, DeviceInfoSpecificsToValue) {
TestSpecificsToValue(DeviceInfoSpecificsToValue);
}
@@ -212,6 +217,7 @@ TEST_F(ProtoValueConversionsTest, EntitySpecificsToValue) {
SET_FIELD(password);
SET_FIELD(device_info);
SET_FIELD(preference);
+ SET_FIELD(priority_preference);
SET_FIELD(search_engine);
SET_FIELD(session);
SET_FIELD(synced_notification);
diff --git a/sync/protocol/sync.proto b/sync/protocol/sync.proto
index f8bdd02..6aea1d0 100644
--- a/sync/protocol/sync.proto
+++ b/sync/protocol/sync.proto
@@ -31,6 +31,7 @@ import "history_delete_directive_specifics.proto";
import "nigori_specifics.proto";
import "password_specifics.proto";
import "preference_specifics.proto";
+import "priority_preference_specifics.proto";
import "search_engine_specifics.proto";
import "session_specifics.proto";
import "sync_enums.proto";
@@ -105,6 +106,7 @@ message EntitySpecifics {
optional SyncedNotificationSpecifics synced_notification = 153108;
optional DeviceInfoSpecifics device_info = 154522;
optional ExperimentsSpecifics experiments = 161496;
+ optional PriorityPreferenceSpecifics priority_preference = 163425;
}
message SyncEntity {
diff --git a/sync/protocol/sync_proto.gyp b/sync/protocol/sync_proto.gyp
index 8f890f6..4745044 100644
--- a/sync/protocol/sync_proto.gyp
+++ b/sync/protocol/sync_proto.gyp
@@ -28,6 +28,7 @@
'nigori_specifics.proto',
'password_specifics.proto',
'preference_specifics.proto',
+ 'priority_preference_specifics.proto',
'search_engine_specifics.proto',
'session_specifics.proto',
'sync.proto',
diff --git a/sync/syncable/model_type.cc b/sync/syncable/model_type.cc
index a6ee409..1b0bee4 100644
--- a/sync/syncable/model_type.cc
+++ b/sync/syncable/model_type.cc
@@ -85,6 +85,9 @@ void AddDefaultFieldValue(ModelType datatype,
case EXPERIMENTS:
specifics->mutable_experiments();
break;
+ case PRIORITY_PREFERENCES:
+ specifics->mutable_priority_preference();
+ break;
default:
NOTREACHED() << "No known extension for model type.";
}
@@ -156,6 +159,9 @@ int GetSpecificsFieldNumberFromModelType(ModelType model_type) {
case EXPERIMENTS:
return sync_pb::EntitySpecifics::kExperimentsFieldNumber;
break;
+ case PRIORITY_PREFERENCES:
+ return sync_pb::EntitySpecifics::kPriorityPreferenceFieldNumber;
+ break;
default:
NOTREACHED() << "No known extension for model type.";
return 0;
@@ -260,6 +266,9 @@ ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) {
if (specifics.has_experiments())
return EXPERIMENTS;
+ if (specifics.has_priority_preference())
+ return PRIORITY_PREFERENCES;
+
return UNSPECIFIED;
}
@@ -290,6 +299,9 @@ ModelTypeSet ControlTypes() {
set.Put(ModelTypeFromInt(i));
}
+ // TODO(albertb): Re-enable this when the server supports it.
+ set.Remove(PRIORITY_PREFERENCES);
+
return set;
}
@@ -344,6 +356,8 @@ const char* ModelTypeToString(ModelType model_type) {
return "Device Info";
case EXPERIMENTS:
return "Experiments";
+ case PRIORITY_PREFERENCES:
+ return "Priority Preferences";
default:
break;
}
@@ -417,6 +431,8 @@ ModelType ModelTypeFromString(const std::string& model_type_string) {
return DEVICE_INFO;
else if (model_type_string == "Experiments")
return EXPERIMENTS;
+ else if (model_type_string == "Priority Preferences")
+ return PRIORITY_PREFERENCES;
else
NOTREACHED() << "No known model type corresponding to "
<< model_type_string << ".";
@@ -493,6 +509,8 @@ std::string ModelTypeToRootTag(ModelType type) {
return "google_chrome_device_info";
case EXPERIMENTS:
return "google_chrome_experiments";
+ case PRIORITY_PREFERENCES:
+ return "google_chrome_priority_preferences";
default:
break;
}
@@ -523,6 +541,7 @@ const char kHistoryDeleteDirectiveNotificationType[] =
const char kSyncedNotificationType[] = "SYNCED_NOTIFICATION";
const char kDeviceInfoNotificationType[] = "DEVICE_INFO";
const char kExperimentsNotificationType[] = "EXPERIMENTS";
+const char kPriorityPreferenceNotificationType[] = "PRIORITY_PREFERENCE";
} // namespace
bool RealModelTypeToNotificationType(ModelType model_type,
@@ -583,6 +602,8 @@ bool RealModelTypeToNotificationType(ModelType model_type,
case EXPERIMENTS:
*notification_type = kExperimentsNotificationType;
return true;
+ case PRIORITY_PREFERENCES:
+ *notification_type = kPriorityPreferenceNotificationType;
default:
break;
}
@@ -644,6 +665,9 @@ bool NotificationTypeToRealModelType(const std::string& notification_type,
} else if (notification_type == kDeviceInfoNotificationType) {
*model_type = DEVICE_INFO;;
return true;
+ } else if (notification_type == kPriorityPreferenceNotificationType) {
+ *model_type = PRIORITY_PREFERENCES;
+ return true;
}
*model_type = UNSPECIFIED;
return false;
diff --git a/sync/util/data_type_histogram.h b/sync/util/data_type_histogram.h
index 790c4fe..7b69cf8 100644
--- a/sync/util/data_type_histogram.h
+++ b/sync/util/data_type_histogram.h
@@ -93,6 +93,9 @@
case ::syncer::EXPERIMENTS: \
PER_DATA_TYPE_MACRO("Experiments"); \
break; \
+ case ::syncer::PRIORITY_PREFERENCES :\
+ PER_DATA_TYPE_MACRO("PriorityPreferences"); \
+ break; \
default: \
NOTREACHED() << "Unknown datatype " \
<< ::syncer::ModelTypeToString(datatype); \