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

Side by Side Diff: chrome/browser/chromeos/extensions/networking_private_event_router.cc

Issue 12220113: Next phase for chrome.networkingPrivate interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review changes Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "chrome/browser/chromeos/extensions/networking_private_event_router.h" 5 #include "chrome/browser/chromeos/extensions/networking_private_event_router.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/chromeos/extensions/networking_private_api.h" 9 #include "chrome/browser/chromeos/extensions/networking_private_api.h"
10 #include "chrome/browser/extensions/event_names.h" 10 #include "chrome/browser/extensions/event_names.h"
11 #include "chrome/browser/extensions/event_router_forwarder.h" 11 #include "chrome/browser/extensions/event_router_forwarder.h"
12 #include "chrome/browser/extensions/extension_system.h" 12 #include "chrome/browser/extensions/extension_system.h"
13 #include "chrome/browser/extensions/extension_system_factory.h" 13 #include "chrome/browser/extensions/extension_system_factory.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/profiles/profile_dependency_manager.h" 15 #include "chrome/browser/profiles/profile_dependency_manager.h"
16 #include "chrome/common/extensions/api/networking_private.h" 16 #include "chrome/common/extensions/api/networking_private.h"
17 #include "chromeos/network/network_state.h" 17 #include "chromeos/network/network_state.h"
18 #include "chromeos/network/network_state_handler.h" 18 #include "chromeos/network/network_state_handler.h"
19 #include "chromeos/network/onc/onc_constants.h" 19 #include "chromeos/network/onc/onc_constants.h"
20 #include "chromeos/network/onc/onc_signature.h" 20 #include "chromeos/network/onc/onc_signature.h"
21 #include "chromeos/network/onc/onc_translator.h" 21 #include "chromeos/network/onc/onc_translator.h"
22 #include "third_party/cros_system_api/dbus/service_constants.h" 22 #include "third_party/cros_system_api/dbus/service_constants.h"
23 23
24 using extensions::event_names::kOnNetworkListChanged;
25 using extensions::event_names::kOnNetworksChanged;
26 using extensions::EventRouter;
24 using extensions::ExtensionSystem; 27 using extensions::ExtensionSystem;
25 namespace api = extensions::api::networking_private; 28 namespace api = extensions::api::networking_private;
26 29
27 namespace chromeos { 30 namespace chromeos {
28 31
29 namespace { 32 namespace {
30 33
31 // Translates the current connection state of the network into the ONC 34 // Translates the current connection state of the network into the ONC
32 // equivalent. 35 // equivalent.
33 std::string GetConnectionState(const NetworkState* state) { 36 std::string GetConnectionState(const NetworkState* state) {
(...skipping 21 matching lines...) Expand all
55 } 58 }
56 59
57 } // namespace 60 } // namespace
58 61
59 NetworkingPrivateEventRouter::NetworkingPrivateEventRouter(Profile* profile) 62 NetworkingPrivateEventRouter::NetworkingPrivateEventRouter(Profile* profile)
60 : profile_(profile), listening_(false) { 63 : profile_(profile), listening_(false) {
61 // Register with the event router so we know when renderers are listening to 64 // Register with the event router so we know when renderers are listening to
62 // our events. We first check and see if there *is* an event router, because 65 // our events. We first check and see if there *is* an event router, because
63 // some unit tests try to create all profile services, but don't initialize 66 // some unit tests try to create all profile services, but don't initialize
64 // the event router first. 67 // the event router first.
65 extensions::EventRouter* event_router = 68 EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
66 ExtensionSystem::Get(profile_)->event_router();
67 if (event_router) { 69 if (event_router) {
68 event_router->RegisterObserver( 70 event_router->RegisterObserver(
69 this, extensions::event_names::kOnNetworkChanged); 71 this, extensions::event_names::kOnNetworksChanged);
72 event_router->RegisterObserver(
73 this, extensions::event_names::kOnNetworkListChanged);
70 StartOrStopListeningForNetworkChanges(); 74 StartOrStopListeningForNetworkChanges();
71 } 75 }
72 } 76 }
73 77
74 NetworkingPrivateEventRouter::~NetworkingPrivateEventRouter() { 78 NetworkingPrivateEventRouter::~NetworkingPrivateEventRouter() {
75 } 79 }
76 80
77 void NetworkingPrivateEventRouter::Shutdown() { 81 void NetworkingPrivateEventRouter::Shutdown() {
78 // Unregister with the event router. We first check and see if there *is* an 82 // Unregister with the event router. We first check and see if there *is* an
79 // event router, because some unit tests try to shutdown all profile services, 83 // event router, because some unit tests try to shutdown all profile services,
80 // but didn't initialize the event router first. 84 // but didn't initialize the event router first.
81 extensions::EventRouter* event_router = 85 EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
82 ExtensionSystem::Get(profile_)->event_router();
83 if (event_router) 86 if (event_router)
84 event_router->UnregisterObserver(this); 87 event_router->UnregisterObserver(this);
85 88
86 if (listening_) 89 if (listening_)
87 NetworkStateHandler::Get()->RemoveObserver(this); 90 NetworkStateHandler::Get()->RemoveObserver(this);
88 listening_ = false; 91 listening_ = false;
89 } 92 }
90 93
91 void NetworkingPrivateEventRouter::OnListenerAdded( 94 void NetworkingPrivateEventRouter::OnListenerAdded(
92 const extensions::EventListenerInfo& details) { 95 const extensions::EventListenerInfo& details) {
93 // Start listening to events from the network state handler. 96 // Start listening to events from the network state handler.
94 StartOrStopListeningForNetworkChanges(); 97 StartOrStopListeningForNetworkChanges();
95 } 98 }
96 99
97 void NetworkingPrivateEventRouter::OnListenerRemoved( 100 void NetworkingPrivateEventRouter::OnListenerRemoved(
98 const extensions::EventListenerInfo& details) { 101 const extensions::EventListenerInfo& details) {
99 // Stop listening to events from the network state handler if there are no 102 // Stop listening to events from the network state handler if there are no
100 // more listeners. 103 // more listeners.
101 StartOrStopListeningForNetworkChanges(); 104 StartOrStopListeningForNetworkChanges();
102 } 105 }
103 106
104 void NetworkingPrivateEventRouter::StartOrStopListeningForNetworkChanges() { 107 void NetworkingPrivateEventRouter::StartOrStopListeningForNetworkChanges() {
105 bool should_listen = ExtensionSystem::Get(profile_)->event_router()-> 108 EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
106 HasEventListener(extensions::event_names::kOnNetworkChanged); 109 bool should_listen = event_router->HasEventListener(kOnNetworksChanged) ||
110 event_router->HasEventListener(kOnNetworkListChanged);
107 111
108 if (should_listen) { 112 if (should_listen) {
109 if (!listening_) 113 if (!listening_)
110 NetworkStateHandler::Get()->AddObserver(this); 114 NetworkStateHandler::Get()->AddObserver(this);
111 } else { 115 } else {
112 if (listening_) 116 if (listening_)
113 NetworkStateHandler::Get()->RemoveObserver(this); 117 NetworkStateHandler::Get()->RemoveObserver(this);
114 } 118 }
115 listening_ = should_listen; 119 listening_ = should_listen;
116 } 120 }
117 121
118 void NetworkingPrivateEventRouter::NetworkListChanged() { 122 void NetworkingPrivateEventRouter::NetworkListChanged() {
123 EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
119 NetworkStateList networks; 124 NetworkStateList networks;
120 NetworkStateHandler::Get()->GetNetworkList(&networks); 125 NetworkStateHandler::Get()->GetNetworkList(&networks);
121 std::vector<linked_ptr<api::NetworkProperties> > changes; 126 if (!event_router->HasEventListener(kOnNetworkListChanged))
127 return;
128
129 std::vector<std::string> changes;
122 for (NetworkStateList::const_iterator iter = networks.begin(); 130 for (NetworkStateList::const_iterator iter = networks.begin();
123 iter != networks.end(); ++iter) { 131 iter != networks.end(); ++iter) {
124 api::NetworkProperties* network_properties = new api::NetworkProperties; 132 // TODO(gspencer): Currently the "GUID" is actually the service path. Fix
125 network_properties->additional_properties.SetString( 133 // this to be the real GUID once we're using
126 onc::network_config::kName, (*iter)->name()); 134 // ManagedNetworkConfigurationManager.
127 network_properties->additional_properties.SetString( 135 changes.push_back((*iter)->path());
128 onc::network_config::kGUID, (*iter)->path());
129 network_properties->additional_properties.SetString(
130 onc::network_config::kType,
131 GetConnectionType((*iter)->type()));
132 network_properties->additional_properties.SetString(
133 onc::network_config::kConnectionState,
134 GetConnectionState(*iter));
135 changes.push_back(make_linked_ptr(network_properties));
136 } 136 }
137 137
138 scoped_ptr<base::ListValue> args(api::OnNetworkChanged::Create(changes)); 138 scoped_ptr<base::ListValue> args(api::OnNetworkListChanged::Create(changes));
139 scoped_ptr<extensions::Event> extension_event(new extensions::Event( 139 scoped_ptr<extensions::Event> extension_event(new extensions::Event(
140 extensions::event_names::kOnNetworkChanged, args.Pass())); 140 kOnNetworkListChanged, args.Pass()));
141 ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent( 141 event_router->BroadcastEvent(extension_event.Pass());
142 extension_event.Pass()); 142 }
143
144 void NetworkingPrivateEventRouter::NetworkPropertiesUpdated(
145 const NetworkState* network) {
146 EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
147 if (!event_router->HasEventListener(kOnNetworksChanged))
148 return;
149
150 scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create(
151 std::vector<std::string>(1, network->path())));
152 scoped_ptr<extensions::Event> extension_event(
153 new extensions::Event(kOnNetworksChanged, args.Pass()));
154 event_router->BroadcastEvent(extension_event.Pass());
143 } 155 }
144 156
145 } // namespace chromeos 157 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698