190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/compiler_specific.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/observer_list.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_export.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_handler.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_handler_callbacks.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ListValue; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class NetworkPolicyObserver; 27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The ManagedNetworkConfigurationHandler class is used to create and configure 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// networks in ChromeOS using ONC and takes care of network policies. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Its interface exposes only ONC and should decouple users from Shill. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Internally it translates ONC to Shill dictionaries and calls through to the 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NetworkConfigurationHandler. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// For accessing lists of visible networks, and other state information, see the 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// class NetworkStateHandler. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This is a singleton and its lifetime is managed by the Chrome startup code. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Network configurations are referred to by Shill's service path. These 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// identifiers should at most be used to also access network state using the 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NetworkStateHandler, but dependencies to Shill should be avoided. In the 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// future, we may switch to other identifiers. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Note on callbacks: Because all the functions here are meant to be 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// asynchronous, they all take a |callback| of some type, and an 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// |error_callback|. When the operation succeeds, |callback| will be called, and 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// when it doesn't, |error_callback| will be called with information about the 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// error, including a symbolic name for the error and often some error message 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// that is suitable for logging. None of the error message text is meant for 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// user consumption. 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class CHROMEOS_EXPORT ManagedNetworkConfigurationHandler { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~ManagedNetworkConfigurationHandler(); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void AddObserver(NetworkPolicyObserver* observer) = 0; 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void RemoveObserver(NetworkPolicyObserver* observer) = 0; 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Provides the properties of the network with |service_path| to |callback|. 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void GetProperties( 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const network_handler::DictionaryResultCallback& callback, 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const network_handler::ErrorCallback& error_callback) = 0; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Provides the managed properties of the network with |service_path| to 66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // |callback|. |userhash| is only used to ensure that the user's policy is 67b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // already applied. 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void GetManagedProperties( 69b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const std::string& userhash, 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& service_path, 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const network_handler::DictionaryResultCallback& callback, 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const network_handler::ErrorCallback& error_callback) = 0; 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the user's settings of an already configured network with 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |service_path|. A network can be initially configured by calling 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CreateConfiguration or if it is managed by a policy. The given properties 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will be merged with the existing settings, and it won't clear any existing 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // properties. 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void SetProperties( 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path, 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& user_settings, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback, 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const network_handler::ErrorCallback& error_callback) const = 0; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initially configures an unconfigured network with the given user settings 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and returns the new identifier to |callback| if successful. Fails if the 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network was already configured by a call to this function or because of a 88b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // policy. The new configuration will be owned by user |userhash|. If 89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // |userhash| is empty, the new configuration will be shared. 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void CreateConfiguration( 91b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const std::string& userhash, 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& properties, 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const network_handler::StringResultCallback& callback, 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const network_handler::ErrorCallback& error_callback) const = 0; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removes the user's configuration from the network with |service_path|. The 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // network may still show up in the visible networks after this, but no user 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // configuration will remain. If it was managed, it will still be configured. 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void RemoveConfiguration( 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback, 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const network_handler::ErrorCallback& error_callback) const = 0; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Only to be called by NetworkConfigurationUpdater or from tests. Sets 1058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // |network_configs_onc| and |global_network_config| as the current policy of 1068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // |userhash| and |onc_source|. The policy will be applied (not necessarily 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // immediately) to Shill's profiles and enforced in future configurations 1088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // until the policy associated with |userhash| and |onc_source| is changed 1098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // again with this function. For device policies, |userhash| must be empty. 1108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SetPolicy( 1118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ::onc::ONCSource onc_source, 1128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& userhash, 1138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const base::ListValue& network_configs_onc, 1148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const base::DictionaryValue& global_network_config) = 0; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Returns the user policy for user |userhash| or device policy, which has 117ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // |guid|. If |userhash| is empty, only looks for a device policy. If such 118ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // doesn't exist, returns NULL. Sets |onc_source| accordingly. 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual const base::DictionaryValue* FindPolicyByGUID( 120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string userhash, 121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& guid, 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONCSource* onc_source) const = 0; 123b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Returns the global configuration of the policy of user |userhash| or device 1258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // policy if |userhash| is empty. 1268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual const base::DictionaryValue* GetGlobalConfigFromPolicy( 1278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string userhash) const = 0; 1288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Returns the policy with |guid| for profile |profile_path|. If such 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // doesn't exist, returns NULL. 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual const base::DictionaryValue* FindPolicyByGuidAndProfile( 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& guid, 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& profile_path) const = 0; 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_ASSIGN(ManagedNetworkConfigurationHandler); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROMEOS_NETWORK_MANAGED_NETWORK_CONFIGURATION_HANDLER_H_ 142