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 3 // found in the LICENSE file. 4 5 #ifndef CHROMEOS_NETWORK_NETWORK_PROFILE_HANDLER_H_ 6 #define CHROMEOS_NETWORK_NETWORK_PROFILE_HANDLER_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "base/memory/weak_ptr.h" 14 #include "base/observer_list.h" 15 #include "chromeos/chromeos_export.h" 16 #include "chromeos/dbus/dbus_method_call_status.h" 17 #include "chromeos/dbus/shill_property_changed_observer.h" 18 #include "chromeos/network/network_handler.h" 19 #include "chromeos/network/network_profile.h" 20 21 namespace base { 22 class DictionaryValue; 23 } 24 25 namespace chromeos { 26 27 class NetworkProfileObserver; 28 class NetworkStateHandler; 29 30 class CHROMEOS_EXPORT NetworkProfileHandler 31 : public ShillPropertyChangedObserver { 32 public: 33 typedef std::vector<NetworkProfile> ProfileList; 34 35 virtual ~NetworkProfileHandler(); 36 37 void AddObserver(NetworkProfileObserver* observer); 38 void RemoveObserver(NetworkProfileObserver* observer); 39 40 void GetManagerPropertiesCallback(DBusMethodCallStatus call_status, 41 const base::DictionaryValue& properties); 42 43 // ShillPropertyChangedObserver overrides 44 virtual void OnPropertyChanged(const std::string& name, 45 const base::Value& value) OVERRIDE; 46 47 void GetProfilePropertiesCallback(const std::string& profile_path, 48 const base::DictionaryValue& properties); 49 50 const NetworkProfile* GetProfileForPath( 51 const std::string& profile_path) const; 52 const NetworkProfile* GetProfileForUserhash( 53 const std::string& userhash) const; 54 55 // Returns the first profile entry with a non-empty userhash. 56 // TODO(stevenjb): Replace with GetProfileForUserhash() with the correct 57 // userhash. 58 const NetworkProfile* GetDefaultUserProfile() const; 59 60 static std::string GetSharedProfilePath(); 61 62 protected: 63 friend class ClientCertResolverTest; 64 friend class NetworkConnectionHandlerTest; 65 friend class NetworkHandler; 66 NetworkProfileHandler(); 67 68 // Add ShillManagerClient property observer and request initial list. 69 void Init(); 70 71 void AddProfile(const NetworkProfile& profile); 72 void RemoveProfile(const std::string& profile_path); 73 74 private: 75 ProfileList profiles_; 76 ObserverList<NetworkProfileObserver> observers_; 77 78 // For Shill client callbacks 79 base::WeakPtrFactory<NetworkProfileHandler> weak_ptr_factory_; 80 81 private: 82 DISALLOW_COPY_AND_ASSIGN(NetworkProfileHandler); 83 }; 84 85 } // namespace chromeos 86 87 #endif // CHROMEOS_NETWORK_NETWORK_PROFILE_HANDLER_H_ 88