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

Unified Diff: chromeos/network/network_state_handler.cc

Issue 1562593002: Fix potential crashes in NetworkHandler code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@test
Patch Set: IsShuttingDown -> OnShuttingDown Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/network/network_state_handler.h ('k') | chromeos/network/network_state_handler_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..1d521d9d507835c2bc8d041f96d2f9515a8d4bd9 100644
--- a/chromeos/network/network_state_handler.cc
+++ b/chromeos/network/network_state_handler.cc
@@ -67,15 +67,24 @@ std::string ValueAsString(const base::Value& value) {
const char NetworkStateHandler::kDefaultCheckPortalList[] =
"ethernet,wifi,cellular";
-NetworkStateHandler::NetworkStateHandler() : network_list_sorted_(false) {
-}
+NetworkStateHandler::NetworkStateHandler() {}
NetworkStateHandler::~NetworkStateHandler() {
- FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, IsShuttingDown());
+ // Normally Shutdown() will get called in ~NetworkHandler, however unit
+ // tests do not use that class so this needs to call Shutdown when we
+ // destry the class.
+ if (!did_shutdown_)
+ Shutdown();
STLDeleteContainerPointers(network_list_.begin(), network_list_.end());
STLDeleteContainerPointers(device_list_.begin(), device_list_.end());
}
+void NetworkStateHandler::Shutdown() {
+ DCHECK(!did_shutdown_);
+ did_shutdown_ = true;
+ FOR_EACH_OBSERVER(NetworkStateHandlerObserver, observers_, OnShuttingDown());
+}
+
void NetworkStateHandler::InitShillPropertyHandler() {
shill_property_handler_.reset(new internal::ShillPropertyHandler(this));
shill_property_handler_->Init();
@@ -92,20 +101,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(
« no previous file with comments | « chromeos/network/network_state_handler.h ('k') | chromeos/network/network_state_handler_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698