shill: cellular: Track auto-connect metrics.

Network.Shill.Cellular.AutoConnectTries and
Network.Shill.Cellular.AutoConnectTotalTime.

BUG=chromium-os:38406
TEST=Connect modem via auto-connect and check chrome://histograms

Change-Id: I79c2db2b8f4897779275675c9c0fb6278298d462
Reviewed-on: https://gerrit.chromium.org/gerrit/42361
Commit-Queue: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/cellular_service.h b/cellular_service.h
index 8af31e1..e665e56 100644
--- a/cellular_service.h
+++ b/cellular_service.h
@@ -61,6 +61,7 @@
   virtual ~CellularService();
 
   // Inherited from Service.
+  virtual void AutoConnect();
   virtual void Connect(Error *error);
   virtual void Disconnect(Error *error);
   virtual void ActivateCellularModem(const std::string &carrier,
@@ -95,6 +96,10 @@
   void SetRoamingState(const std::string &state);
   const std::string &roaming_state() const { return roaming_state_; }
 
+  bool is_auto_connecting() const {
+    return is_auto_connecting_;
+  }
+
   // Overrides Load and Save from parent Service class.  We will call
   // the parent method.
   virtual bool Load(StoreInterface *storage);
@@ -168,6 +173,12 @@
 
   CellularRefPtr cellular_;
 
+  // Flag indicating that a connect request is an auto-connect request.
+  // Note: Since Connect() is asynchronous, this flag is only set during the
+  // call to Connect().  It does not remain set while the async request is
+  // in flight.
+  bool is_auto_connecting_;
+
   DISALLOW_COPY_AND_ASSIGN(CellularService);
 };