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/ack_handle.h"
8 #include "base/rand_util.h"
9 #include "base/strings/string_number_conversions.h"
10 #include "base/values.h"
15 // Hopefully enough bytes for uniqueness.
16 const size_t kBytesInHandle
= 16;
19 AckHandle
AckHandle::CreateUnique() {
20 // This isn't a valid UUID, so we don't attempt to format it like one.
21 uint8 random_bytes
[kBytesInHandle
];
22 base::RandBytes(random_bytes
, sizeof(random_bytes
));
23 return AckHandle(base::HexEncode(random_bytes
, sizeof(random_bytes
)),
27 AckHandle
AckHandle::InvalidAckHandle() {
28 return AckHandle(std::string(), base::Time());
31 bool AckHandle::Equals(const AckHandle
& other
) const {
32 return state_
== other
.state_
&& timestamp_
== other
.timestamp_
;
35 scoped_ptr
<base::DictionaryValue
> AckHandle::ToValue() const {
36 scoped_ptr
<base::DictionaryValue
> value(new base::DictionaryValue());
37 value
->SetString("state", state_
);
38 value
->SetString("timestamp",
39 base::Int64ToString(timestamp_
.ToInternalValue()));
43 bool AckHandle::ResetFromValue(const base::DictionaryValue
& value
) {
44 if (!value
.GetString("state", &state_
))
46 std::string timestamp_as_string
;
47 if (!value
.GetString("timestamp", ×tamp_as_string
))
49 int64 timestamp_value
;
50 if (!base::StringToInt64(timestamp_as_string
, ×tamp_value
))
52 timestamp_
= base::Time::FromInternalValue(timestamp_value
);
56 bool AckHandle::IsValid() const {
57 return !state_
.empty();
60 AckHandle::AckHandle(const std::string
& state
, base::Time timestamp
)
61 : state_(state
), timestamp_(timestamp
) {
64 AckHandle::~AckHandle() {