// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_ #pragma once #include #include #include "base/memory/scoped_ptr.h" #include "chrome/browser/chromeos/cros/enum_mapper.h" #include "chrome/browser/chromeos/cros/network_library.h" namespace base { class DictionaryValue; class Value; } namespace chromeos { class NetworkDevice; // This takes a Value of a particular form, and maps the keys in the // dictionary to a NetworkDevice object to initialize it properly. // Subclasses of this can then customize its methods to parse either // libcros (flimflam) data or network setup information obtained from // policy or setup file import depending on the EnumMapper supplied. class NetworkDeviceParser { public: virtual ~NetworkDeviceParser(); virtual NetworkDevice* CreateDeviceFromInfo( const std::string& device_path, const base::DictionaryValue& info); virtual bool UpdateDeviceFromInfo(const base::DictionaryValue& info, NetworkDevice* device); virtual bool UpdateStatus(const std::string& key, const base::Value& value, NetworkDevice* device, PropertyIndex* index); protected: // The NetworkDeviceParser does not take ownership of the |mapper|. explicit NetworkDeviceParser(const EnumMapper* mapper); // Creates new NetworkDevice based on device_path. // Subclasses should override this method and set the correct parser for this // network device if appropriate. virtual NetworkDevice* CreateNewNetworkDevice(const std::string& device_path); virtual bool ParseValue(PropertyIndex index, const base::Value& value, NetworkDevice* device) = 0; virtual ConnectionType ParseType(const std::string& type) = 0; const EnumMapper& mapper() const { return *mapper_; } private: const EnumMapper* mapper_; DISALLOW_COPY_AND_ASSIGN(NetworkDeviceParser); }; // This takes a Value of a particular form, and uses the keys in the // dictionary to create Network (WiFiNetwork, EthernetNetwork, etc.) // objects and initialize them properly. Subclasses of this can then // customize its methods to parse other forms of input dictionaries. class NetworkParser { public: virtual ~NetworkParser(); // Called when a new network is encountered. In addition to setting the // members on the Network object, the Network's property_map_ variable // will include all the property and corresponding value in |info|. // Returns NULL upon failure. virtual Network* CreateNetworkFromInfo(const std::string& service_path, const base::DictionaryValue& info); // Called when an existing network is has new information that needs // to be updated. Network's property_map_ variable will be updated. // Returns false upon failure. virtual bool UpdateNetworkFromInfo(const base::DictionaryValue& info, Network* network); // Called when an individual attribute of an existing network has // changed. |index| is a return value that supplies the appropriate // property index for the given key. |index| is filled in even if // the update fails. Network's property_map_ variable will be updated. // Returns false upon failure. virtual bool UpdateStatus(const std::string& key, const base::Value& value, Network* network, PropertyIndex* index); protected: // The NetworkParser does not take ownership of the |mapper|. explicit NetworkParser(const EnumMapper* mapper); // Creates new Network based on type and service_path. // Subclasses should override this method and set the correct parser for this // network if appropriate. virtual Network* CreateNewNetwork(ConnectionType type, const std::string& service_path); // Parses the value and sets the appropriate field on Network. virtual bool ParseValue(PropertyIndex index, const base::Value& value, Network* network); virtual ConnectionType ParseType(const std::string& type) = 0; virtual ConnectionType ParseTypeFromDictionary( const base::DictionaryValue& info) = 0; const EnumMapper& mapper() const { return *mapper_; } private: const EnumMapper* mapper_; DISALLOW_COPY_AND_ASSIGN(NetworkParser); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_PARSER_H_