summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-30 21:50:45 +0000
committerchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-30 21:50:45 +0000
commit88908d6c5279e50382f835ffa159025025d7bc52 (patch)
tree4b18d9236e8371ee7eb42fab6d18230c37614ff4 /chrome
parent932671aa9a8c663bbcf5f816a1dc033220574850 (diff)
downloadchromium_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.grd3
-rw-r--r--chrome/browser/chromeos/cros/mock_network_library.h6
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc22
-rw-r--r--chrome/browser/chromeos/cros/network_library.h18
-rw-r--r--chrome/browser/chromeos/options/network_config_view.cc8
-rw-r--r--chrome/browser/chromeos/options/wifi_config_view.cc48
-rw-r--r--chrome/browser/chromeos/options/wifi_config_view.h13
-rw-r--r--chrome/browser/chromeos/options/wifi_config_view_browsertest.cc53
-rw-r--r--chrome/chrome_tests.gypi1
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',