summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/generated_resources.grd2
-rw-r--r--chrome/browser/chromeos/network_menu_button.cc274
-rw-r--r--chrome/browser/chromeos/network_menu_button.h99
-rw-r--r--chrome/browser/chromeos/password_dialog_view.cc6
-rw-r--r--chrome/browser/chromeos/password_dialog_view.h11
-rw-r--r--chrome/browser/chromeos/settings_contents_view.cc49
-rwxr-xr-xchrome/browser/chromeos/status_area_view.cc24
-rwxr-xr-xchrome/browser/chromeos/status_area_view.h11
-rw-r--r--chrome/common/chrome_paths.cc2
9 files changed, 344 insertions, 134 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 7aa4420..128bfb8 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5614,7 +5614,7 @@ Keep your key file in a safe place. You will need it to create new versions of y
Speed Sensitivity:
</message>
<message name="IDS_STATUSBAR_NO_NETWORKS_MESSAGE" desc="No networks are available">
- Speed Sensitivity:
+ No networks are available
</message>
</if>
diff --git a/chrome/browser/chromeos/network_menu_button.cc b/chrome/browser/chromeos/network_menu_button.cc
index ddffa3c..553ca9e 100644
--- a/chrome/browser/chromeos/network_menu_button.cc
+++ b/chrome/browser/chromeos/network_menu_button.cc
@@ -4,9 +4,12 @@
#include "chrome/browser/chromeos/network_menu_button.h"
+#include <algorithm>
+
#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/string_util.h"
+#include "base/time.h"
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_window.h"
#include "grit/generated_resources.h"
@@ -22,12 +25,17 @@ const int NetworkMenuButton::kNumWifiImages = 8;
SkBitmap* NetworkMenuButton::wifi_images_[kNumWifiImages];
SkBitmap* NetworkMenuButton::wired_image_ = NULL;
SkBitmap* NetworkMenuButton::disconnected_image_ = NULL;
+const int NetworkMenuButton::kAnimationDelayMillis = 100;
-NetworkMenuButton::NetworkMenuButton(Browser* browser)
+NetworkMenuButton::NetworkMenuButton(Browser* browser, bool cros_library_loaded)
: MenuButton(NULL, std::wstring(), this, false),
+ cros_library_loaded_(cros_library_loaded),
refreshing_menu_(false),
+ ethernet_connected_(false),
network_menu_(this),
- browser_(browser) {
+ browser_(browser),
+ icon_animation_index_(0),
+ icon_animation_increasing_(true) {
static bool initialized = false;
if (!initialized) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
@@ -38,7 +46,7 @@ NetworkMenuButton::NetworkMenuButton(Browser* browser)
disconnected_image_ = rb.GetBitmapNamed(IDR_STATUSBAR_DISCONNECTED);
initialized = true;
}
- SetIcon(*disconnected_image_);
+ RefreshNetworks();
}
////////////////////////////////////////////////////////////////////////////////
@@ -47,29 +55,30 @@ NetworkMenuButton::NetworkMenuButton(Browser* browser)
int NetworkMenuButton::GetItemCount() const {
// The menu contains the available wifi networks. If there are none, then it
// only has one item with a message that no networks are available.
- return wifi_networks_.empty() ? 1 : static_cast<int>(wifi_networks_.size());
+ return wifi_networks_in_menu_.empty() ? 1 :
+ static_cast<int>(wifi_networks_in_menu_.size());
}
views::Menu2Model::ItemType NetworkMenuButton::GetTypeAt(int index) const {
- return views::Menu2Model::TYPE_CHECK;
-}
-
-int NetworkMenuButton::GetCommandIdAt(int index) const {
- return index;
+ return wifi_networks_in_menu_.empty() ? views::Menu2Model::TYPE_COMMAND :
+ views::Menu2Model::TYPE_CHECK;
}
string16 NetworkMenuButton::GetLabelAt(int index) const {
- return wifi_networks_.empty() ?
- l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE) :
- wifi_networks_[index].ssid;
+ return wifi_networks_in_menu_.empty() ?
+ l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE) :
+ ASCIIToUTF16(wifi_networks_in_menu_[index].ssid);
}
bool NetworkMenuButton::IsItemCheckedAt(int index) const {
- return GetLabelAt(index) == current_ssid_;
+ // Network that we are connected to (or currently connecting to) is checked.
+ return wifi_networks_in_menu_.empty() ? false :
+ wifi_networks_in_menu_[index].ssid == current_ssid_ ||
+ wifi_networks_in_menu_[index].ssid == connecting_ssid_;
}
bool NetworkMenuButton::IsEnabledAt(int index) const {
- return !wifi_networks_.empty();
+ return !wifi_networks_in_menu_.empty();
}
void NetworkMenuButton::ActivatedAt(int index) {
@@ -77,13 +86,21 @@ void NetworkMenuButton::ActivatedAt(int index) {
if (refreshing_menu_)
return;
- connecting_ssid_ = wifi_networks_[index].ssid;
- if (wifi_networks_[index].encryption.empty()) {
- ConnectToWifiNetwork(connecting_ssid_, string16());
+ // We need to look up the ssid in ssids_in_menu_.
+ std::string ssid = wifi_networks_in_menu_[index].ssid;
+
+ // If clicked on a network that we are already connected to or we are
+ // currently trying to connect to, then do nothing.
+ if (ssid == current_ssid_ || ssid == connecting_ssid_)
+ return;
+
+ // If wifi network is not encrypted, then directly connect.
+ // Otherwise, we open password dialog window.
+ if (!wifi_networks_in_menu_[index].encrypted) {
+ ConnectToWifiNetwork(ssid, string16());
} else {
- // If network requires password, we open a password dialog window.
gfx::NativeWindow parent = browser_->window()->GetNativeHandle();
- PasswordDialogView* dialog = new PasswordDialogView(this);
+ PasswordDialogView* dialog = new PasswordDialogView(this, ssid);
views::Window* window = views::Window::CreateChromeWindow(
parent, gfx::Rect(), dialog);
// Draw the password dialog right below this button and right aligned.
@@ -99,13 +116,9 @@ void NetworkMenuButton::ActivatedAt(int index) {
////////////////////////////////////////////////////////////////////////////////
// NetworkMenuButton, PasswordDialogDelegate implementation:
-bool NetworkMenuButton::OnPasswordDialogCancel() {
- connecting_ssid_.clear();
- return true;
-}
-
-bool NetworkMenuButton::OnPasswordDialogAccept(const string16& password) {
- return ConnectToWifiNetwork(connecting_ssid_, password);
+bool NetworkMenuButton::OnPasswordDialogAccept(const std::string& ssid,
+ const string16& password) {
+ return ConnectToWifiNetwork(ssid, password);
}
////////////////////////////////////////////////////////////////////////////////
@@ -113,7 +126,9 @@ bool NetworkMenuButton::OnPasswordDialogAccept(const string16& password) {
void NetworkMenuButton::RunMenu(views::View* source, const gfx::Point& pt,
gfx::NativeView hwnd) {
- RefreshWifiNetworks();
+ RefreshNetworks();
+ // Make a copy of the wifi networks that we are showing because it may change.
+ wifi_networks_in_menu_ = wifi_networks_;
refreshing_menu_ = true;
network_menu_.Rebuild();
network_menu_.UpdateStates();
@@ -121,52 +136,189 @@ void NetworkMenuButton::RunMenu(views::View* source, const gfx::Point& pt,
network_menu_.RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
}
-void NetworkMenuButton::AddWifiNetwork(const string16& ssid,
- const string16& encryption,
+bool NetworkMenuButton::GetWifiNetwork(const WifiNetworkVector& networks,
+ const std::string& ssid,
+ WifiNetwork* network) {
+ WifiNetworkVector::const_iterator it;
+ for (it = networks.begin(); it != networks.end(); ++it) {
+ if (it->ssid == ssid) {
+ *network = *it;
+ return true;
+ }
+ }
+ return false;
+}
+
+void NetworkMenuButton::AddWifiNetwork(const std::string& ssid,
+ bool encrypted,
+ chromeos::EncryptionType encryption,
int strength) {
- wifi_networks_.push_back(WifiNetwork(ssid, encryption, strength));
+ wifi_networks_.push_back(
+ WifiNetwork(ssid, encrypted, encryption, strength));
}
-void NetworkMenuButton::RefreshWifiNetworks() {
- // TODO(chocobo): Refresh wifi model here.
+void NetworkMenuButton::RefreshNetworks() {
+ std::string current;
+ std::string connecting;
wifi_networks_.clear();
- AddWifiNetwork(ASCIIToUTF16("Wifi 12"), string16(), 12);
- AddWifiNetwork(ASCIIToUTF16("Wifi 28"), string16(), 28);
- AddWifiNetwork(ASCIIToUTF16("Wifi 70"), string16(), 70);
- AddWifiNetwork(ASCIIToUTF16("Wifi 99"), ASCIIToUTF16("WPA-PSK"), 99);
-
- // TODO(chocobo): Handle the case where current_ssid_ or connecting_ssid_ are
- // no longer found in the list of wifi networks.
+ ethernet_connected_ = false;
- // Refresh the menu button image.
- if (current_ssid_.empty()) {
- SetIcon(*disconnected_image_);
- } else {
- int size = static_cast<int>(wifi_networks_.size());
- for (int i = 0; i < size; i++) {
- if (wifi_networks_[i].ssid == current_ssid_) {
- SetIcon(GetWifiImage(wifi_networks_[i]));
+ if (cros_library_loaded_) {
+ chromeos::ServiceStatus* service_status = chromeos::GetAvailableNetworks();
+ for (int i = 0; i < service_status->size; i++) {
+ chromeos::ServiceInfo service = service_status->services[i];
+ std::string ssid = service.ssid;
+ DLOG(WARNING) << "Found network type=" << service.type <<
+ " ssid=" << service.ssid <<
+ " state=" << service.state <<
+ " needs_passphrase=" << service.needs_passphrase <<
+ " encryption=" << service.encryption <<
+ " signal_strength=" << service.signal_strength;
+ if (service.type == chromeos::TYPE_WIFI) {
+ AddWifiNetwork(ssid, service.needs_passphrase, service.encryption,
+ service.signal_strength);
+ // Check connection state.
+ switch (service.state) {
+ case chromeos::STATE_ASSOCIATION: // connecting to access point
+ case chromeos::STATE_CONFIGURATION: // optaining ip address
+ connecting = ssid;
+ break;
+ case chromeos::STATE_READY: // connected and has ip
+ current = ssid;
+ break;
+ case chromeos::STATE_FAILURE: // failed to connect
+ // TODO(chocobo): Handle failure. Show it to user.
+ DLOG(WARNING) << "Wifi network failed to connect: " << ssid;
+ break;
+ case chromeos::STATE_IDLE: // no connection
+ case chromeos::STATE_DISCONNECT: // disconnected
+ case chromeos::STATE_CARRIER: // not used
+ case chromeos::STATE_UNKNOWN: // unknown
+ default:
+ break;
+ }
+ } else if (service.type == chromeos::TYPE_ETHERNET) {
+ if (service.state == chromeos::STATE_READY)
+ ethernet_connected_ = true;
}
}
+ chromeos::FreeServiceStatus(service_status);
+ } else {
+ // Use test data if ChromeOS shared library is not loaded.
+ AddWifiNetwork("Wifi (12)", false, chromeos::NONE, 12);
+ AddWifiNetwork("Wifi RSN (70)", true, chromeos::RSN, 70);
+ AddWifiNetwork("Wifi (28)", false, chromeos::NONE, 28);
+ AddWifiNetwork("Wifi WEP (99)", true, chromeos::WEP, 99);
+ current = connecting_ssid_.empty() ? current_ssid_ : connecting_ssid_;
+ ethernet_connected_ = true;
}
- SchedulePaint();
+
+ // Sort the list of wifi networks by ssid.
+ std::sort(wifi_networks_.begin(), wifi_networks_.end());
+
+ connecting_ssid_ = connecting;
+ current_ssid_ = current;
+
+ if (connecting_ssid_.empty()) {
+ StopConnectingAnimation();
+ UpdateIcon();
+ } else {
+ StartConnectingAnimation();
+ }
+}
+
+static const char* GetEncryptionString(chromeos::EncryptionType encryption) {
+ switch (encryption) {
+ case chromeos::NONE:
+ return "none";
+ case chromeos::RSN:
+ return "rsn";
+ case chromeos::WEP:
+ return "wep";
+ case chromeos::WPA:
+ return "wpa";
+ }
+ return "none";
}
-bool NetworkMenuButton::ConnectToWifiNetwork(const string16& ssid,
+bool NetworkMenuButton::ConnectToWifiNetwork(const std::string& ssid,
const string16& password) {
- // TODO(chocobo): Connect to wifi here.
- current_ssid_ = ssid;
- connecting_ssid_.clear();
- RefreshWifiNetworks();
+ bool ok = true;
+ if (cros_library_loaded_) {
+ chromeos::EncryptionType encryption = chromeos::NONE;
+ WifiNetwork network;
+ if (GetWifiNetwork(wifi_networks_in_menu_, ssid, &network))
+ encryption = network.encryption;
+ ok = chromeos::ConnectToWifiNetwork(ssid.c_str(),
+ password.empty() ? NULL : UTF16ToUTF8(password).c_str(),
+ GetEncryptionString(encryption));
+ }
+ if (ok) {
+ connecting_ssid_ = ssid;
+ StartConnectingAnimation();
+ }
return true;
}
-SkBitmap NetworkMenuButton::GetWifiImage(WifiNetwork wifi_network) const {
- // Returns the wifi image of 1-8 bars depending on signal strength.
- // Since signal strenght is from 0 to 100, we need to convert that to 0 to 7.
- int index = floor(wifi_network.strength / (100.0 / kNumWifiImages));
- // This can happen if the signal strength is 100.
- if (index == kNumWifiImages)
- index--;
- return *wifi_images_[index];
+void NetworkMenuButton::StartConnectingAnimation() {
+ if (!timer_.IsRunning()) {
+ icon_animation_index_ = 0;
+ icon_animation_increasing_ = true;
+ timer_.Start(base::TimeDelta::FromMilliseconds(kAnimationDelayMillis), this,
+ &NetworkMenuButton::UpdateIcon);
+ }
+}
+
+void NetworkMenuButton::StopConnectingAnimation() {
+ if (timer_.IsRunning()) {
+ timer_.Stop();
+ }
+}
+
+void NetworkMenuButton::UpdateIcon() {
+ if (!connecting_ssid_.empty()) {
+ // Get the next frame. Reverse direction if necessary.
+ if (icon_animation_increasing_) {
+ icon_animation_index_++;
+ if (icon_animation_index_ >= kNumWifiImages) {
+ icon_animation_index_ = kNumWifiImages - 1;
+ icon_animation_increasing_ = false;
+ }
+ } else {
+ icon_animation_index_--;
+ if (icon_animation_index_ < 0) {
+ icon_animation_index_ = 0;
+ icon_animation_increasing_ = true;
+ }
+ }
+ SetIcon(*wifi_images_[icon_animation_index_]);
+
+ // Refresh wifi networks every full animation.
+ // And see if we need to stop the animation.
+ if (icon_animation_index_ == 0)
+ RefreshNetworks();
+ } else {
+ if (current_ssid_.empty()) {
+ if (ethernet_connected_)
+ SetIcon(*wired_image_);
+ else
+ SetIcon(*disconnected_image_);
+ } else {
+ WifiNetwork network;
+ if (GetWifiNetwork(wifi_networks_, current_ssid_, &network)) {
+ // Gets the wifi image of 1-8 bars depending on signal strength. Signal
+ // strength is from 0 to 100, so we need to convert that to 0 to 7.
+ int index = floor(network.strength / (100.0 / kNumWifiImages));
+ // This can happen if the signal strength is 100.
+ if (index == kNumWifiImages)
+ index--;
+ SetIcon(*wifi_images_[index]);
+ } else {
+ // We no longer find the current network in the list of networks.
+ // So just set the icon to the disconnected image.
+ SetIcon(*disconnected_image_);
+ }
+ }
+ }
+ SchedulePaint();
}
diff --git a/chrome/browser/chromeos/network_menu_button.h b/chrome/browser/chromeos/network_menu_button.h
index 2de58b1..6b0a0ef 100644
--- a/chrome/browser/chromeos/network_menu_button.h
+++ b/chrome/browser/chromeos/network_menu_button.h
@@ -5,9 +5,12 @@
#ifndef CHROME_BROWSER_CHROMEOS_NETWORK_MENU_BUTTON_H_
#define CHROME_BROWSER_CHROMEOS_NETWORK_MENU_BUTTON_H_
+#include <string>
#include <vector>
+#include "base/timer.h"
#include "chrome/browser/chromeos/password_dialog_view.h"
+#include "third_party/cros/chromeos_network.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "views/controls/button/menu_button.h"
#include "views/controls/menu/menu_2.h"
@@ -15,6 +18,27 @@
class Browser;
+struct WifiNetwork {
+ WifiNetwork() : encrypted(false), strength(0) { }
+ WifiNetwork(const std::string& ssid, bool encrypted,
+ chromeos::EncryptionType encryption, int strength)
+ : ssid(ssid),
+ encrypted(encrypted),
+ encryption(encryption),
+ strength(strength) { }
+
+ // WifiNetworks are sorted by ssids.
+ bool operator< (const WifiNetwork& other) const {
+ return ssid < other.ssid;
+ }
+
+ std::string ssid;
+ bool encrypted;
+ chromeos::EncryptionType encryption;
+ int strength;
+};
+typedef std::vector<WifiNetwork> WifiNetworkVector;
+
// The network menu button in the status area.
// This class will handle getting the wifi networks and populating the menu.
// It will also handle the status icon changing and connecting to another
@@ -24,26 +48,14 @@ class NetworkMenuButton : public views::MenuButton,
public views::Menu2Model,
public PasswordDialogDelegate {
public:
- struct WifiNetwork {
- WifiNetwork() { }
- WifiNetwork(const string16& ssid, const string16& encryption, int strength)
- : ssid(ssid),
- encryption(encryption),
- strength(strength) { }
-
- string16 ssid;
- string16 encryption;
- int strength;
- };
-
- explicit NetworkMenuButton(Browser* browser);
+ NetworkMenuButton(Browser* browser, bool cros_library_loaded);
virtual ~NetworkMenuButton() {}
// views::Menu2Model implementation.
virtual bool HasIcons() const { return false; }
virtual int GetItemCount() const;
virtual views::Menu2Model::ItemType GetTypeAt(int index) const;
- virtual int GetCommandIdAt(int index) const;
+ virtual int GetCommandIdAt(int index) const { return index; }
virtual string16 GetLabelAt(int index) const;
virtual bool IsLabelDynamicAt(int index) const { return true; }
virtual bool GetAcceleratorAt(int index,
@@ -58,27 +70,43 @@ class NetworkMenuButton : public views::MenuButton,
virtual void MenuWillShow() {}
// PasswordDialogDelegate implementation.
- virtual bool OnPasswordDialogCancel();
- virtual bool OnPasswordDialogAccept(const string16& password);
+ virtual bool OnPasswordDialogCancel() { return true; }
+ virtual bool OnPasswordDialogAccept(const std::string& ssid,
+ const string16& password);
private:
// views::ViewMenuDelegate implementation.
virtual void RunMenu(views::View* source, const gfx::Point& pt,
gfx::NativeView hwnd);
+ // Gets the WifiNetwork for the given ssid in the list of wifi networks.
+ // Returns whether or not WifiNetwork was found.
+ bool GetWifiNetwork(const WifiNetworkVector& networks,
+ const std::string& ssid,
+ WifiNetwork* network);
+
// Helper method to add a wifi network to the model.
- void AddWifiNetwork(const string16& ssid, const string16& encryption,
- int strength);
+ void AddWifiNetwork(const std::string& ssid, bool encrypted,
+ chromeos::EncryptionType encryption, int strength);
- // Refreshes the wifi networks model using real data.
- void RefreshWifiNetworks();
+ // Refreshes the networks model using real data.
+ void RefreshNetworks();
// Connect to the specified wireless network with password.
// Returns whether or not connection was successful.
- bool ConnectToWifiNetwork(const string16& ssid, const string16& password);
+ bool ConnectToWifiNetwork(const std::string& ssid, const string16& password);
+
+ // Start animating the icon to show that we are connecting to a network.
+ void StartConnectingAnimation();
+
+ // Stop animating the icon and set the appropriate icon.
+ void StopConnectingAnimation();
+
+ // Update the icon to either the connecting, connected, or disconnected icon.
+ void UpdateIcon();
- // Gets the wifi image for specified wifi network.
- SkBitmap GetWifiImage(WifiNetwork wifi_network) const;
+ // Whether or not the cros shared library loaded successfully or not.
+ bool cros_library_loaded_;
// Set to true if we are currently refreshing the menu.
bool refreshing_menu_;
@@ -95,14 +123,20 @@ class NetworkMenuButton : public views::MenuButton,
// Disconnected image.
static SkBitmap* disconnected_image_;
+ // Whether or not ethernet is connected.
+ bool ethernet_connected_;
+
// The currently connected wifi network ssid.
- string16 current_ssid_;
+ std::string current_ssid_;
// The wifi netowrk ssid we are attempting to connect to.
- string16 connecting_ssid_;
+ std::string connecting_ssid_;
// A list of wifi networks.
- std::vector<WifiNetwork> wifi_networks_;
+ WifiNetworkVector wifi_networks_;
+
+ // A list of wifi networks that we are currently showing in the menu.
+ WifiNetworkVector wifi_networks_in_menu_;
// The network menu.
views::Menu2 network_menu_;
@@ -110,6 +144,19 @@ class NetworkMenuButton : public views::MenuButton,
// The browser window that owns us.
Browser* browser_;
+ // TODO(chocobo): Look into replacing our own animation with throb_animation.
+ // A timer for animating the icon when we are connecting.
+ base::RepeatingTimer<NetworkMenuButton> timer_;
+
+ // Current frame of the animated connecting icon.
+ int icon_animation_index_;
+
+ // Whether the next frame for the animated connecting icon is increasing.
+ bool icon_animation_increasing_;
+
+ // The number of milliseconds between frames of animated connecting icon..
+ static const int kAnimationDelayMillis;
+
DISALLOW_COPY_AND_ASSIGN(NetworkMenuButton);
};
diff --git a/chrome/browser/chromeos/password_dialog_view.cc b/chrome/browser/chromeos/password_dialog_view.cc
index fe80e47..e744574 100644
--- a/chrome/browser/chromeos/password_dialog_view.cc
+++ b/chrome/browser/chromeos/password_dialog_view.cc
@@ -11,8 +11,10 @@
#include "views/controls/textfield/textfield.h"
#include "views/window/window.h"
-PasswordDialogView::PasswordDialogView(PasswordDialogDelegate* delegate)
+PasswordDialogView::PasswordDialogView(PasswordDialogDelegate* delegate,
+ const std::string& ssid)
: delegate_(delegate),
+ ssid_(ssid),
password_textfield_(NULL) {
}
@@ -27,7 +29,7 @@ bool PasswordDialogView::Cancel() {
bool PasswordDialogView::Accept() {
// TODO(chocobo): We should not need to call SyncText ourself here.
password_textfield_->SyncText();
- return delegate_->OnPasswordDialogAccept(password_textfield_->text());
+ return delegate_->OnPasswordDialogAccept(ssid_, password_textfield_->text());
}
static const int kDialogPadding = 7;
diff --git a/chrome/browser/chromeos/password_dialog_view.h b/chrome/browser/chromeos/password_dialog_view.h
index 04f7429..e4650a2 100644
--- a/chrome/browser/chromeos/password_dialog_view.h
+++ b/chrome/browser/chromeos/password_dialog_view.h
@@ -5,6 +5,8 @@
#ifndef CHROME_BROWSER_CHROMEOS_PASSWORD_DIALOG_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_PASSWORD_DIALOG_VIEW_H_
+#include <string>
+
#include "base/string16.h"
#include "views/window/dialog_delegate.h"
@@ -24,14 +26,16 @@ class PasswordDialogDelegate {
// Called when user clicks on ok with a password.
// Return whether or not to allow password dialog to close.
- virtual bool OnPasswordDialogAccept(const string16& password) = 0;
+ virtual bool OnPasswordDialogAccept(const std::string& ssid,
+ const string16& password) = 0;
};
// A dialog box for showing a password textfield.
class PasswordDialogView : public views::View,
public views::DialogDelegate {
public:
- explicit PasswordDialogView(PasswordDialogDelegate* delegate);
+ explicit PasswordDialogView(PasswordDialogDelegate* delegate,
+ const std::string& ssid);
virtual ~PasswordDialogView() {}
// views::DialogDelegate methods.
@@ -57,6 +61,9 @@ class PasswordDialogView : public views::View,
// Used for call back to delegate that password has been entered.
PasswordDialogDelegate* delegate_;
+ // The ssid we are requesting the password for.
+ std::string ssid_;
+
// Combobox and its corresponding model.
views::Textfield* password_textfield_;
diff --git a/chrome/browser/chromeos/settings_contents_view.cc b/chrome/browser/chromeos/settings_contents_view.cc
index 541ba0f..6a59d34 100644
--- a/chrome/browser/chromeos/settings_contents_view.cc
+++ b/chrome/browser/chromeos/settings_contents_view.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/settings_contents_view.h"
#include <map>
+#include <string>
#include <vector>
#include "app/combobox_model.h"
@@ -45,23 +46,23 @@ class WifiSSIDComboModel : public ComboboxModel {
string16 encryption;
int strength;
};
- typedef std::map<string16, NetworkData> NetworkDataMap;
+ typedef std::map<std::string, NetworkData> NetworkDataMap;
WifiSSIDComboModel();
virtual int GetItemCount();
virtual std::wstring GetItemAt(int index);
- const string16& GetSSIDAt(int index);
- bool RequiresPassword(const string16& ssid);
+ const std::string& GetSSIDAt(int index);
+ bool RequiresPassword(const std::string& ssid);
private:
- std::vector<string16> ssids_;
+ std::vector<std::string> ssids_;
// A map of some extra data (NetworkData) keyed off the ssids.
NetworkDataMap ssids_map_;
- void AddWifiNetwork(const string16& ssid,
+ void AddWifiNetwork(const std::string& ssid,
const string16& encryption,
int strength);
@@ -71,10 +72,10 @@ class WifiSSIDComboModel : public ComboboxModel {
WifiSSIDComboModel::WifiSSIDComboModel() {
// TODO(chocobo): Load wifi info from conman.
// This is just temporary data until we hook this up to real data.
- AddWifiNetwork(ASCIIToUTF16("Wifi Combobox Mock"), string16(), 80);
- AddWifiNetwork(ASCIIToUTF16("Wifi WPA-PSK Password is chronos"),
+ AddWifiNetwork("Wifi Combobox Mock", string16(), 80);
+ AddWifiNetwork("Wifi WPA-PSK Password is chronos",
ASCIIToUTF16("WPA-PSK"), 60);
- AddWifiNetwork(ASCIIToUTF16("Wifi No Encryption"), string16(), 90);
+ AddWifiNetwork("Wifi No Encryption", string16(), 90);
}
int WifiSSIDComboModel::GetItemCount() {
@@ -89,7 +90,7 @@ std::wstring WifiSSIDComboModel::GetItemAt(int index) {
// TODO(chocobo): Finalize UI, then put strings in resource file.
std::vector<string16> subst;
- subst.push_back(it->first); // $1
+ subst.push_back(ASCIIToUTF16(it->first)); // $1
// The "None" string is just temporary for now. Have not finalized the UI yet.
if (it->second.encryption.empty())
subst.push_back(ASCIIToUTF16("None")); // $2
@@ -101,18 +102,18 @@ std::wstring WifiSSIDComboModel::GetItemAt(int index) {
ReplaceStringPlaceholders(ASCIIToUTF16("$1 ($2, $3)"), subst, NULL));
}
-const string16& WifiSSIDComboModel::GetSSIDAt(int index) {
+const std::string& WifiSSIDComboModel::GetSSIDAt(int index) {
DCHECK(static_cast<int>(ssids_.size()) > index);
return ssids_[index];
}
-bool WifiSSIDComboModel::RequiresPassword(const string16& ssid) {
+bool WifiSSIDComboModel::RequiresPassword(const std::string& ssid) {
NetworkDataMap::const_iterator it = ssids_map_.find(ssid);
DCHECK(it != ssids_map_.end());
return !it->second.encryption.empty();
}
-void WifiSSIDComboModel::AddWifiNetwork(const string16& ssid,
+void WifiSSIDComboModel::AddWifiNetwork(const std::string& ssid,
const string16& encryption,
int strength) {
ssids_.push_back(ssid);
@@ -137,9 +138,10 @@ class NetworkSection : public OptionsPageView,
// PasswordDialogDelegate implementation.
virtual bool OnPasswordDialogCancel();
- virtual bool OnPasswordDialogAccept(const string16& password);
+ virtual bool OnPasswordDialogAccept(const std::string& ssid,
+ const string16& password);
- bool ConnectToWifi(const string16& ssid, const string16& password);
+ bool ConnectToWifi(const std::string& ssid, const string16& password);
protected:
// OptionsPageView overrides:
@@ -179,13 +181,13 @@ void NetworkSection::ItemChanged(views::Combobox* sender,
return;
if (sender == wifi_ssid_combobox_) {
last_selected_wifi_ssid_index_ = prev_index;
- string16 ssid = wifi_ssid_model_.GetSSIDAt(new_index);
+ std::string ssid = wifi_ssid_model_.GetSSIDAt(new_index);
// Connect to wifi here. Open password page if appropriate
if (wifi_ssid_model_.RequiresPassword(ssid)) {
views::Window* window = views::Window::CreateChromeWindow(
NULL,
gfx::Rect(),
- new PasswordDialogView(this));
+ new PasswordDialogView(this, ssid));
window->SetIsAlwaysOnTop(true);
window->Show();
} else {
@@ -200,13 +202,13 @@ bool NetworkSection::OnPasswordDialogCancel() {
return true;
}
-bool NetworkSection::OnPasswordDialogAccept(const string16& password) {
+bool NetworkSection::OnPasswordDialogAccept(const std::string& ssid,
+ const string16& password) {
// Try connecting to wifi
- return ConnectToWifi(wifi_ssid_model_.GetSSIDAt(
- wifi_ssid_combobox_->selected_item()), password);
+ return ConnectToWifi(ssid, password);
}
-bool NetworkSection::ConnectToWifi(const string16& ssid,
+bool NetworkSection::ConnectToWifi(const std::string& ssid,
const string16& password) {
// TODO(chocobo): Connect to wifi
return password == ASCIIToUTF16("chronos");
@@ -472,9 +474,10 @@ void SettingsContentsView::InitControlLayout() {
column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
GridLayout::USE_PREF, 0, 0);
- layout->StartRow(0, single_column_view_set_id);
- layout->AddView(new NetworkSection(profile()));
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+ // TODO(chocobo): Add NetworkSection back in when we finalized the UI.
+// layout->StartRow(0, single_column_view_set_id);
+// layout->AddView(new NetworkSection(profile()));
+// layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
layout->StartRow(0, single_column_view_set_id);
layout->AddView(new TouchpadSection(profile()));
layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
diff --git a/chrome/browser/chromeos/status_area_view.cc b/chrome/browser/chromeos/status_area_view.cc
index 8be3c15..41388a0 100755
--- a/chrome/browser/chromeos/status_area_view.cc
+++ b/chrome/browser/chromeos/status_area_view.cc
@@ -201,8 +201,8 @@ StatusAreaView::OpenTabsMode StatusAreaView::open_tabs_mode_ =
StatusAreaView::OPEN_TABS_ON_LEFT;
// static
-void* StatusAreaView::power_library_ = NULL;
-bool StatusAreaView::power_library_error_ = false;
+bool StatusAreaView::cros_library_loaded_ = false;
+bool StatusAreaView::cros_library_error_ = false;
StatusAreaView::StatusAreaView(Browser* browser)
: browser_(browser),
@@ -218,14 +218,14 @@ StatusAreaView::~StatusAreaView() {
}
void StatusAreaView::Init() {
- LoadPowerLibrary();
+ LoadCrosLibrary();
ThemeProvider* theme = browser_->profile()->GetThemeProvider();
// Clock.
AddChildView(new ClockView);
// Network.
- network_view_ = new NetworkMenuButton(browser_);
+ network_view_ = new NetworkMenuButton(browser_, cros_library_loaded_);
AddChildView(network_view_);
// Battery.
@@ -238,7 +238,7 @@ void StatusAreaView::Init() {
menu_view_->SetIcon(*theme->GetBitmapNamed(IDR_STATUSBAR_MENU));
AddChildView(menu_view_);
- if (power_library_) {
+ if (cros_library_loaded_) {
power_status_connection_ = chromeos::MonitorPowerStatus(
StatusAreaView::PowerStatusChangedHandler,
this);
@@ -374,24 +374,22 @@ void StatusAreaView::RunMenu(views::View* source, const gfx::Point& pt,
}
// static
-void StatusAreaView::LoadPowerLibrary() {
- if (power_library_) {
+void StatusAreaView::LoadCrosLibrary() {
+ if (cros_library_loaded_) {
// Already loaded.
return;
}
- if (power_library_error_) {
+ if (cros_library_error_) {
// Error in previous load attempt.
return;
}
FilePath path;
if (PathService::Get(chrome::FILE_CHROMEOS_API, &path)) {
- power_library_ = dlopen(path.value().c_str(), RTLD_NOW);
- if (power_library_) {
- chromeos::LoadCros(power_library_);
- } else {
- power_library_error_ = true;
+ cros_library_loaded_ = chromeos::LoadCros(path.value().c_str());
+ if (!cros_library_loaded_) {
+ cros_library_error_ = true;
char* error = dlerror();
if (error) {
LOG(ERROR) << "Problem loading chromeos shared object: " << error;
diff --git a/chrome/browser/chromeos/status_area_view.h b/chrome/browser/chromeos/status_area_view.h
index 6cceaf0..f2c2a1b 100755
--- a/chrome/browser/chromeos/status_area_view.h
+++ b/chrome/browser/chromeos/status_area_view.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_CHROMEOS_STATUS_AREA_VIEW_H_
#include "base/basictypes.h"
+#include "third_party/cros/chromeos_cros_api.h"
#include "third_party/cros/chromeos_power.h"
#include "views/controls/menu/simple_menu_model.h"
#include "views/controls/menu/view_menu_delegate.h"
@@ -60,7 +61,7 @@ class StatusAreaView : public views::View,
// Called whenever the battery status changes.
void PowerStatusChanged(const chromeos::PowerStatus& status);
- static void LoadPowerLibrary();
+ static void LoadCrosLibrary();
// Called whenever the battery status changes. Dispatches to
// PowerStatusChanged() instance method.
static void PowerStatusChangedHandler(
@@ -81,10 +82,10 @@ class StatusAreaView : public views::View,
chromeos::PowerStatusConnection power_status_connection_;
static OpenTabsMode open_tabs_mode_;
- // Handle to result of dlopen() of the power shared object.
- static void* power_library_;
- // True if there was an error loading the power shared object.
- static bool power_library_error_;
+ // True if the library was loaded.
+ static bool cros_library_loaded_;
+ // True if there was an error loading the cros shared object.
+ static bool cros_library_error_;
DISALLOW_COPY_AND_ASSIGN(StatusAreaView);
};
diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc
index f504b4a..8612e68 100644
--- a/chrome/common/chrome_paths.cc
+++ b/chrome/common/chrome_paths.cc
@@ -179,7 +179,7 @@ bool PathProvider(int key, FilePath* result) {
if (!PathService::Get(base::DIR_MODULE, &cur))
return false;
cur = cur.Append(FILE_PATH_LITERAL("chromeos"));
- cur = cur.Append(FILE_PATH_LITERAL("libchromeos-power.so"));
+ cur = cur.Append(FILE_PATH_LITERAL("libcros.so"));
break;
#endif
// The following are only valid in the development environment, and