summaryrefslogtreecommitdiffstats
path: root/chromium/sync/internal_api/public/sessions/sync_session_snapshot.h
blob: 97a97aa5965e0862bca13ce9a16165eb3c8cb15c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright 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.

#ifndef SYNC_INTERNAL_API_PUBLIC_SESSIONS_SYNC_SESSION_SNAPSHOT_H_
#define SYNC_INTERNAL_API_PUBLIC_SESSIONS_SYNC_SESSION_SNAPSHOT_H_

#include <string>

#include "base/basictypes.h"
#include "base/time/time.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/base/progress_marker_map.h"
#include "sync/internal_api/public/sessions/model_neutral_state.h"

namespace base {
class DictionaryValue;
}

namespace syncer {
namespace sessions {

// An immutable snapshot of state from a SyncSession.  Convenient to use as
// part of notifications as it is inherently thread-safe.
// TODO(zea): if copying this all over the place starts getting expensive,
// consider passing around immutable references instead of values.
// Default copy and assign welcome.
class SYNC_EXPORT SyncSessionSnapshot {
 public:
  SyncSessionSnapshot();
  SyncSessionSnapshot(
      const ModelNeutralState& model_neutral_state,
      const ProgressMarkerMap& download_progress_markers,
      bool is_silenced,
      int num_encryption_conflicts,
      int num_hierarchy_conflicts,
      int num_server_conflicts,
      bool notifications_enabled,
      size_t num_entries,
      base::Time sync_start_time,
      const std::vector<int>& num_entries_by_type,
      const std::vector<int>& num_to_delete_entries_by_type,
      sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source);
  ~SyncSessionSnapshot();

  // Caller takes ownership of the returned dictionary.
  base::DictionaryValue* ToValue() const;

  std::string ToString() const;

  ModelNeutralState model_neutral_state() const {
    return model_neutral_state_;
  }
  int64 num_server_changes_remaining() const;
  const ProgressMarkerMap& download_progress_markers() const;
  bool is_silenced() const;
  int num_encryption_conflicts() const;
  int num_hierarchy_conflicts() const;
  int num_server_conflicts() const;
  bool notifications_enabled() const;
  size_t num_entries() const;
  base::Time sync_start_time() const;
  const std::vector<int>& num_entries_by_type() const;
  const std::vector<int>& num_to_delete_entries_by_type() const;
  sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source() const;

  // Set iff this snapshot was not built using the default constructor.
  bool is_initialized() const;

 private:
  ModelNeutralState model_neutral_state_;
  ProgressMarkerMap download_progress_markers_;
  bool is_silenced_;
  int num_encryption_conflicts_;
  int num_hierarchy_conflicts_;
  int num_server_conflicts_;
  bool notifications_enabled_;
  size_t num_entries_;
  base::Time sync_start_time_;

  std::vector<int> num_entries_by_type_;
  std::vector<int> num_to_delete_entries_by_type_;

  // This enum value used to be an important part of the sync protocol, but is
  // now deprecated.  We continue to use it in the snapshot because there is
  // still some value in displaying it on the about:sync page.
  sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source_;

  bool is_initialized_;
};

}  // namespace sessions
}  // namespace syncer

#endif  // SYNC_INTERNAL_API_PUBLIC_SESSIONS_SYNC_SESSION_SNAPSHOT_H_