Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: components/password_manager/core/browser/log_router.h

Issue 262583007: Password manager internals page service: introduction (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Also tests use the right namespace Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/password_manager/core/browser/log_router.h
diff --git a/components/password_manager/core/browser/log_router.h b/components/password_manager/core/browser/log_router.h
new file mode 100644
index 0000000000000000000000000000000000000000..c7ab218e4951433fd37ea73a7b3a13b2d79e2a67
--- /dev/null
+++ b/components/password_manager/core/browser/log_router.h
@@ -0,0 +1,68 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_
+#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_
+
+#include <set>
+#include <string>
+
+#include "base/macros.h"
+#include "base/observer_list.h"
+
+namespace password_manager {
+
+class PasswordManagerClient;
+class PasswordManagerLogger;
+
+// The router stands between PasswordManagerClient instances and log receivers.
+// During the process of saving a password, the password manager code generates
+// the log strings, and passes them to the router. The router distributes the
+// logs to the receivers for displaying.
+//
+// TODO(vabr): The receivers are objects of type PasswordManagerLogger. That
+// type should be renamed to LogReceiver instead.
+class LogRouter {
+ public:
+ LogRouter();
+ virtual ~LogRouter();
+
+ // Passes logs to the router. Only call when there are receivers registered.
+ void ProcessLog(const std::string& text);
+
+ // All four (Unr|R)egister* methods below are safe to call from the
+ // constructor of the registered object, because they do not call that object,
+ // and the router only runs on a single thread.
+
+ // The clients must register to be notified about whether there are some
+ // receivers or not. RegisterClient adds |client| to the right observer list
+ // and returns true iff there are some receivers registered.
+ bool RegisterClient(PasswordManagerClient* client);
+ // Remove |client| from the observers list.
+ void UnregisterClient(PasswordManagerClient* client);
+
+ // The receivers must register to get updates with new logs in the future.
+ // RegisterReceiver adds |receiver| to the right observer list, and returns
+ // the logs accumulated so far. (It returns by value, not const ref, to
+ // provide a snapshot as opposed to a link to |accumulated_logs_|.)
+ std::string RegisterReceiver(PasswordManagerLogger* receiver);
+ // Remove |receiver| from the observers list.
+ void UnregisterReceiver(PasswordManagerLogger* receiver);
+
+ private:
+ // Observer lists for clients and receivers. The |true| in the template
+ // specialisation means that they will check that all observers were removed
+ // on destruction.
+ ObserverList<PasswordManagerClient, true> clients_;
+ ObserverList<PasswordManagerLogger, true> receivers_;
+
+ // Logs accumulated since the first receiver was registered.
+ std::string accumulated_logs_;
+
+ DISALLOW_COPY_AND_ASSIGN(LogRouter);
+};
+
+} // namespace password_manager
+
+#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_LOG_ROUTER_H_
« no previous file with comments | « components/password_manager/core/browser/DEPS ('k') | components/password_manager/core/browser/log_router.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698