| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "extensions/browser/api/networking_private/networking_private_event_rou
ter.h" | 5 #include "extensions/browser/api/networking_private/networking_private_event_rou
ter.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "chromeos/network/device_state.h" | 9 #include "chromeos/network/device_state.h" |
| 10 #include "chromeos/network/network_certificate_handler.h" |
| 10 #include "chromeos/network/network_event_log.h" | 11 #include "chromeos/network/network_event_log.h" |
| 11 #include "chromeos/network/network_state.h" | 12 #include "chromeos/network/network_state.h" |
| 12 #include "chromeos/network/network_state_handler.h" | 13 #include "chromeos/network/network_state_handler.h" |
| 13 #include "chromeos/network/network_state_handler_observer.h" | 14 #include "chromeos/network/network_state_handler_observer.h" |
| 14 #include "chromeos/network/onc/onc_signature.h" | 15 #include "chromeos/network/onc/onc_signature.h" |
| 15 #include "chromeos/network/onc/onc_translator.h" | 16 #include "chromeos/network/onc/onc_translator.h" |
| 16 #include "chromeos/network/portal_detector/network_portal_detector.h" | 17 #include "chromeos/network/portal_detector/network_portal_detector.h" |
| 17 #include "components/keyed_service/content/browser_context_dependency_manager.h" | 18 #include "components/keyed_service/content/browser_context_dependency_manager.h" |
| 18 #include "components/onc/onc_constants.h" | 19 #include "components/onc/onc_constants.h" |
| 19 #include "content/public/browser/browser_context.h" | 20 #include "content/public/browser/browser_context.h" |
| 20 #include "extensions/browser/api/networking_private/networking_private_api.h" | 21 #include "extensions/browser/api/networking_private/networking_private_api.h" |
| 21 #include "extensions/browser/extension_system.h" | 22 #include "extensions/browser/extension_system.h" |
| 22 #include "extensions/common/api/networking_private.h" | 23 #include "extensions/common/api/networking_private.h" |
| 23 #include "third_party/cros_system_api/dbus/service_constants.h" | 24 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 24 | 25 |
| 25 using chromeos::DeviceState; | 26 using chromeos::DeviceState; |
| 26 using chromeos::NetworkHandler; | 27 using chromeos::NetworkHandler; |
| 27 using chromeos::NetworkPortalDetector; | 28 using chromeos::NetworkPortalDetector; |
| 28 using chromeos::NetworkState; | 29 using chromeos::NetworkState; |
| 29 using chromeos::NetworkStateHandler; | 30 using chromeos::NetworkStateHandler; |
| 30 | 31 |
| 31 namespace extensions { | 32 namespace extensions { |
| 32 | 33 |
| 33 class NetworkingPrivateEventRouterImpl | 34 class NetworkingPrivateEventRouterImpl |
| 34 : public NetworkingPrivateEventRouter, | 35 : public NetworkingPrivateEventRouter, |
| 35 public chromeos::NetworkStateHandlerObserver, | 36 public chromeos::NetworkStateHandlerObserver, |
| 37 public chromeos::NetworkCertificateHandler::Observer, |
| 36 public NetworkPortalDetector::Observer { | 38 public NetworkPortalDetector::Observer { |
| 37 public: | 39 public: |
| 38 explicit NetworkingPrivateEventRouterImpl(content::BrowserContext* context); | 40 explicit NetworkingPrivateEventRouterImpl(content::BrowserContext* context); |
| 39 ~NetworkingPrivateEventRouterImpl() override; | 41 ~NetworkingPrivateEventRouterImpl() override; |
| 40 | 42 |
| 41 protected: | 43 protected: |
| 42 // KeyedService overrides: | 44 // KeyedService overrides: |
| 43 void Shutdown() override; | 45 void Shutdown() override; |
| 44 | 46 |
| 45 // EventRouter::Observer overrides: | 47 // EventRouter::Observer overrides: |
| 46 void OnListenerAdded(const EventListenerInfo& details) override; | 48 void OnListenerAdded(const EventListenerInfo& details) override; |
| 47 void OnListenerRemoved(const EventListenerInfo& details) override; | 49 void OnListenerRemoved(const EventListenerInfo& details) override; |
| 48 | 50 |
| 49 // NetworkStateHandlerObserver overrides: | 51 // NetworkStateHandlerObserver overrides: |
| 50 void NetworkListChanged() override; | 52 void NetworkListChanged() override; |
| 51 void DeviceListChanged() override; | 53 void DeviceListChanged() override; |
| 52 void NetworkPropertiesUpdated(const NetworkState* network) override; | 54 void NetworkPropertiesUpdated(const NetworkState* network) override; |
| 53 void DevicePropertiesUpdated(const DeviceState* device) override; | 55 void DevicePropertiesUpdated(const DeviceState* device) override; |
| 54 | 56 |
| 57 // NetworkCertificateHandler::Observer overrides: |
| 58 void OnCertificatesChanged() override; |
| 59 |
| 55 // NetworkPortalDetector::Observer overrides: | 60 // NetworkPortalDetector::Observer overrides: |
| 56 void OnPortalDetectionCompleted( | 61 void OnPortalDetectionCompleted( |
| 57 const NetworkState* network, | 62 const NetworkState* network, |
| 58 const NetworkPortalDetector::CaptivePortalState& state) override; | 63 const NetworkPortalDetector::CaptivePortalState& state) override; |
| 59 | 64 |
| 60 private: | 65 private: |
| 61 // Decide if we should listen for network changes or not. If there are any | 66 // Decide if we should listen for network changes or not. If there are any |
| 62 // JavaScript listeners registered for the onNetworkChanged event, then we | 67 // JavaScript listeners registered for the onNetworkChanged event, then we |
| 63 // want to register for change notification from the network state handler. | 68 // want to register for change notification from the network state handler. |
| 64 // Otherwise, we want to unregister and not be listening to network changes. | 69 // Otherwise, we want to unregister and not be listening to network changes. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 80 EventRouter* event_router = EventRouter::Get(context_); | 85 EventRouter* event_router = EventRouter::Get(context_); |
| 81 if (event_router) { | 86 if (event_router) { |
| 82 event_router->RegisterObserver( | 87 event_router->RegisterObserver( |
| 83 this, api::networking_private::OnNetworksChanged::kEventName); | 88 this, api::networking_private::OnNetworksChanged::kEventName); |
| 84 event_router->RegisterObserver( | 89 event_router->RegisterObserver( |
| 85 this, api::networking_private::OnNetworkListChanged::kEventName); | 90 this, api::networking_private::OnNetworkListChanged::kEventName); |
| 86 event_router->RegisterObserver( | 91 event_router->RegisterObserver( |
| 87 this, api::networking_private::OnDeviceStateListChanged::kEventName); | 92 this, api::networking_private::OnDeviceStateListChanged::kEventName); |
| 88 event_router->RegisterObserver( | 93 event_router->RegisterObserver( |
| 89 this, api::networking_private::OnPortalDetectionCompleted::kEventName); | 94 this, api::networking_private::OnPortalDetectionCompleted::kEventName); |
| 95 event_router->RegisterObserver( |
| 96 this, api::networking_private::OnCertificateListsChanged::kEventName); |
| 90 StartOrStopListeningForNetworkChanges(); | 97 StartOrStopListeningForNetworkChanges(); |
| 91 } | 98 } |
| 92 } | 99 } |
| 93 | 100 |
| 94 NetworkingPrivateEventRouterImpl::~NetworkingPrivateEventRouterImpl() { | 101 NetworkingPrivateEventRouterImpl::~NetworkingPrivateEventRouterImpl() { |
| 95 DCHECK(!listening_); | 102 DCHECK(!listening_); |
| 96 } | 103 } |
| 97 | 104 |
| 98 void NetworkingPrivateEventRouterImpl::Shutdown() { | 105 void NetworkingPrivateEventRouterImpl::Shutdown() { |
| 99 // Unregister with the event router. We first check and see if there *is* an | 106 // Unregister with the event router. We first check and see if there *is* an |
| (...skipping 26 matching lines...) Expand all Loading... |
| 126 void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() { | 133 void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() { |
| 127 EventRouter* event_router = EventRouter::Get(context_); | 134 EventRouter* event_router = EventRouter::Get(context_); |
| 128 bool should_listen = | 135 bool should_listen = |
| 129 event_router->HasEventListener( | 136 event_router->HasEventListener( |
| 130 api::networking_private::OnNetworksChanged::kEventName) || | 137 api::networking_private::OnNetworksChanged::kEventName) || |
| 131 event_router->HasEventListener( | 138 event_router->HasEventListener( |
| 132 api::networking_private::OnNetworkListChanged::kEventName) || | 139 api::networking_private::OnNetworkListChanged::kEventName) || |
| 133 event_router->HasEventListener( | 140 event_router->HasEventListener( |
| 134 api::networking_private::OnDeviceStateListChanged::kEventName) || | 141 api::networking_private::OnDeviceStateListChanged::kEventName) || |
| 135 event_router->HasEventListener( | 142 event_router->HasEventListener( |
| 136 api::networking_private::OnPortalDetectionCompleted::kEventName); | 143 api::networking_private::OnPortalDetectionCompleted::kEventName) || |
| 144 event_router->HasEventListener( |
| 145 api::networking_private::OnCertificateListsChanged::kEventName); |
| 137 | 146 |
| 138 if (should_listen && !listening_) { | 147 if (should_listen && !listening_) { |
| 139 NetworkHandler::Get()->network_state_handler()->AddObserver(this, | 148 NetworkHandler::Get()->network_state_handler()->AddObserver(this, |
| 140 FROM_HERE); | 149 FROM_HERE); |
| 150 NetworkHandler::Get()->network_certificate_handler()->AddObserver(this); |
| 141 if (chromeos::network_portal_detector::IsInitialized()) | 151 if (chromeos::network_portal_detector::IsInitialized()) |
| 142 chromeos::network_portal_detector::GetInstance()->AddObserver(this); | 152 chromeos::network_portal_detector::GetInstance()->AddObserver(this); |
| 143 } else if (!should_listen && listening_) { | 153 } else if (!should_listen && listening_) { |
| 144 NetworkHandler::Get()->network_state_handler()->RemoveObserver(this, | 154 NetworkHandler::Get()->network_state_handler()->RemoveObserver(this, |
| 145 FROM_HERE); | 155 FROM_HERE); |
| 156 NetworkHandler::Get()->network_certificate_handler()->RemoveObserver(this); |
| 146 if (chromeos::network_portal_detector::IsInitialized()) | 157 if (chromeos::network_portal_detector::IsInitialized()) |
| 147 chromeos::network_portal_detector::GetInstance()->RemoveObserver(this); | 158 chromeos::network_portal_detector::GetInstance()->RemoveObserver(this); |
| 148 } | 159 } |
| 149 listening_ = should_listen; | 160 listening_ = should_listen; |
| 150 } | 161 } |
| 151 | 162 |
| 152 void NetworkingPrivateEventRouterImpl::NetworkListChanged() { | 163 void NetworkingPrivateEventRouterImpl::NetworkListChanged() { |
| 153 EventRouter* event_router = EventRouter::Get(context_); | 164 EventRouter* event_router = EventRouter::Get(context_); |
| 154 if (!event_router->HasEventListener( | 165 if (!event_router->HasEventListener( |
| 155 api::networking_private::OnNetworkListChanged::kEventName)) { | 166 api::networking_private::OnNetworkListChanged::kEventName)) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 229 |
| 219 NetworkStateHandler::NetworkStateList cellular_networks; | 230 NetworkStateHandler::NetworkStateList cellular_networks; |
| 220 NetworkHandler::Get()->network_state_handler()->GetNetworkListByType( | 231 NetworkHandler::Get()->network_state_handler()->GetNetworkListByType( |
| 221 chromeos::NetworkTypePattern::Cellular(), false /* configured_only */, | 232 chromeos::NetworkTypePattern::Cellular(), false /* configured_only */, |
| 222 true /* visible_only */, -1 /* default limit */, &cellular_networks); | 233 true /* visible_only */, -1 /* default limit */, &cellular_networks); |
| 223 for (const NetworkState* network : cellular_networks) { | 234 for (const NetworkState* network : cellular_networks) { |
| 224 NetworkPropertiesUpdated(network); | 235 NetworkPropertiesUpdated(network); |
| 225 } | 236 } |
| 226 } | 237 } |
| 227 | 238 |
| 239 void NetworkingPrivateEventRouterImpl::OnCertificatesChanged() { |
| 240 EventRouter* event_router = EventRouter::Get(context_); |
| 241 if (!event_router->HasEventListener( |
| 242 api::networking_private::OnCertificateListsChanged::kEventName)) { |
| 243 NET_LOG_EVENT("NetworkingPrivate.OnCertificatesChanged: No Listeners", ""); |
| 244 return; |
| 245 } |
| 246 NET_LOG_EVENT("NetworkingPrivate.OnCertificatesChanged", ""); |
| 247 |
| 248 std::unique_ptr<base::ListValue> args( |
| 249 api::networking_private::OnCertificateListsChanged::Create()); |
| 250 std::unique_ptr<Event> extension_event( |
| 251 new Event(events::NETWORKING_PRIVATE_ON_CERTIFICATE_LISTS_CHANGED, |
| 252 api::networking_private::OnCertificateListsChanged::kEventName, |
| 253 std::move(args))); |
| 254 event_router->BroadcastEvent(std::move(extension_event)); |
| 255 } |
| 256 |
| 228 void NetworkingPrivateEventRouterImpl::OnPortalDetectionCompleted( | 257 void NetworkingPrivateEventRouterImpl::OnPortalDetectionCompleted( |
| 229 const NetworkState* network, | 258 const NetworkState* network, |
| 230 const NetworkPortalDetector::CaptivePortalState& state) { | 259 const NetworkPortalDetector::CaptivePortalState& state) { |
| 231 const std::string path = network ? network->guid() : std::string(); | 260 const std::string path = network ? network->guid() : std::string(); |
| 232 | 261 |
| 233 EventRouter* event_router = EventRouter::Get(context_); | 262 EventRouter* event_router = EventRouter::Get(context_); |
| 234 if (!event_router->HasEventListener( | 263 if (!event_router->HasEventListener( |
| 235 api::networking_private::OnPortalDetectionCompleted::kEventName)) { | 264 api::networking_private::OnPortalDetectionCompleted::kEventName)) { |
| 236 NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted: No Listeners", | 265 NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted: No Listeners", |
| 237 path); | 266 path); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 std::move(args))); | 300 std::move(args))); |
| 272 event_router->BroadcastEvent(std::move(extension_event)); | 301 event_router->BroadcastEvent(std::move(extension_event)); |
| 273 } | 302 } |
| 274 | 303 |
| 275 NetworkingPrivateEventRouter* NetworkingPrivateEventRouter::Create( | 304 NetworkingPrivateEventRouter* NetworkingPrivateEventRouter::Create( |
| 276 content::BrowserContext* context) { | 305 content::BrowserContext* context) { |
| 277 return new NetworkingPrivateEventRouterImpl(context); | 306 return new NetworkingPrivateEventRouterImpl(context); |
| 278 } | 307 } |
| 279 | 308 |
| 280 } // namespace extensions | 309 } // namespace extensions |
| OLD | NEW |