diff options
author | gspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-09 22:31:44 +0000 |
---|---|---|
committer | gspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-09 22:31:44 +0000 |
commit | 1ee14a25486ff9fe19df859325c48afb1393c52f (patch) | |
tree | 94380b895ecc97d9ae42d9fa3b8972217ad4ba1b /chrome | |
parent | 97dfa13b4a281343894dba3b6cc825a01e03a1ec (diff) | |
download | chromium_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')
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; |