1 // Copyright 2014 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 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_
6 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_
11 #include "base/macros.h"
12 #include "base/observer_list.h"
14 namespace password_manager
{
17 class PasswordManagerClient
;
19 // The router stands between PasswordManagerClient instances and log receivers.
20 // During the process of saving a password, the password manager code generates
21 // the log strings, and passes them to the router. The router distributes the
22 // logs to the receivers for displaying.
28 // Passes logs to the router. Only call when there are receivers registered.
29 void ProcessLog(const std::string
& text
);
31 // All four (Unr|R)egister* methods below are safe to call from the
32 // constructor of the registered object, because they do not call that object,
33 // and the router only runs on a single thread.
35 // The clients must register to be notified about whether there are some
36 // receivers or not. RegisterClient adds |client| to the right observer list
37 // and returns true iff there are some receivers registered.
38 bool RegisterClient(PasswordManagerClient
* client
);
39 // Remove |client| from the observers list.
40 void UnregisterClient(PasswordManagerClient
* client
);
42 // The receivers must register to get updates with new logs in the future.
43 // RegisterReceiver adds |receiver| to the right observer list, and returns
44 // the logs accumulated so far. (It returns by value, not const ref, to
45 // provide a snapshot as opposed to a link to |accumulated_logs_|.)
46 std::string
RegisterReceiver(LogReceiver
* receiver
);
47 // Remove |receiver| from the observers list.
48 void UnregisterReceiver(LogReceiver
* receiver
);
51 // Observer lists for clients and receivers. The |true| in the template
52 // specialisation means that they will check that all observers were removed
54 base::ObserverList
<PasswordManagerClient
, true> clients_
;
55 base::ObserverList
<LogReceiver
, true> receivers_
;
57 // Logs accumulated since the first receiver was registered.
58 std::string accumulated_logs_
;
60 DISALLOW_COPY_AND_ASSIGN(LogRouter
);
63 } // namespace password_manager
65 #endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_