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

Side by Side Diff: components/password_manager/core/browser/log_router.cc

Issue 2412073003: Remove FOR_EACH_OBSERVER from autofill and password_manager components (Closed)
Patch Set: Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/password_manager/core/browser/log_router.h" 5 #include "components/password_manager/core/browser/log_router.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "components/password_manager/core/browser/log_manager.h" 8 #include "components/password_manager/core/browser/log_manager.h"
9 #include "components/password_manager/core/browser/log_receiver.h" 9 #include "components/password_manager/core/browser/log_receiver.h"
10 10
11 namespace password_manager { 11 namespace password_manager {
12 12
13 LogRouter::LogRouter() = default; 13 LogRouter::LogRouter() = default;
14 14
15 LogRouter::~LogRouter() = default; 15 LogRouter::~LogRouter() = default;
16 16
17 void LogRouter::ProcessLog(const std::string& text) { 17 void LogRouter::ProcessLog(const std::string& text) {
18 // This may not be called when there are no receivers (i.e., the router is 18 // This may not be called when there are no receivers (i.e., the router is
19 // inactive), because in that case the logs cannot be displayed. 19 // inactive), because in that case the logs cannot be displayed.
20 DCHECK(receivers_.might_have_observers()); 20 DCHECK(receivers_.might_have_observers());
21 accumulated_logs_.append(text); 21 accumulated_logs_.append(text);
22 FOR_EACH_OBSERVER(LogReceiver, receivers_, LogSavePasswordProgress(text)); 22 for (LogReceiver& receiver : receivers_)
23 receiver.LogSavePasswordProgress(text);
23 } 24 }
24 25
25 bool LogRouter::RegisterManager(LogManager* manager) { 26 bool LogRouter::RegisterManager(LogManager* manager) {
26 DCHECK(manager); 27 DCHECK(manager);
27 managers_.AddObserver(manager); 28 managers_.AddObserver(manager);
28 return receivers_.might_have_observers(); 29 return receivers_.might_have_observers();
29 } 30 }
30 31
31 void LogRouter::UnregisterManager(LogManager* manager) { 32 void LogRouter::UnregisterManager(LogManager* manager) {
32 DCHECK(managers_.HasObserver(manager)); 33 DCHECK(managers_.HasObserver(manager));
33 managers_.RemoveObserver(manager); 34 managers_.RemoveObserver(manager);
34 } 35 }
35 36
36 std::string LogRouter::RegisterReceiver(LogReceiver* receiver) { 37 std::string LogRouter::RegisterReceiver(LogReceiver* receiver) {
37 DCHECK(receiver); 38 DCHECK(receiver);
38 DCHECK(accumulated_logs_.empty() || receivers_.might_have_observers()); 39 DCHECK(accumulated_logs_.empty() || receivers_.might_have_observers());
39 40
40 if (!receivers_.might_have_observers()) { 41 if (!receivers_.might_have_observers()) {
41 FOR_EACH_OBSERVER(LogManager, managers_, 42 for (LogManager& manager : managers_)
42 OnLogRouterAvailabilityChanged(true)); 43 manager.OnLogRouterAvailabilityChanged(true);
43 } 44 }
44 receivers_.AddObserver(receiver); 45 receivers_.AddObserver(receiver);
45 return accumulated_logs_; 46 return accumulated_logs_;
46 } 47 }
47 48
48 void LogRouter::UnregisterReceiver(LogReceiver* receiver) { 49 void LogRouter::UnregisterReceiver(LogReceiver* receiver) {
49 DCHECK(receivers_.HasObserver(receiver)); 50 DCHECK(receivers_.HasObserver(receiver));
50 receivers_.RemoveObserver(receiver); 51 receivers_.RemoveObserver(receiver);
51 if (!receivers_.might_have_observers()) { 52 if (!receivers_.might_have_observers()) {
52 // |accumulated_logs_| can become very long; use the swap instead of clear() 53 // |accumulated_logs_| can become very long; use the swap instead of clear()
53 // to ensure that the memory is freed. 54 // to ensure that the memory is freed.
54 std::string().swap(accumulated_logs_); 55 std::string().swap(accumulated_logs_);
55 FOR_EACH_OBSERVER(LogManager, managers_, 56 for (LogManager& manager : managers_)
56 OnLogRouterAvailabilityChanged(false)); 57 manager.OnLogRouterAvailabilityChanged(false);
57 } 58 }
58 } 59 }
59 60
60 } // namespace password_manager 61 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698