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()13LogRouter::LogRouter() { 14 } 15 ~LogRouter()16LogRouter::~LogRouter() { 17 } 18 ProcessLog(const std::string & text)19void 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)28bool LogRouter::RegisterClient(PasswordManagerClient* client) { 29 DCHECK(client); 30 clients_.AddObserver(client); 31 return receivers_.might_have_observers(); 32 } 33 UnregisterClient(PasswordManagerClient * client)34void LogRouter::UnregisterClient(PasswordManagerClient* client) { 35 DCHECK(clients_.HasObserver(client)); 36 clients_.RemoveObserver(client); 37 } 38 RegisterReceiver(LogReceiver * receiver)39std::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)51void 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