1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/invalidation/invalidation_util.h"
10 #include "base/json/json_writer.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/values.h"
13 #include "components/invalidation/invalidation.h"
14 #include "google/cacheinvalidation/include/types.h"
15 #include "google/cacheinvalidation/types.pb.h"
19 bool ObjectIdLessThan::operator()(const invalidation::ObjectId
& lhs
,
20 const invalidation::ObjectId
& rhs
) const {
21 return (lhs
.source() < rhs
.source()) ||
22 (lhs
.source() == rhs
.source() && lhs
.name() < rhs
.name());
25 bool InvalidationVersionLessThan::operator()(const Invalidation
& a
,
26 const Invalidation
& b
) const {
27 DCHECK(a
.object_id() == b
.object_id())
28 << "a: " << ObjectIdToString(a
.object_id()) << ", "
29 << "b: " << ObjectIdToString(a
.object_id());
31 if (a
.is_unknown_version() && !b
.is_unknown_version())
34 if (!a
.is_unknown_version() && b
.is_unknown_version())
37 if (a
.is_unknown_version() && b
.is_unknown_version())
40 return a
.version() < b
.version();
43 scoped_ptr
<base::DictionaryValue
> ObjectIdToValue(
44 const invalidation::ObjectId
& object_id
) {
45 scoped_ptr
<base::DictionaryValue
> value(new base::DictionaryValue());
46 value
->SetInteger("source", object_id
.source());
47 value
->SetString("name", object_id
.name());
51 bool ObjectIdFromValue(const base::DictionaryValue
& value
,
52 invalidation::ObjectId
* out
) {
53 *out
= invalidation::ObjectId();
56 if (!value
.GetInteger("source", &source
) || !value
.GetString("name", &name
)) {
59 *out
= invalidation::ObjectId(source
, name
);
63 std::string
ObjectIdToString(const invalidation::ObjectId
& object_id
) {
64 scoped_ptr
<base::DictionaryValue
> value(ObjectIdToValue(object_id
));
66 base::JSONWriter::Write(value
.get(), &str
);