shill: Handle setting of cellular's AllowRoaming property.

Disconnect the cellular device when roaming and roaming is disallowed. Broadcast
changes in the property.

BUG=chromium-os:25849
TEST=unit tests

Change-Id: I099f85152871cf8e64e96ded72b40712bd66dbd1
Reviewed-on: https://gerrit.chromium.org/gerrit/15406
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular.cc b/cellular.cc
index 7cd274d..349e4c6 100644
--- a/cellular.cc
+++ b/cellular.cc
@@ -316,7 +316,12 @@
 void Cellular::OnConnected() {
   VLOG(2) << __func__;
   SetState(kStateConnected);
-  EstablishLink();
+  if (!capability_->allow_roaming() &&
+      service_->roaming_state() == flimflam::kRoamingStateRoaming) {
+    Disconnect(NULL);
+  } else {
+    EstablishLink();
+  }
 }
 
 void Cellular::OnConnectFailed() {