shill: wimax: Add SignalStrength property to WiMaxNetworkProxy.

BUG=chrome-os-partner:9831
TEST=Build and run unit tests.

Change-Id: If17118658dca8cfdfe60e1047adf51db146c5d7f
Reviewed-on: https://gerrit.chromium.org/gerrit/23099
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
Commit-Ready: Ben Chan <benchan@chromium.org>
diff --git a/mock_wimax_network_proxy.h b/mock_wimax_network_proxy.h
index e54a065..d922cf2 100644
--- a/mock_wimax_network_proxy.h
+++ b/mock_wimax_network_proxy.h
@@ -22,6 +22,7 @@
   MOCK_METHOD1(Type, int(Error *error));
   MOCK_METHOD1(CINR, int(Error *error));
   MOCK_METHOD1(RSSI, int(Error *error));
+  MOCK_METHOD1(SignalStrength, int(Error *error));
 
   DISALLOW_COPY_AND_ASSIGN(MockWiMaxNetworkProxy);
 };
diff --git a/wimax_network_proxy.cc b/wimax_network_proxy.cc
index 9859d67..c0581be 100644
--- a/wimax_network_proxy.cc
+++ b/wimax_network_proxy.cc
@@ -74,6 +74,16 @@
   return 0;
 }
 
+int WiMaxNetworkProxy::SignalStrength(Error *error) {
+  SLOG(DBus, 2) << __func__;
+  try {
+    return proxy_.SignalStrength();
+  } catch (const DBus::Error &e) {
+    FromDBusError(e, error);
+  }
+  return 0;
+}
+
 // static
 void WiMaxNetworkProxy::FromDBusError(const DBus::Error &dbus_error,
                                       Error *error) {
diff --git a/wimax_network_proxy.h b/wimax_network_proxy.h
index 3902af4..d1bccc1 100644
--- a/wimax_network_proxy.h
+++ b/wimax_network_proxy.h
@@ -24,6 +24,7 @@
   virtual int Type(Error *error);
   virtual int CINR(Error *error);
   virtual int RSSI(Error *error);
+  virtual int SignalStrength(Error *error);
 
  private:
   class Proxy : public org::chromium::WiMaxManager::Network_proxy,
diff --git a/wimax_network_proxy_interface.h b/wimax_network_proxy_interface.h
index 4c82e61..3777ba6 100644
--- a/wimax_network_proxy_interface.h
+++ b/wimax_network_proxy_interface.h
@@ -28,6 +28,7 @@
   virtual int Type(Error *error) = 0;
   virtual int CINR(Error *error) = 0;
   virtual int RSSI(Error *error) = 0;
+  virtual int SignalStrength(Error *error) = 0;
 };
 
 }  // namespace shill
diff --git a/wimax_service.cc b/wimax_service.cc
index b34b5bc..588d5ab 100644
--- a/wimax_service.cc
+++ b/wimax_service.cc
@@ -67,6 +67,12 @@
     return false;
   }
 
+  int signal_strength = proxy_->SignalStrength(&error);
+  if (!error.IsSuccess()) {
+    return false;
+  }
+  SetStrength(signal_strength);
+
   set_friendly_name(network_name_);
   storage_id_ =
       StringToLowerASCII(base::StringPrintf("%s_%s_%08x_%s",