| Index: components/password_manager/core/browser/log_router.cc
|
| diff --git a/components/password_manager/core/browser/log_router.cc b/components/password_manager/core/browser/log_router.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c8719a88152a177450b5d9d135d90ca178b79e2a
|
| --- /dev/null
|
| +++ b/components/password_manager/core/browser/log_router.cc
|
| @@ -0,0 +1,59 @@
|
| +// 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.
|
| +
|
| +#include "components/password_manager/core/browser/log_router.h"
|
| +
|
| +#include "base/stl_util.h"
|
| +#include "components/password_manager/core/browser/password_manager_client.h"
|
| +#include "components/password_manager/core/browser/password_manager_logger.h"
|
| +
|
| +namespace password_manager {
|
| +
|
| +LogRouter::LogRouter() {
|
| +}
|
| +
|
| +LogRouter::~LogRouter() {
|
| +}
|
| +
|
| +void LogRouter::ProcessLog(const std::string& text) {
|
| + // This may not be called when there are no receivers (i.e., the router is
|
| + // inactive), because in that case the logs cannot be displayed.
|
| + DCHECK(receivers_.might_have_observers());
|
| + accumulated_logs_.append(text);
|
| + FOR_EACH_OBSERVER(
|
| + PasswordManagerLogger, receivers_, LogSavePasswordProgress(text));
|
| +}
|
| +
|
| +bool LogRouter::RegisterClient(PasswordManagerClient* client) {
|
| + DCHECK(client);
|
| + clients_.AddObserver(client);
|
| + return receivers_.might_have_observers();
|
| +}
|
| +
|
| +void LogRouter::UnregisterClient(PasswordManagerClient* client) {
|
| + DCHECK(clients_.HasObserver(client));
|
| + clients_.RemoveObserver(client);
|
| +}
|
| +
|
| +std::string LogRouter::RegisterReceiver(PasswordManagerLogger* receiver) {
|
| + DCHECK(receiver);
|
| + DCHECK(accumulated_logs_.empty() || receivers_.might_have_observers());
|
| +
|
| + // TODO(vabr): Once the clients provide API for that, notify them if the
|
| + // number of receivers went from 0 to 1.
|
| + receivers_.AddObserver(receiver);
|
| + return accumulated_logs_;
|
| +}
|
| +
|
| +void LogRouter::UnregisterReceiver(PasswordManagerLogger* receiver) {
|
| + DCHECK(receivers_.HasObserver(receiver));
|
| + receivers_.RemoveObserver(receiver);
|
| + if (!receivers_.might_have_observers()) {
|
| + accumulated_logs_.clear();
|
| + // TODO(vabr): Once the clients provide API for that, notify them that the
|
| + // number of receivers went from 1 to 0.
|
| + }
|
| +}
|
| +
|
| +} // namespace password_manager
|
|
|