Home | History | Annotate | Download | only in browser
      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 
     13 LogRouter::LogRouter() {
     14 }
     15 
     16 LogRouter::~LogRouter() {
     17 }
     18 
     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 
     28 bool LogRouter::RegisterClient(PasswordManagerClient* client) {
     29   DCHECK(client);
     30   clients_.AddObserver(client);
     31   return receivers_.might_have_observers();
     32 }
     33 
     34 void LogRouter::UnregisterClient(PasswordManagerClient* client) {
     35   DCHECK(clients_.HasObserver(client));
     36   clients_.RemoveObserver(client);
     37 }
     38 
     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 
     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