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

Unified Diff: sync/internal_api/public/base/invalidation.cc

Issue 23441042: Refactor common invalidation framework types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 3 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: sync/internal_api/public/base/invalidation.cc
diff --git a/sync/internal_api/public/base/invalidation.cc b/sync/internal_api/public/base/invalidation.cc
index b503d07c4afa99905a688d70eeb85c8d6d80a425..fe64ccd6670ae42785fcb8dab5211936d14c63fd 100644
--- a/sync/internal_api/public/base/invalidation.cc
+++ b/sync/internal_api/public/base/invalidation.cc
@@ -5,100 +5,132 @@
#include "sync/internal_api/public/base/invalidation.h"
#include <cstddef>
+
+#include "base/json/json_string_value_serializer.h"
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
+#include "sync/notifier/invalidation_util.h"
namespace syncer {
namespace {
-// Hopefully enough bytes for uniqueness.
-const size_t kBytesInHandle = 16;
-} // namespace
-
-AckHandle AckHandle::CreateUnique() {
- // This isn't a valid UUID, so we don't attempt to format it like one.
- uint8 random_bytes[kBytesInHandle];
- base::RandBytes(random_bytes, sizeof(random_bytes));
- return AckHandle(base::HexEncode(random_bytes, sizeof(random_bytes)),
- base::Time::Now());
+const char kObjectIdKey[] = "objectId";
+const char kIsUnknownVersionKey[] = "isUnknownVersion";
+const char kVersionKey[] = "version";
+const char kPayloadKey[] = "payload";
}
-AckHandle AckHandle::InvalidAckHandle() {
- return AckHandle(std::string(), base::Time());
+Invalidation Invalidation::Init(
+ const invalidation::ObjectId& id,
+ int64 version,
+ const std::string& payload) {
+ return Invalidation(id, false, version, payload, AckHandle::CreateUnique());
}
-bool AckHandle::Equals(const AckHandle& other) const {
- return state_ == other.state_ && timestamp_ == other.timestamp_;
+Invalidation Invalidation::InitUnknownVersion(
+ const invalidation::ObjectId& id) {
+ return Invalidation(id, true, -1, "", AckHandle::CreateUnique());
tim (not reviewing) 2013/09/20 21:53:46 std::string vs ""
rlarocque 2013/09/23 18:38:19 Done.
}
-scoped_ptr<base::DictionaryValue> AckHandle::ToValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->SetString("state", state_);
- value->SetString("timestamp",
- base::Int64ToString(timestamp_.ToInternalValue()));
- return value.Pass();
-}
+Invalidation::Invalidation()
+ : ack_handle_(AckHandle::InvalidAckHandle()) {}
-bool AckHandle::ResetFromValue(const base::DictionaryValue& value) {
- if (!value.GetString("state", &state_))
- return false;
- std::string timestamp_as_string;
- if (!value.GetString("timestamp", &timestamp_as_string))
- return false;
- int64 timestamp_value;
- if (!base::StringToInt64(timestamp_as_string, &timestamp_value))
- return false;
- timestamp_ = base::Time::FromInternalValue(timestamp_value);
- return true;
-}
+Invalidation::~Invalidation() {}
-bool AckHandle::IsValid() const {
- return !state_.empty();
+invalidation::ObjectId Invalidation::GetObjectId() const {
tim (not reviewing) 2013/09/20 21:53:46 style guide would have this called id(). Or objec
rlarocque 2013/09/23 18:38:19 True. Lately, I've been reluctant to follow that
+ return id_;
}
-AckHandle::AckHandle(const std::string& state, base::Time timestamp)
- : state_(state), timestamp_(timestamp) {
+bool Invalidation::IsUnknownVersion() const {
+ return is_unknown_version_;
}
-AckHandle::~AckHandle() {
+int64 Invalidation::GetVersion() const {
+ DCHECK(!is_unknown_version_);
tim (not reviewing) 2013/09/20 21:53:46 should be named version()... this is logically jus
rlarocque 2013/09/23 18:38:19 Done.
+ return version_;
}
-const int64 Invalidation::kUnknownVersion = -1;
+const std::string& Invalidation::GetPayload() const {
+ DCHECK(!is_unknown_version_);
+ return payload_;
+}
-Invalidation::Invalidation()
- : version(kUnknownVersion), ack_handle(AckHandle::InvalidAckHandle()) {
+const AckHandle& Invalidation::GetAckHandle() const {
+ return ack_handle_;
}
-Invalidation::~Invalidation() {
+void Invalidation::SetAckHandle(const AckHandle& ack_handle) {
+ ack_handle_ = ack_handle;
}
-bool Invalidation::Equals(const Invalidation& other) const {
- return (version == other.version) && (payload == other.payload) &&
- ack_handle.Equals(other.ack_handle);
+bool Invalidation::operator==(const Invalidation& other) const {
+ return id_ == other.id_
+ && is_unknown_version_ == other.is_unknown_version_
+ && version_ == other.version_
+ && payload_ == other.payload_;
tim (not reviewing) 2013/09/20 21:53:46 You're not including ack_handle_, was that intenti
rlarocque 2013/09/23 18:38:19 It was more or less intentional. The decision wil
tim (not reviewing) 2013/09/24 21:16:54 That makes sense. However in general, and especia
rlarocque 2013/09/25 00:40:00 Fixed. I had to add some boilerplate to get some
}
scoped_ptr<base::DictionaryValue> Invalidation::ToValue() const {
scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->SetString("version", base::Int64ToString(version));
- value->SetString("payload", payload);
- value->Set("ackHandle", ack_handle.ToValue().release());
+ value->Set(kObjectIdKey, ObjectIdToValue(id_).release());
+ if (is_unknown_version_) {
+ value->SetBoolean(kIsUnknownVersionKey, true);
+ } else {
+ value->SetBoolean(kIsUnknownVersionKey, false);
+ value->SetString(kVersionKey, base::Int64ToString(version_));
+ value->SetString(kPayloadKey, payload_);
+ }
return value.Pass();
}
bool Invalidation::ResetFromValue(const base::DictionaryValue& value) {
- const base::DictionaryValue* ack_handle_value = NULL;
- std::string version_as_string;
- if (value.GetString("version", &version_as_string)) {
- if (!base::StringToInt64(version_as_string, &version))
- return false;
+ const base::DictionaryValue* object_id_dict;
+ if (!value.GetDictionary(kObjectIdKey, &object_id_dict)
+ || !ObjectIdFromValue(*object_id_dict, &id_)) {
+ DLOG(WARNING) << "Failed to parse id";
+ return false;
+ }
+ if (!value.GetBoolean(kIsUnknownVersionKey, &is_unknown_version_)) {
+ DLOG(WARNING) << "Failed to parse is_unknown_version flag";
+ return false;
+ }
+ if (is_unknown_version_) {
+ version_ = -1;
+ payload_ = "";
tim (not reviewing) 2013/09/20 21:53:46 std::string
rlarocque 2013/09/23 18:38:19 Done.
} else {
- version = kUnknownVersion;
+ std::string version_as_string;
+ if (!value.GetString(kVersionKey, &version_as_string)
+ || !base::StringToInt64(version_as_string, &version_)) {
+ DLOG(WARNING) << "Failed to parse version";
+ return false;
+ }
+ if (!value.GetString(kPayloadKey, &payload_)) {
+ DLOG(WARNING) << "Failed to parse payload";
+ return false;
+ }
}
- return
- value.GetString("payload", &payload) &&
- value.GetDictionary("ackHandle", &ack_handle_value) &&
- ack_handle.ResetFromValue(*ack_handle_value);
+ return true;
}
+std::string Invalidation::ToString() const {
+ std::string output;
+ JSONStringValueSerializer serializer(&output);
+ serializer.set_pretty_print(true);
+ serializer.Serialize(*ToValue().get());
+ return output;
+}
+
+Invalidation::Invalidation(
+ const invalidation::ObjectId& id,
+ bool is_unknown_version,
+ int64 version,
+ const std::string& payload,
+ AckHandle ack_handle)
+ : id_(id),
+ is_unknown_version_(is_unknown_version),
+ version_(version),
+ payload_(payload),
+ ack_handle_(ack_handle) {}
+
} // namespace syncer

Powered by Google App Engine
This is Rietveld 408576698