15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/sessions/sync_session_snapshot.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "sync/protocol/proto_enum_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sessions { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncSessionSnapshot::SyncSessionSnapshot() 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : is_silenced_(false), 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_encryption_conflicts_(0), 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_hierarchy_conflicts_(0), 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_server_conflicts_(0), 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications_enabled_(false), 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_entries_(0), 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_entries_by_type_(MODEL_TYPE_COUNT, 0), 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_to_delete_entries_by_type_(MODEL_TYPE_COUNT, 0), 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_initialized_(false) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncSessionSnapshot::SyncSessionSnapshot( 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ModelNeutralState& model_neutral_state, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProgressMarkerMap& download_progress_markers, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_silenced, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_encryption_conflicts, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_hierarchy_conflicts, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_server_conflicts, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool notifications_enabled, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_entries, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time sync_start_time, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<int>& num_entries_by_type, 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::vector<int>& num_to_delete_entries_by_type, 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : model_neutral_state_(model_neutral_state), 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_progress_markers_(download_progress_markers), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_silenced_(is_silenced), 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_encryption_conflicts_(num_encryption_conflicts), 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_hierarchy_conflicts_(num_hierarchy_conflicts), 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_server_conflicts_(num_server_conflicts), 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications_enabled_(notifications_enabled), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_entries_(num_entries), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_start_time_(sync_start_time), 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_entries_by_type_(num_entries_by_type), 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_to_delete_entries_by_type_(num_to_delete_entries_by_type), 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) legacy_updates_source_(legacy_updates_source), 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_initialized_(true) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncSessionSnapshot::~SyncSessionSnapshot() {} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* SyncSessionSnapshot::ToValue() const { 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numSuccessfulCommits", 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_successful_commits); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numSuccessfulBookmarkCommits", 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_successful_bookmark_commits); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numUpdatesDownloadedTotal", 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_updates_downloaded_total); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numTombstoneUpdatesDownloadedTotal", 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_tombstone_updates_downloaded_total); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numReflectedUpdatesDownloadedTotal", 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_reflected_updates_downloaded_total); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numLocalOverwrites", 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_local_overwrites); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numServerOverwrites", 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_neutral_state_.num_server_overwrites); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->Set("downloadProgressMarkers", 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProgressMarkerMapToValue(download_progress_markers_).release()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetBoolean("isSilenced", is_silenced_); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't care too much if we lose precision here, also. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numEncryptionConflicts", 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_encryption_conflicts_); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numHierarchyConflicts", 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_hierarchy_conflicts_); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numServerConflicts", 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_server_conflicts_); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetInteger("numEntries", num_entries_); 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) value->SetString("legacySource", 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetUpdatesSourceString(legacy_updates_source_)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->SetBoolean("notificationsEnabled", notifications_enabled_); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> counter_entries( 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new base::DictionaryValue()); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; i++) { 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> type_entries(new base::DictionaryValue()); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_entries->SetInteger("numEntries", num_entries_by_type_[i]); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_entries->SetInteger("numToDeleteEntries", 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_to_delete_entries_by_type_[i]); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string model_type = ModelTypeToString(static_cast<ModelType>(i)); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) counter_entries->Set(model_type, type_entries.release()); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value->Set("counter_entries", counter_entries.release()); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return value.release(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SyncSessionSnapshot::ToString() const { 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> value(ToValue()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONWriter::WriteWithOptions(value.get(), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONWriter::OPTIONS_PRETTY_PRINT, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &json); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return json; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ProgressMarkerMap& 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncSessionSnapshot::download_progress_markers() const { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_progress_markers_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncSessionSnapshot::is_silenced() const { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_silenced_; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SyncSessionSnapshot::num_encryption_conflicts() const { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_encryption_conflicts_; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SyncSessionSnapshot::num_hierarchy_conflicts() const { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_hierarchy_conflicts_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SyncSessionSnapshot::num_server_conflicts() const { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_server_conflicts_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncSessionSnapshot::notifications_enabled() const { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return notifications_enabled_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t SyncSessionSnapshot::num_entries() const { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return num_entries_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time SyncSessionSnapshot::sync_start_time() const { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sync_start_time_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncSessionSnapshot::is_initialized() const { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_initialized_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::vector<int>& SyncSessionSnapshot::num_entries_by_type() const { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return num_entries_by_type_; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::vector<int>& 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SyncSessionSnapshot::num_to_delete_entries_by_type() const { 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return num_to_delete_entries_by_type_; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)sync_pb::GetUpdatesCallerInfo::GetUpdatesSource 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)SyncSessionSnapshot::legacy_updates_source() const { 160a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return legacy_updates_source_; 161a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace sessions 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 165