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

ash / session / session_activation_observer_holder.h [blame]

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_SESSION_SESSION_ACTIVATION_OBSERVER_HOLDER_H_
#define ASH_SESSION_SESSION_ACTIVATION_OBSERVER_HOLDER_H_

#include <map>
#include <memory>

#include "base/observer_list.h"
#include "components/account_id/account_id.h"

namespace ash {

class SessionActivationObserver;

class SessionActivationObserverHolder {
 public:
  SessionActivationObserverHolder();

  SessionActivationObserverHolder(const SessionActivationObserverHolder&) =
      delete;
  SessionActivationObserverHolder& operator=(
      const SessionActivationObserverHolder&) = delete;

  ~SessionActivationObserverHolder();

  void AddForAccountId(const AccountId& account_id,
                       SessionActivationObserver* observer);
  void RemoveForAccountId(const AccountId& account_id,
                          SessionActivationObserver* observer);

  void NotifyActiveSessionChanged(const AccountId& from, const AccountId& to);

  void NotifyLockStateChanged(bool locked);

 private:
  void PruneObserverMap();

  using Observers = base::ObserverList<SessionActivationObserver>;
  std::map<AccountId, std::unique_ptr<Observers>> observer_map_;
};

}  // namespace ash

#endif  // ASH_SESSION_SESSION_ACTIVATION_OBSERVER_HOLDER_H_