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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_UI_PROXY_CONFIG_SERVICE_H_ 6 #define CHROME_BROWSER_CHROMEOS_UI_PROXY_CONFIG_SERVICE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "chrome/browser/chromeos/ui_proxy_config.h" 12 13 class PrefService; 14 15 namespace chromeos { 16 17 class FavoriteState; 18 19 // This class is only accessed from the UI via Profile::GetProxyConfigTracker to 20 // allow the user to read and modify the proxy configuration via 21 // GetProxyConfig and SetProxyConfig. 22 // 23 // Before reading/setting a proxy config, a network has to be selected using 24 // either SetCurrentNetwork (any remembered network) or 25 // MakeActiveNetworkCurrent. 26 class UIProxyConfigService { 27 public: 28 UIProxyConfigService(); 29 ~UIProxyConfigService(); 30 31 // After this call, proxy settings are read from |profile_prefs| and 32 // |local_state_prefs|. In case of usage for the sign-in screen, 33 // |profile_prefs| must be NULL because sign-in screen should depend only on 34 // shared settings. 35 void SetPrefs(PrefService* profile_prefs, PrefService* local_state_prefs); 36 37 // Called by UI to set the network with service path |current_network| to be 38 // displayed or edited. Subsequent Set*/Get* methods will use this 39 // network, until this method is called again. 40 void SetCurrentNetwork(const std::string& current_network); 41 42 void UpdateFromPrefs(); 43 44 // Called from UI to retrieve the stored proxy configuration, which is either 45 // the last proxy config of the current network or the one last set by 46 // SetProxyConfig. 47 void GetProxyConfig(UIProxyConfig* config) const; 48 49 // Called from UI to update proxy configuration for different modes. Stores 50 // and persists |config| to shill for the current network. 51 void SetProxyConfig(const UIProxyConfig& config); 52 53 private: 54 // Determines effective proxy config based on prefs from config tracker, 55 // |network| and if user is using shared proxies. The effective config is 56 // stored in |current_ui_config_| but not activated on network stack, and 57 // hence, not picked up by observers. 58 void DetermineEffectiveConfig(const FavoriteState& network); 59 60 // Service path of network whose proxy configuration is being displayed or 61 // edited via UI. 62 std::string current_ui_network_; 63 64 // Proxy configuration of |current_ui_network_|. 65 UIProxyConfig current_ui_config_; 66 67 bool signin_screen_; 68 69 // Not owned. 70 PrefService* profile_prefs_; 71 72 // Not owned. 73 PrefService* local_state_prefs_; 74 75 DISALLOW_COPY_AND_ASSIGN(UIProxyConfigService); 76 }; 77 78 } // namespace chromeos 79 80 #endif // CHROME_BROWSER_CHROMEOS_UI_PROXY_CONFIG_SERVICE_H_ 81