summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorgspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-09 22:31:44 +0000
committergspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-09 22:31:44 +0000
commit1ee14a25486ff9fe19df859325c48afb1393c52f (patch)
tree94380b895ecc97d9ae42d9fa3b8972217ad4ba1b /chrome
parent97dfa13b4a281343894dba3b6cc825a01e03a1ec (diff)
downloadchromium_src-1ee14a25486ff9fe19df859325c48afb1393c52f.zip
chromium_src-1ee14a25486ff9fe19df859325c48afb1393c52f.tar.gz
chromium_src-1ee14a25486ff9fe19df859325c48afb1393c52f.tar.bz2
This adds Cros API for calling the "Refresh" function on shill's
IPConfig interface. BUG=chromium-os:33223,chromium:129052 TEST=built and tested with another in-process CL that will use it. Review URL: https://chromiumcodereview.appspot.com/10824242 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150921 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/cros/cros_network_functions.cc6
-rw-r--r--chrome/browser/chromeos/cros/cros_network_functions.h4
-rw-r--r--chrome/browser/chromeos/cros/mock_network_library.h1
-rw-r--r--chrome/browser/chromeos/cros/network_library.h4
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_cros.cc26
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_cros.h9
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_stub.cc3
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_stub.h2
8 files changed, 54 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/cros/cros_network_functions.cc b/chrome/browser/chromeos/cros/cros_network_functions.cc
index c3946de..48db119 100644
--- a/chrome/browser/chromeos/cros/cros_network_functions.cc
+++ b/chrome/browser/chromeos/cros/cros_network_functions.cc
@@ -680,6 +680,12 @@ bool CrosRemoveIPConfig(const std::string& ipconfig_path) {
CallRemoveAndBlock(dbus::ObjectPath(ipconfig_path));
}
+void CrosRequestIPConfigRefresh(const std::string& ipconfig_path) {
+ DBusThreadManager::Get()->GetFlimflamIPConfigClient()->Refresh(
+ dbus::ObjectPath(ipconfig_path),
+ base::Bind(&DoNothing));
+}
+
bool CrosGetWifiAccessPoints(WifiAccessPointVector* result) {
scoped_ptr<base::DictionaryValue> manager_properties(
DBusThreadManager::Get()->GetFlimflamManagerClient()->
diff --git a/chrome/browser/chromeos/cros/cros_network_functions.h b/chrome/browser/chromeos/cros/cros_network_functions.h
index bcffe3e..f8adb26 100644
--- a/chrome/browser/chromeos/cros/cros_network_functions.h
+++ b/chrome/browser/chromeos/cros/cros_network_functions.h
@@ -278,6 +278,10 @@ bool CrosAddIPConfig(const std::string& device_path, IPConfigType type);
// Removes an existing IP Config
bool CrosRemoveIPConfig(const std::string& ipconfig_path);
+// Refreshes the IP config |ipconfig_path| to pick up changes in
+// configuration, and renew the DHCP lease, if any.
+void CrosRequestIPConfigRefresh(const std::string& ipconfig_path);
+
// Reads out the results of the last wifi scan. These results are not
// pre-cached in the library, so the call may block whilst the results are
// read over IPC.
diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h
index 8525818..9851f28 100644
--- a/chrome/browser/chromeos/cros/mock_network_library.h
+++ b/chrome/browser/chromeos/cros/mock_network_library.h
@@ -119,6 +119,7 @@ class MockNetworkLibrary : public NetworkLibrary {
MOCK_CONST_METHOD1(HasProfileType, bool(NetworkProfileType));
MOCK_METHOD1(GetWifiAccessPoints, bool(WifiAccessPointVector*));
MOCK_CONST_METHOD1(CanConnectToNetwork, bool(const Network*));
+ MOCK_METHOD1(RefreshIPConfig, void(Network*));
MOCK_METHOD1(ConnectToWifiNetwork, void(WifiNetwork*));
MOCK_METHOD2(ConnectToWifiNetwork, void(WifiNetwork*, bool));
MOCK_METHOD1(ConnectToWimaxNetwork, void(WimaxNetwork*));
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index 7259660..6c79b4b 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -1558,6 +1558,10 @@ class NetworkLibrary {
// user input (e.g. it requires a user profile but none is available).
virtual bool CanConnectToNetwork(const Network* network) const = 0;
+ // Refresh the IP configuration of the given network after changes. Puts
+ // newly configured properties into effect and renews DHCP lease.
+ virtual void RefreshIPConfig(Network* network) = 0;
+
// Connect to the specified wireless network.
virtual void ConnectToWifiNetwork(WifiNetwork* network) = 0;
diff --git a/chrome/browser/chromeos/cros/network_library_impl_cros.cc b/chrome/browser/chromeos/cros/network_library_impl_cros.cc
index 21b12a5..da0a2ae 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_cros.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_cros.cc
@@ -5,9 +5,11 @@
#include "chrome/browser/chromeos/cros/network_library_impl_cros.h"
#include <dbus/dbus-glib.h>
+#include "base/bind.h"
#include "base/command_line.h"
#include "base/json/json_writer.h" // for debug output only.
#include "base/metrics/histogram.h"
+#include "base/values.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/native_network_constants.h"
#include "chrome/browser/chromeos/cros/native_network_parser.h"
@@ -456,6 +458,30 @@ bool NetworkLibraryImplCros::GetWifiAccessPoints(
return CrosGetWifiAccessPoints(result);
}
+void NetworkLibraryImplCros::RefreshIPConfig(Network* network) {
+ DCHECK(network);
+ CrosRequestNetworkDeviceProperties(
+ network->device_path(),
+ base::Bind(&NetworkLibraryImplCros::RefreshIPConfigCallback,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void NetworkLibraryImplCros::RefreshIPConfigCallback(
+ const std::string& device_path,
+ const base::DictionaryValue* properties) {
+ const ListValue* ips = NULL;
+ if (!properties->GetListWithoutPathExpansion(
+ flimflam::kIPConfigsProperty, &ips))
+ return;
+
+ for (size_t i = 0; i < ips->GetSize(); i++) {
+ std::string ipconfig_path;
+ if (!ips->GetString(i, &ipconfig_path))
+ continue;
+ CrosRequestIPConfigRefresh(ipconfig_path);
+ }
+}
+
void NetworkLibraryImplCros::DisconnectFromNetwork(const Network* network) {
DCHECK(network);
// Asynchronous disconnect request. Network state will be updated through
diff --git a/chrome/browser/chromeos/cros/network_library_impl_cros.h b/chrome/browser/chromeos/cros/network_library_impl_cros.h
index 1061644..692caa3 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_cros.h
+++ b/chrome/browser/chromeos/cros/network_library_impl_cros.h
@@ -60,6 +60,8 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
virtual void RequestNetworkScan() OVERRIDE;
virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) OVERRIDE;
+ virtual void RefreshIPConfig(Network* network) OVERRIDE;
+
virtual void DisconnectFromNetwork(const Network* network) OVERRIDE;
virtual void CallEnableNetworkDeviceType(
ConnectionType device, bool enable) OVERRIDE;
@@ -74,7 +76,7 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
virtual void SetIPConfig(const NetworkIPConfig& ipconfig) OVERRIDE;
//////////////////////////////////////////////////////////////////////////////
- // Calbacks.
+ // Callbacks.
void UpdateNetworkStatus(
const std::string& path, const std::string& key, const Value& value);
@@ -114,6 +116,11 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
void NetworkDeviceUpdate(const std::string& device_path,
const base::DictionaryValue* properties);
+ // Second half of refreshing IPConfig for a network. Refreshes all IP config
+ // paths found in properties.
+ void RefreshIPConfigCallback(const std::string& device_path,
+ const base::DictionaryValue* properties);
+
private:
// This processes all Manager update messages.
bool NetworkManagerStatusChanged(const std::string& key, const Value* value);
diff --git a/chrome/browser/chromeos/cros/network_library_impl_stub.cc b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
index 4f0b700..81288c7 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_stub.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
@@ -641,6 +641,9 @@ bool NetworkLibraryImplStub::GetWifiAccessPoints(
return true;
}
+void NetworkLibraryImplStub::RefreshIPConfig(Network* network) {
+}
+
void NetworkLibraryImplStub::DisconnectFromNetwork(const Network* network) {
// Update the network state here since no network manager in stub impl.
Network* modify_network = const_cast<Network*>(network);
diff --git a/chrome/browser/chromeos/cros/network_library_impl_stub.h b/chrome/browser/chromeos/cros/network_library_impl_stub.h
index 7d6018d..07a7f60 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_stub.h
+++ b/chrome/browser/chromeos/cros/network_library_impl_stub.h
@@ -67,6 +67,8 @@ class NetworkLibraryImplStub : public NetworkLibraryImplBase {
virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) OVERRIDE;
+ virtual void RefreshIPConfig(Network* network) OVERRIDE;
+
virtual void DisconnectFromNetwork(const Network* network) OVERRIDE;
virtual void EnableOfflineMode(bool enable) OVERRIDE;