• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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