• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "components/password_manager/core/browser/log_router.h"
6 
7 #include "base/stl_util.h"
8 #include "components/password_manager/core/browser/log_receiver.h"
9 #include "components/password_manager/core/browser/password_manager_client.h"
10 
11 namespace password_manager {
12 
LogRouter()13 LogRouter::LogRouter() {
14 }
15 
~LogRouter()16 LogRouter::~LogRouter() {
17 }
18 
ProcessLog(const std::string & text)19 void LogRouter::ProcessLog(const std::string& text) {
20   // This may not be called when there are no receivers (i.e., the router is
21   // inactive), because in that case the logs cannot be displayed.
22   DCHECK(receivers_.might_have_observers());
23   accumulated_logs_.append(text);
24   FOR_EACH_OBSERVER(
25       LogReceiver, receivers_, LogSavePasswordProgress(text));
26 }
27 
RegisterClient(PasswordManagerClient * client)28 bool LogRouter::RegisterClient(PasswordManagerClient* client) {
29   DCHECK(client);
30   clients_.AddObserver(client);
31   return receivers_.might_have_observers();
32 }
33 
UnregisterClient(PasswordManagerClient * client)34 void LogRouter::UnregisterClient(PasswordManagerClient* client) {
35   DCHECK(clients_.HasObserver(client));
36   clients_.RemoveObserver(client);
37 }
38 
RegisterReceiver(LogReceiver * receiver)39 std::string LogRouter::RegisterReceiver(LogReceiver* receiver) {
40   DCHECK(receiver);
41   DCHECK(accumulated_logs_.empty() || receivers_.might_have_observers());
42 
43   if (!receivers_.might_have_observers()) {
44     FOR_EACH_OBSERVER(
45         PasswordManagerClient, clients_, OnLogRouterAvailabilityChanged(true));
46   }
47   receivers_.AddObserver(receiver);
48   return accumulated_logs_;
49 }
50 
UnregisterReceiver(LogReceiver * receiver)51 void LogRouter::UnregisterReceiver(LogReceiver* receiver) {
52   DCHECK(receivers_.HasObserver(receiver));
53   receivers_.RemoveObserver(receiver);
54   if (!receivers_.might_have_observers()) {
55     accumulated_logs_.clear();
56     FOR_EACH_OBSERVER(
57         PasswordManagerClient, clients_, OnLogRouterAvailabilityChanged(false));
58   }
59 }
60 
61 }  // namespace password_manager
62