OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/engine/all_status.h" | 5 #include "chrome/browser/sync/engine/all_status.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/port.h" | 10 #include "base/port.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 static const AllStatusEvent shutdown_event = | 43 static const AllStatusEvent shutdown_event = |
44 { AllStatusEvent::SHUTDOWN, init_status }; | 44 { AllStatusEvent::SHUTDOWN, init_status }; |
45 | 45 |
46 AllStatus::AllStatus() : status_(init_status), | 46 AllStatus::AllStatus() : status_(init_status), |
47 channel_(new Channel(shutdown_event)) { | 47 channel_(new Channel(shutdown_event)) { |
48 status_.initial_sync_ended = true; | 48 status_.initial_sync_ended = true; |
49 status_.notifications_enabled = false; | 49 status_.notifications_enabled = false; |
50 } | 50 } |
51 | 51 |
52 AllStatus::~AllStatus() { | 52 AllStatus::~AllStatus() { |
| 53 syncer_thread_hookup_.reset(); |
53 delete channel_; | 54 delete channel_; |
54 } | 55 } |
55 | 56 |
56 void AllStatus::WatchConnectionManager(ServerConnectionManager* conn_mgr) { | 57 void AllStatus::WatchConnectionManager(ServerConnectionManager* conn_mgr) { |
57 conn_mgr_hookup_.reset(NewEventListenerHookup(conn_mgr->channel(), this, | 58 conn_mgr_hookup_.reset(NewEventListenerHookup(conn_mgr->channel(), this, |
58 &AllStatus::HandleServerConnectionEvent)); | 59 &AllStatus::HandleServerConnectionEvent)); |
59 } | 60 } |
60 | 61 |
61 void AllStatus::WatchSyncerThread(SyncerThread* syncer_thread) { | 62 void AllStatus::WatchSyncerThread(SyncerThread* syncer_thread) { |
62 syncer_thread_hookup_.reset( | 63 syncer_thread_hookup_.reset( |
63 NewEventListenerHookup(syncer_thread->relay_channel(), this, | 64 syncer_thread->relay_channel()->AddObserver(this)); |
64 &AllStatus::HandleSyncerEvent)); | |
65 } | 65 } |
66 | 66 |
67 AllStatus::Status AllStatus::CreateBlankStatus() const { | 67 AllStatus::Status AllStatus::CreateBlankStatus() const { |
68 Status status = status_; | 68 Status status = status_; |
69 status.syncing = true; | 69 status.syncing = true; |
70 status.unsynced_count = 0; | 70 status.unsynced_count = 0; |
71 status.conflicting_count = 0; | 71 status.conflicting_count = 0; |
72 status.initial_sync_ended = false; | 72 status.initial_sync_ended = false; |
73 status.syncer_stuck = false; | 73 status.syncer_stuck = false; |
74 status.max_consecutive_errors = 0; | 74 status.max_consecutive_errors = 0; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 } else { | 180 } else { |
181 lock.set_notify_plan(DONT_NOTIFY); | 181 lock.set_notify_plan(DONT_NOTIFY); |
182 } | 182 } |
183 break; | 183 break; |
184 default: | 184 default: |
185 lock.set_notify_plan(DONT_NOTIFY); | 185 lock.set_notify_plan(DONT_NOTIFY); |
186 break; | 186 break; |
187 } | 187 } |
188 } | 188 } |
189 | 189 |
190 void AllStatus::HandleSyncerEvent(const SyncerEvent& event) { | 190 void AllStatus::HandleChannelEvent(const SyncerEvent& event) { |
191 ScopedStatusLockWithNotify lock(this); | 191 ScopedStatusLockWithNotify lock(this); |
192 switch (event.what_happened) { | 192 switch (event.what_happened) { |
193 case SyncerEvent::COMMITS_SUCCEEDED: | 193 case SyncerEvent::COMMITS_SUCCEEDED: |
194 break; | 194 break; |
195 case SyncerEvent::SYNC_CYCLE_ENDED: | 195 case SyncerEvent::SYNC_CYCLE_ENDED: |
196 case SyncerEvent::STATUS_CHANGED: | 196 case SyncerEvent::STATUS_CHANGED: |
197 status_ = CalcSyncing(event); | 197 status_ = CalcSyncing(event); |
198 break; | 198 break; |
199 case SyncerEvent::SHUTDOWN_USE_WITH_CARE: | 199 case SyncerEvent::SHUTDOWN_USE_WITH_CARE: |
200 // We're safe to use this value here because we don't call into the syncer | 200 // We're safe to use this value here because we don't call into the syncer |
201 // or block on any processes. | 201 // or block on any processes. |
202 lock.set_notify_plan(DONT_NOTIFY); | 202 lock.set_notify_plan(DONT_NOTIFY); |
| 203 syncer_thread_hookup_.reset(); |
203 break; | 204 break; |
204 case SyncerEvent::OVER_QUOTA: | 205 case SyncerEvent::OVER_QUOTA: |
205 LOG(WARNING) << "User has gone over quota."; | 206 LOG(WARNING) << "User has gone over quota."; |
206 lock.NotifyOverQuota(); | 207 lock.NotifyOverQuota(); |
207 break; | 208 break; |
208 case SyncerEvent::REQUEST_SYNC_NUDGE: | 209 case SyncerEvent::REQUEST_SYNC_NUDGE: |
209 lock.set_notify_plan(DONT_NOTIFY); | 210 lock.set_notify_plan(DONT_NOTIFY); |
210 break; | 211 break; |
211 case SyncerEvent::PAUSED: | 212 case SyncerEvent::PAUSED: |
212 lock.set_notify_plan(DONT_NOTIFY); | 213 lock.set_notify_plan(DONT_NOTIFY); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 allstatus_->mutex_.Release(); | 292 allstatus_->mutex_.Release(); |
292 if (event_.what_changed) | 293 if (event_.what_changed) |
293 allstatus_->channel()->NotifyListeners(event_); | 294 allstatus_->channel()->NotifyListeners(event_); |
294 } | 295 } |
295 | 296 |
296 void ScopedStatusLockWithNotify::NotifyOverQuota() { | 297 void ScopedStatusLockWithNotify::NotifyOverQuota() { |
297 event_.what_changed |= AllStatusEvent::OVER_QUOTA; | 298 event_.what_changed |= AllStatusEvent::OVER_QUOTA; |
298 } | 299 } |
299 | 300 |
300 } // namespace browser_sync | 301 } // namespace browser_sync |
OLD | NEW |