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 |