Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / components / password_manager / core / browser / log_router.h
blobf959dbad20e0e1e5ef2a568b5c83a8f1d2a7a5a2
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_
8 #include <set>
9 #include <string>
11 #include "base/macros.h"
12 #include "base/observer_list.h"
14 namespace password_manager {
16 class LogReceiver;
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.
23 class LogRouter {
24 public:
25 LogRouter();
26 virtual ~LogRouter();
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);
50 private:
51 // Observer lists for clients and receivers. The |true| in the template
52 // specialisation means that they will check that all observers were removed
53 // on destruction.
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_