diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-30 21:50:45 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-30 21:50:45 +0000 |
commit | 88908d6c5279e50382f835ffa159025025d7bc52 (patch) | |
tree | 4b18d9236e8371ee7eb42fab6d18230c37614ff4 /chrome | |
parent | 932671aa9a8c663bbcf5f816a1dc033220574850 (diff) | |
download | chromium_src-88908d6c5279e50382f835ffa159025025d7bc52.zip chromium_src-88908d6c5279e50382f835ffa159025025d7bc52.tar.gz chromium_src-88908d6c5279e50382f835ffa159025025d7bc52.tar.bz2 |
Add UI for changing auto-connect option on network.
Fixed crashing bug and ethernet not updating bug.
BUG=chromiumos:2896,2939,2996
TEST=manual, in network options dialog, the new auto-connect checkbox should now control whether or not we automatically connect to this network.
Review URL: http://codereview.chromium.org/1755013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46123 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/app/generated_resources.grd | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/mock_network_library.h | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.cc | 22 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.h | 18 | ||||
-rw-r--r-- | chrome/browser/chromeos/options/network_config_view.cc | 8 | ||||
-rw-r--r-- | chrome/browser/chromeos/options/wifi_config_view.cc | 48 | ||||
-rw-r--r-- | chrome/browser/chromeos/options/wifi_config_view.h | 13 | ||||
-rw-r--r-- | chrome/browser/chromeos/options/wifi_config_view_browsertest.cc | 53 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 |
9 files changed, 156 insertions, 16 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 1ebb1a3..6952b22 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -7363,6 +7363,9 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE" desc="In settings internet options, the label for the passphrase."> Network key: </message> + <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_AUTO_CONNECT" desc="In settings internet options, the label for the auto-connect checkbox."> + Auto-connect to this network + </message> <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DONE" desc="In settings internet options, the label for the button done."> Done </message> diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h index 2cd5c56..a5aa17a 100644 --- a/chrome/browser/chromeos/cros/mock_network_library.h +++ b/chrome/browser/chromeos/cros/mock_network_library.h @@ -44,9 +44,11 @@ class MockNetworkLibrary : public NetworkLibrary { MOCK_METHOD0(RequestWifiScan, void(void)); MOCK_METHOD4(ConnectToWifiNetwork, void(WifiNetwork, const string16&, const string16&, const string16&)); - MOCK_METHOD4(ConnectToWifiNetwork, void(const string16&, const string16&, - const string16&, const string16&)); + MOCK_METHOD5(ConnectToWifiNetwork, void(const string16&, const string16&, + const string16&, const string16&, + bool)); MOCK_METHOD1(ConnectToCellularNetwork, void(CellularNetwork)); + MOCK_METHOD1(SaveWifiNetwork, void(const WifiNetwork&)); MOCK_METHOD1(ForgetWifiNetwork, void(const WifiNetwork&)); MOCK_METHOD1(ForgetCellularNetwork, void(const CellularNetwork&)); diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index a26dd61..569f7a0 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -101,13 +101,16 @@ void NetworkLibraryImpl::ConnectToWifiNetwork(WifiNetwork network, void NetworkLibraryImpl::ConnectToWifiNetwork(const string16& ssid, const string16& password, const string16& identity, - const string16& certpath) { + const string16& certpath, + bool auto_connect) { if (CrosLibrary::Get()->EnsureLoaded()) { // First create a service from hidden network. ServiceInfo* service = GetWifiService(UTF16ToUTF8(ssid).c_str(), SECURITY_UNKNOWN); - // Now connect to that service. if (service) { + // Set auto-connect. + SetAutoConnect(service->service_path, auto_connect); + // Now connect to that service. ConnectToNetworkWithCertInfo(service->service_path, password.empty() ? NULL : UTF16ToUTF8(password).c_str(), identity.empty() ? NULL : UTF16ToUTF8(identity).c_str(), @@ -128,6 +131,13 @@ void NetworkLibraryImpl::ConnectToCellularNetwork(CellularNetwork network) { } } +void NetworkLibraryImpl::SaveWifiNetwork(const WifiNetwork& network) { + if (CrosLibrary::Get()->EnsureLoaded()) { + SetAutoConnect(network.service_path.c_str(), network.auto_connect); + // TODO(chocobo): Save password. + } +} + void NetworkLibraryImpl::ForgetWifiNetwork(const WifiNetwork& network) { if (CrosLibrary::Get()->EnsureLoaded()) { DeleteRememberedService(network.service_path.c_str()); @@ -210,6 +220,7 @@ void NetworkLibraryImpl::ParseSystem(SystemInfo* system, WifiNetworkVector* remembered_wifi_networks, CellularNetworkVector* remembered_cellular_networks) { DLOG(INFO) << "ParseSystem:"; + bool ethernet_found = false; for (int i = 0; i < system->service_size; i++) { const ServiceInfo& service = system->services[i]; DLOG(INFO) << " (" << service.type << @@ -251,6 +262,7 @@ void NetworkLibraryImpl::ParseSystem(SystemInfo* system, } } if (service.type == TYPE_ETHERNET) { + ethernet_found = true; ethernet->connecting = connecting; ethernet->connected = connected; ethernet->device_path = service.device_path ? service.device_path : @@ -268,6 +280,12 @@ void NetworkLibraryImpl::ParseSystem(SystemInfo* system, ip_address)); } } + if (!ethernet_found) { + ethernet->connecting = false; + ethernet->connected = false; + ethernet->device_path = std::string(); + ethernet->ip_address = std::string(); + } DLOG(INFO) << "Remembered networks:"; for (int i = 0; i < system->remembered_service_size; i++) { const ServiceInfo& service = system->remembered_services[i]; diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h index c99b431..d7e761e 100644 --- a/chrome/browser/chromeos/cros/network_library.h +++ b/chrome/browser/chromeos/cros/network_library.h @@ -198,11 +198,15 @@ class NetworkLibrary { virtual void ConnectToWifiNetwork(const string16& ssid, const string16& password, const string16& identity, - const string16& certpath) = 0; + const string16& certpath, + bool auto_connect) = 0; // Connect to the specified cellular network. virtual void ConnectToCellularNetwork(CellularNetwork network) = 0; + // Set whether or not to auto-connect to this network. + virtual void SaveWifiNetwork(const WifiNetwork& network) = 0; + // Forget the passed in wifi network. virtual void ForgetWifiNetwork(const WifiNetwork& network) = 0; @@ -313,7 +317,14 @@ class NetworkLibraryImpl : public NetworkLibrary, virtual void ConnectToWifiNetwork(const string16& ssid, const string16& password, const string16& identity, - const string16& certpath); + const string16& certpath, + bool auto_connect); + + // Connect to the specified cellular network. + virtual void ConnectToCellularNetwork(CellularNetwork network); + + // Set whether or not to auto-connect to this network. + virtual void SaveWifiNetwork(const WifiNetwork& network); // Forget the passed in wifi network. virtual void ForgetWifiNetwork(const WifiNetwork& network); @@ -321,9 +332,6 @@ class NetworkLibraryImpl : public NetworkLibrary, // Forget the passed in cellular network. virtual void ForgetCellularNetwork(const CellularNetwork& network); - // Connect to the specified cellular network. - virtual void ConnectToCellularNetwork(CellularNetwork network); - virtual bool ethernet_available() const { return available_devices_ & (1 << TYPE_ETHERNET); } virtual bool wifi_available() const { diff --git a/chrome/browser/chromeos/options/network_config_view.cc b/chrome/browser/chromeos/options/network_config_view.cc index 6b0a93c..fef22b1 100644 --- a/chrome/browser/chromeos/options/network_config_view.cc +++ b/chrome/browser/chromeos/options/network_config_view.cc @@ -72,8 +72,12 @@ bool NetworkConfigView::Cancel() { } bool NetworkConfigView::Accept() { - if (flags_ & FLAG_WIFI) - return wificonfig_view_->Accept(); + if (flags_ & FLAG_WIFI) { + if (flags_ & FLAG_LOGIN_ONLY) + return wificonfig_view_->Login(); + else + return wificonfig_view_->Save(); + } return true; } diff --git a/chrome/browser/chromeos/options/wifi_config_view.cc b/chrome/browser/chromeos/options/wifi_config_view.cc index e042391..83284d3 100644 --- a/chrome/browser/chromeos/options/wifi_config_view.cc +++ b/chrome/browser/chromeos/options/wifi_config_view.cc @@ -35,7 +35,8 @@ WifiConfigView::WifiConfigView(NetworkConfigView* parent, WifiNetwork wifi) certificate_browse_button_(NULL), certificate_path_(), passphrase_textfield_(NULL), - passphrase_visible_button_(NULL) { + passphrase_visible_button_(NULL), + autoconnect_checkbox_(NULL) { Init(); } @@ -48,7 +49,8 @@ WifiConfigView::WifiConfigView(NetworkConfigView* parent) certificate_browse_button_(NULL), certificate_path_(), passphrase_textfield_(NULL), - passphrase_visible_button_(NULL) { + passphrase_visible_button_(NULL), + autoconnect_checkbox_(NULL) { Init(); } @@ -100,7 +102,7 @@ void WifiConfigView::FileSelected(const FilePath& path, UpdateCanLogin(); // TODO(njw) Check if the passphrase decrypts the key. } -bool WifiConfigView::Accept() { +bool WifiConfigView::Login() { string16 identity_string, certificate_path_string; if (identity_textfield_ != NULL) { @@ -110,8 +112,10 @@ bool WifiConfigView::Accept() { if (other_network_) { CrosLibrary::Get()->GetNetworkLibrary()->ConnectToWifiNetwork( ssid_textfield_->text(), passphrase_textfield_->text(), - identity_string, certificate_path_string); + identity_string, certificate_path_string, + autoconnect_checkbox_->checked()); } else { + Save(); CrosLibrary::Get()->GetNetworkLibrary()->ConnectToWifiNetwork( wifi_, passphrase_textfield_->text(), identity_string, certificate_path_string); @@ -119,6 +123,32 @@ bool WifiConfigView::Accept() { return true; } +bool WifiConfigView::Save() { + // Save password and auto-connect here. + if (!other_network_) { + bool changed = false; + + bool auto_connect = autoconnect_checkbox_->checked(); + if (auto_connect != wifi_.auto_connect) { + wifi_.auto_connect = auto_connect; + changed = true; + } + + if (passphrase_textfield_) { + const std::string& passphrase = + UTF16ToUTF8(passphrase_textfield_->text()); + if (passphrase != wifi_.passphrase) { + wifi_.passphrase = passphrase; + changed = true; + } + } + + if (changed) + CrosLibrary::Get()->GetNetworkLibrary()->SaveWifiNetwork(wifi_); + } + return true; +} + const string16& WifiConfigView::GetSSID() const { return ssid_textfield_->text(); } @@ -215,6 +245,16 @@ void WifiConfigView::Init() { layout->AddView(passphrase_visible_button_); layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); } + + // Autoconnect checkbox + autoconnect_checkbox_ = new views::Checkbox( + l10n_util::GetString(IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_AUTO_CONNECT)); + // For other network, default to autoconnect. + bool autoconnect = other_network_ || wifi_.auto_connect; + autoconnect_checkbox_->SetChecked(autoconnect); + layout->StartRow(0, column_view_set_id); + layout->AddView(autoconnect_checkbox_, 3, 1); + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing); } } // namespace chromeos diff --git a/chrome/browser/chromeos/options/wifi_config_view.h b/chrome/browser/chromeos/options/wifi_config_view.h index 4fbd28e..bcfd442 100644 --- a/chrome/browser/chromeos/options/wifi_config_view.h +++ b/chrome/browser/chromeos/options/wifi_config_view.h @@ -11,7 +11,9 @@ #include "base/string16.h" #include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/shell_dialogs.h" +#include "testing/gtest/include/gtest/gtest_prod.h" #include "views/controls/button/button.h" +#include "views/controls/button/checkbox.h" #include "views/controls/button/image_button.h" #include "views/controls/button/native_button.h" #include "views/controls/textfield/textfield.h" @@ -45,7 +47,11 @@ class WifiConfigView : public views::View, // SelectFileDialog::Listener implementation. virtual void FileSelected(const FilePath& path, int index, void* params); - virtual bool Accept(); + // Login to network. + virtual bool Login(); + + // Save network information. + virtual bool Save(); // Get the typed in ssid. const string16& GetSSID() const; @@ -59,6 +65,10 @@ class WifiConfigView : public views::View, void FocusFirstField(); private: + FRIEND_TEST(WifiConfigViewTest, NoChangeSaveTest); + FRIEND_TEST(WifiConfigViewTest, ChangeAutoConnectSaveTest); + FRIEND_TEST(WifiConfigViewTest, ChangePasswordSaveTest); + // Initializes UI. void Init(); @@ -81,6 +91,7 @@ class WifiConfigView : public views::View, FilePath certificate_path_; views::Textfield* passphrase_textfield_; views::ImageButton* passphrase_visible_button_; + views::Checkbox* autoconnect_checkbox_; DISALLOW_COPY_AND_ASSIGN(WifiConfigView); }; diff --git a/chrome/browser/chromeos/options/wifi_config_view_browsertest.cc b/chrome/browser/chromeos/options/wifi_config_view_browsertest.cc new file mode 100644 index 0000000..2f5bfd6 --- /dev/null +++ b/chrome/browser/chromeos/options/wifi_config_view_browsertest.cc @@ -0,0 +1,53 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/options/wifi_config_view.h" + +#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h" +#include "chrome/browser/chromeos/cros/mock_network_library.h" + +namespace chromeos { +using ::testing::AnyNumber; +using ::testing::InvokeWithoutArgs; +using ::testing::Return; +using ::testing::ReturnRef; +using ::testing::_; + +class WifiConfigViewTest : public CrosInProcessBrowserTest { + protected: + WifiConfigViewTest() : CrosInProcessBrowserTest() {} + + virtual void SetUpInProcessBrowserTestFixture() { + InitStatusAreaMocks(); + SetStatusAreaMocksExpectations(); + } +}; + +// Test that if nothing is changed, we don't call SaveWifiNetwork. +IN_PROC_BROWSER_TEST_F(WifiConfigViewTest, NoChangeSaveTest) { + EXPECT_CALL(*mock_network_library_, SaveWifiNetwork(_)).Times(0); + WifiConfigView* view = new WifiConfigView(NULL, WifiNetwork()); + view->Save(); +} + +// Test that if autoconnect was changed, we call SaveWifiNetwork. +IN_PROC_BROWSER_TEST_F(WifiConfigViewTest, ChangeAutoConnectSaveTest) { + EXPECT_CALL(*mock_network_library_, SaveWifiNetwork(_)).Times(1); + WifiConfigView* view = new WifiConfigView(NULL, WifiNetwork()); + view->autoconnect_checkbox_->SetChecked( + !view->autoconnect_checkbox_->checked()); + view->Save(); +} + +// Test that if password was changed, we call SaveWifiNetwork. +IN_PROC_BROWSER_TEST_F(WifiConfigViewTest, ChangePasswordSaveTest) { + EXPECT_CALL(*mock_network_library_, SaveWifiNetwork(_)).Times(1); + WifiNetwork wifi = WifiNetwork(); + wifi.encrypted = true; + WifiConfigView* view = new WifiConfigView(NULL, wifi); + view->passphrase_textfield_->SetText(ASCIIToUTF16("test")); + view->Save(); +} + +} // namespace chromeos diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 9633673..00b7438 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1392,6 +1392,7 @@ 'browser/chromeos/login/network_screen_browsertest.cc', 'browser/chromeos/login/wizard_controller_browsertest.cc', 'browser/chromeos/notifications/notification_browsertest.cc', + 'browser/chromeos/options/wifi_config_view_browsertest.cc', 'browser/chromeos/panels/panel_browsertest.cc', 'browser/chromeos/status/clock_menu_button_browsertest.cc', 'browser/chromeos/status/power_menu_button_browsertest.cc', |