diff options
-rw-r--r-- | chrome/app/generated_resources.grd | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_menu_button.cc | 274 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_menu_button.h | 99 | ||||
-rw-r--r-- | chrome/browser/chromeos/password_dialog_view.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/password_dialog_view.h | 11 | ||||
-rw-r--r-- | chrome/browser/chromeos/settings_contents_view.cc | 49 | ||||
-rwxr-xr-x | chrome/browser/chromeos/status_area_view.cc | 24 | ||||
-rwxr-xr-x | chrome/browser/chromeos/status_area_view.h | 11 | ||||
-rw-r--r-- | chrome/common/chrome_paths.cc | 2 |
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 |