Chromium Code Reviews| Index: chromeos/network/network_state_handler.cc |
| diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc |
| index 5f4738a6cdfa0335e61aa025d72dfdf589114e36..7396d45b6783c141286fdf527558c567d9df6469 100644 |
| --- a/chromeos/network/network_state_handler.cc |
| +++ b/chromeos/network/network_state_handler.cc |
| @@ -67,15 +67,21 @@ std::string ValueAsString(const base::Value& value) { |
| const char NetworkStateHandler::kDefaultCheckPortalList[] = |
| "ethernet,wifi,cellular"; |
| -NetworkStateHandler::NetworkStateHandler() : network_list_sorted_(false) { |
| -} |
| +NetworkStateHandler::NetworkStateHandler() {} |
| NetworkStateHandler::~NetworkStateHandler() { |
|
oshima
2016/01/06 22:57:23
I believe Shutodnw() must have been called at this
stevenjb
2016/01/06 23:28:31
So, -usually- Shutdown will get called. However, i
oshima
2016/01/07 00:21:12
Yeah, I prefer to have the same code path on test
stevenjb
2016/01/07 17:07:47
So do I.
Unfortunately sometimes that conflicts w
oshima
2016/01/07 18:14:17
There are multiple principals (minimizing divergen
|
| - FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, IsShuttingDown()); |
| + Shutdown(); |
| STLDeleteContainerPointers(network_list_.begin(), network_list_.end()); |
| STLDeleteContainerPointers(device_list_.begin(), device_list_.end()); |
| } |
| +void NetworkStateHandler::Shutdown() { |
| + if (did_shutdown_) |
| + return; |
| + did_shutdown_ = true; |
| + FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, IsShuttingDown()); |
| +} |
| + |
| void NetworkStateHandler::InitShillPropertyHandler() { |
| shill_property_handler_.reset(new internal::ShillPropertyHandler(this)); |
| shill_property_handler_->Init(); |
| @@ -92,20 +98,27 @@ void NetworkStateHandler::AddObserver( |
| NetworkStateHandlerObserver* observer, |
| const tracked_objects::Location& from_here) { |
| observers_.AddObserver(observer); |
| - device_event_log::AddEntry(from_here.file_name(), from_here.line_number(), |
| - device_event_log::LOG_TYPE_NETWORK, |
| - device_event_log::LOG_LEVEL_DEBUG, |
| - "NetworkStateHandler::AddObserver"); |
| + device_event_log::AddEntry( |
| + from_here.file_name(), from_here.line_number(), |
| + device_event_log::LOG_TYPE_NETWORK, device_event_log::LOG_LEVEL_DEBUG, |
| + base::StringPrintf("NetworkStateHandler::AddObserver: 0x%p", observer)); |
| + |
| + LOG(ERROR) << "ADD Observer: " << from_here.file_name() << ":" |
| + << from_here.line_number() << ": " << observer; |
| } |
| void NetworkStateHandler::RemoveObserver( |
| NetworkStateHandlerObserver* observer, |
| const tracked_objects::Location& from_here) { |
| observers_.RemoveObserver(observer); |
| - device_event_log::AddEntry(from_here.file_name(), from_here.line_number(), |
| - device_event_log::LOG_TYPE_NETWORK, |
| - device_event_log::LOG_LEVEL_DEBUG, |
| - "NetworkStateHandler::RemoveObserver"); |
| + device_event_log::AddEntry( |
| + from_here.file_name(), from_here.line_number(), |
| + device_event_log::LOG_TYPE_NETWORK, device_event_log::LOG_LEVEL_DEBUG, |
| + base::StringPrintf("NetworkStateHandler::RemoveObserver: 0x%p", |
| + observer)); |
| + |
| + LOG(ERROR) << "REM Observer: " << from_here.file_name() << ":" |
| + << from_here.line_number() << ": " << observer; |
| } |
| NetworkStateHandler::TechnologyState NetworkStateHandler::GetTechnologyState( |