ack_handle.cc 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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.
  4. #include "components/invalidation/public/ack_handle.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include "base/rand_util.h"
  8. #include "base/strings/string_number_conversions.h"
  9. #include "base/values.h"
  10. namespace invalidation {
  11. namespace {
  12. // Hopefully enough bytes for uniqueness.
  13. const size_t kBytesInHandle = 16;
  14. } // namespace
  15. AckHandle AckHandle::CreateUnique() {
  16. // This isn't a valid UUID, so we don't attempt to format it like one.
  17. uint8_t random_bytes[kBytesInHandle];
  18. base::RandBytes(random_bytes, sizeof(random_bytes));
  19. return AckHandle(base::HexEncode(random_bytes, sizeof(random_bytes)),
  20. base::Time::Now());
  21. }
  22. AckHandle AckHandle::InvalidAckHandle() {
  23. return AckHandle(std::string(), base::Time());
  24. }
  25. bool AckHandle::Equals(const AckHandle& other) const {
  26. return state_ == other.state_ && timestamp_ == other.timestamp_;
  27. }
  28. base::Value::Dict AckHandle::ToValue() const {
  29. base::Value::Dict value;
  30. value.Set("state", state_);
  31. value.Set("timestamp", base::NumberToString(timestamp_.ToInternalValue()));
  32. return value;
  33. }
  34. bool AckHandle::ResetFromValue(const base::Value::Dict& value) {
  35. const std::string* state = value.FindString("state");
  36. if (!state)
  37. return false;
  38. state_ = *state;
  39. const std::string* timestamp_as_string = value.FindString("timestamp");
  40. if (!timestamp_as_string)
  41. return false;
  42. int64_t timestamp_value;
  43. if (!base::StringToInt64(*timestamp_as_string, &timestamp_value))
  44. return false;
  45. timestamp_ = base::Time::FromInternalValue(timestamp_value);
  46. return true;
  47. }
  48. bool AckHandle::IsValid() const {
  49. return !state_.empty();
  50. }
  51. AckHandle::AckHandle(const std::string& state, base::Time timestamp)
  52. : state_(state), timestamp_(timestamp) {
  53. }
  54. AckHandle::AckHandle(const AckHandle& other) = default;
  55. AckHandle& AckHandle::operator=(const AckHandle& other) = default;
  56. AckHandle::~AckHandle() = default;
  57. } // namespace invalidation