1 // Copyright (c) 2012 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 "sync/sessions/sync_session.h"
10 #include "base/logging.h"
11 #include "sync/internal_api/public/base/model_type.h"
12 #include "sync/internal_api/public/engine/model_safe_worker.h"
13 #include "sync/syncable/directory.h"
19 SyncSession
* SyncSession::Build(SyncSessionContext
* context
,
21 return new SyncSession(context
, delegate
);
24 SyncSession::SyncSession(
25 SyncSessionContext
* context
,
29 status_controller_
.reset(new StatusController());
32 SyncSession::~SyncSession() {}
34 SyncSessionSnapshot
SyncSession::TakeSnapshot() const {
35 return TakeSnapshotWithSource(sync_pb::GetUpdatesCallerInfo::UNKNOWN
);
38 SyncSessionSnapshot
SyncSession::TakeSnapshotWithSource(
39 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source
) const {
40 syncable::Directory
* dir
= context_
->directory();
42 ProgressMarkerMap download_progress_markers
;
43 for (int i
= FIRST_REAL_MODEL_TYPE
; i
< MODEL_TYPE_COUNT
; ++i
) {
44 ModelType
type(ModelTypeFromInt(i
));
45 dir
->GetDownloadProgressAsString(type
, &download_progress_markers
[type
]);
48 std::vector
<int> num_entries_by_type(MODEL_TYPE_COUNT
, 0);
49 std::vector
<int> num_to_delete_entries_by_type(MODEL_TYPE_COUNT
, 0);
50 dir
->CollectMetaHandleCounts(&num_entries_by_type
,
51 &num_to_delete_entries_by_type
);
53 SyncSessionSnapshot
snapshot(
54 status_controller_
->model_neutral_state(),
55 download_progress_markers
,
56 delegate_
->IsCurrentlyThrottled(),
57 status_controller_
->num_encryption_conflicts(),
58 status_controller_
->num_hierarchy_conflicts(),
59 status_controller_
->num_server_conflicts(),
60 context_
->notifications_enabled(),
61 dir
->GetEntriesCount(),
62 status_controller_
->sync_start_time(),
63 status_controller_
->poll_finish_time(),
65 num_to_delete_entries_by_type
,
66 legacy_updates_source
);
71 void SyncSession::SendSyncCycleEndEventNotification(
72 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source
) {
73 SyncCycleEvent
event(SyncCycleEvent::SYNC_CYCLE_ENDED
);
74 event
.snapshot
= TakeSnapshotWithSource(source
);
76 DVLOG(1) << "Sending cycle end event with snapshot: "
77 << event
.snapshot
.ToString();
78 FOR_EACH_OBSERVER(SyncEngineEventListener
,
79 *(context_
->listeners()),
80 OnSyncCycleEvent(event
));
83 void SyncSession::SendEventNotification(SyncCycleEvent::EventCause cause
) {
84 SyncCycleEvent
event(cause
);
85 event
.snapshot
= TakeSnapshot();
87 DVLOG(1) << "Sending event with snapshot: " << event
.snapshot
.ToString();
88 FOR_EACH_OBSERVER(SyncEngineEventListener
,
89 *(context_
->listeners()),
90 OnSyncCycleEvent(event
));
93 void SyncSession::SendProtocolEvent(const ProtocolEvent
& event
) {
94 FOR_EACH_OBSERVER(SyncEngineEventListener
,
95 *(context_
->listeners()),
96 OnProtocolEvent(event
));
99 } // namespace sessions
100 } // namespace syncer