internet_options_handler.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2011 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_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_H_
7
8#include <string>
9
10#include "chrome/browser/chromeos/cros/network_library.h"
11#include "chrome/browser/ui/webui/options/chromeos/cros_options_page_ui_handler.h"
12#include "content/common/notification_registrar.h"
13#include "ui/gfx/native_widget_types.h"
14
15class SkBitmap;
16namespace views {
17class WindowDelegate;
18}
19
20// ChromeOS internet options page UI handler.
21class InternetOptionsHandler
22  : public chromeos::CrosOptionsPageUIHandler,
23    public chromeos::NetworkLibrary::NetworkManagerObserver,
24    public chromeos::NetworkLibrary::NetworkObserver,
25    public chromeos::NetworkLibrary::CellularDataPlanObserver {
26 public:
27  InternetOptionsHandler();
28  virtual ~InternetOptionsHandler();
29
30  // OptionsPageUIHandler implementation.
31  virtual void GetLocalizedValues(DictionaryValue* localized_strings);
32  virtual void Initialize();
33
34  // WebUIMessageHandler implementation.
35  virtual void RegisterMessages();
36
37  // NetworkLibrary::NetworkManagerObserver implementation.
38  virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* network_lib);
39  // NetworkLibrary::NetworkObserver implementation.
40  virtual void OnNetworkChanged(chromeos::NetworkLibrary* network_lib,
41                                const chromeos::Network* network);
42  // NetworkLibrary::CellularDataPlanObserver implementation.
43  virtual void OnCellularDataPlanChanged(chromeos::NetworkLibrary* network_lib);
44
45  // NotificationObserver implementation.
46  virtual void Observe(NotificationType type,
47                       const NotificationSource& source,
48                       const NotificationDetails& details) OVERRIDE;
49
50 private:
51  // Opens a modal popup dialog.
52  void CreateModalPopup(views::WindowDelegate* view);
53  gfx::NativeWindow GetNativeWindow() const;
54
55  // Passes data needed to show details overlay for network.
56  // |args| will be [ network_type, service_path, command ]
57  // And command is one of 'options', 'connect', disconnect', 'activate' or
58  // 'forget'
59  // Handle{Wifi,Cellular}ButtonClick handles button click on a wireless
60  // network item and a cellular network item respectively.
61  void ButtonClickCallback(const ListValue* args);
62  void HandleWifiButtonClick(const std::string& service_path,
63                             const std::string& command);
64  void HandleCellularButtonClick(const std::string& service_path,
65                                 const std::string& command);
66  void HandleVPNButtonClick(const std::string& service_path,
67                            const std::string& command);
68
69  // Initiates cellular plan data refresh. The results from libcros will be
70  // passed through CellularDataPlanChanged() callback method.
71  // |args| will be [ service_path ]
72  void RefreshCellularPlanCallback(const ListValue* args);
73  void SetActivationButtonVisibility(
74      const chromeos::CellularNetwork* cellular,
75      DictionaryValue* dictionary);
76
77  void LoginCallback(const ListValue* args);
78  void LoginCertCallback(const ListValue* args);
79  void LoginToOtherCallback(const ListValue* args);
80  void SetDetailsCallback(const ListValue* args);
81  void EnableWifiCallback(const ListValue* args);
82  void DisableWifiCallback(const ListValue* args);
83  void EnableCellularCallback(const ListValue* args);
84  void DisableCellularCallback(const ListValue* args);
85  void BuyDataPlanCallback(const ListValue* args);
86  void SetApnCallback(const ListValue* args);
87  void SetSimCardLockCallback(const ListValue* args);
88  void ChangePinCallback(const ListValue* args);
89
90  // Populates the ui with the details of the given device path. This forces
91  // an overlay to be displayed in the UI.
92  void PopulateDictionaryDetails(const chromeos::Network* net,
93                                 chromeos::NetworkLibrary* cros);
94  void PopulateWifiDetails(const chromeos::WifiNetwork* wifi,
95                           DictionaryValue* dictionary);
96  void PopulateCellularDetails(chromeos::NetworkLibrary* cros,
97                               const chromeos::CellularNetwork* cellular,
98                               DictionaryValue* dictionary);
99  void PopulateVPNDetails(const chromeos::VirtualNetwork* vpn,
100                          DictionaryValue* dictionary);
101
102  // Converts CellularDataPlan structure into dictionary for JS. Formats plan
103  // settings into human readable texts.
104  DictionaryValue* CellularDataPlanToDictionary(
105      const chromeos::CellularDataPlan* plan);
106  // Creates the map of a network.
107  ListValue* GetNetwork(const std::string& service_path,
108                        const SkBitmap& icon,
109                        const std::string& name,
110                        bool connecting,
111                        bool connected,
112                        bool connectable,
113                        chromeos::ConnectionType connection_type,
114                        bool remembered,
115                        chromeos::ActivationState activation_state,
116                        bool restricted_ip);
117
118  // Creates the map of wired networks.
119  ListValue* GetWiredList();
120  // Creates the map of wireless networks.
121  ListValue* GetWirelessList();
122  // Creates the map of remembered networks.
123  ListValue* GetRememberedList();
124  // Fills network information into JS dictionary for displaying network lists.
125  void FillNetworkInfo(DictionaryValue* dictionary,
126                       chromeos::NetworkLibrary* cros);
127  // Refreshes the display of network information.
128  void RefreshNetworkData(chromeos::NetworkLibrary* cros);
129  // Adds observers for wireless networks, if any, so that we can dynamically
130  // display the correct icon for that network's signal strength and, in the
131  // case of cellular networks, network technology and roaming status.
132  void MonitorNetworks(chromeos::NetworkLibrary* cros);
133
134  // A boolean flag of whether to use WebUI for connect UI. True to use WebUI
135  // and false to use Views dialogs.
136  bool use_settings_ui_;
137
138  NotificationRegistrar registrar_;
139
140  DISALLOW_COPY_AND_ASSIGN(InternetOptionsHandler);
141};
142
143#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_H_
144