1// Copyright (c) 2011 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//
5// The AllStatus object watches various sync engine components and aggregates
6// the status of all of them into one place.
7
8#ifndef CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_
9#define CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_
10#pragma once
11
12#include <map>
13
14#include "base/memory/scoped_ptr.h"
15#include "base/synchronization/lock.h"
16#include "chrome/browser/sync/engine/syncapi.h"
17#include "chrome/browser/sync/engine/syncer_types.h"
18
19namespace browser_sync {
20
21class ScopedStatusLock;
22class ServerConnectionManager;
23class Syncer;
24class SyncerThread;
25struct AuthWatcherEvent;
26struct ServerConnectionEvent;
27
28class AllStatus : public SyncEngineEventListener {
29  friend class ScopedStatusLock;
30 public:
31
32  AllStatus();
33  ~AllStatus();
34
35  void HandleServerConnectionEvent(const ServerConnectionEvent& event);
36
37  void HandleAuthWatcherEvent(const AuthWatcherEvent& event);
38
39  virtual void OnSyncEngineEvent(const SyncEngineEvent& event);
40
41  sync_api::SyncManager::Status status() const;
42
43  void SetNotificationsEnabled(bool notifications_enabled);
44
45  void IncrementNotificationsSent();
46
47  void IncrementNotificationsReceived();
48
49 protected:
50  // Examines syncer to calculate syncing and the unsynced count,
51  // and returns a Status with new values.
52  sync_api::SyncManager::Status CalcSyncing(const SyncEngineEvent& event) const;
53  sync_api::SyncManager::Status CreateBlankStatus() const;
54
55  // Examines status to see what has changed, updates old_status in place.
56  void CalcStatusChanges();
57
58  sync_api::SyncManager::Status status_;
59
60  mutable base::Lock mutex_;  // Protects all data members.
61  DISALLOW_COPY_AND_ASSIGN(AllStatus);
62};
63
64class ScopedStatusLock {
65 public:
66  explicit ScopedStatusLock(AllStatus* allstatus);
67  ~ScopedStatusLock();
68 protected:
69  AllStatus* allstatus_;
70};
71
72}  // namespace browser_sync
73
74#endif  // CHROME_BROWSER_SYNC_ENGINE_ALL_STATUS_H_
75