shill: implement manager.RequestScan (for WiFi only)

BUG=chromium-os:19831
TEST=unittests, WiFiManager/000_SSID_Length_Limit

note that 000_SSID_Length_Limit does not pass yet,
because we don't do IP configuration yet. but it
does get scan results.

Change-Id: I8993b3c646eda705271d1f7ad7d7341c692ae06b
Reviewed-on: http://gerrit.chromium.org/gerrit/7407
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/wifi.h b/wifi.h
index 8a35e95..c58aa8c 100644
--- a/wifi.h
+++ b/wifi.h
@@ -33,6 +33,7 @@
   virtual ~WiFi();
   virtual void Start();
   virtual void Stop();
+  virtual void Scan();
   virtual bool TechnologyIs(const Technology type) const;
 
   // called by SupplicantInterfaceProxy, in response to events from
@@ -42,7 +43,7 @@
   void ScanDone();
 
   // called by WiFiService
-  void ConnectTo(const WiFiService &service);
+  void ConnectTo(WiFiService *service);
 
  private:
   typedef std::map<const std::string, WiFiEndpointRefPtr> EndpointMap;
@@ -55,9 +56,12 @@
   static const char kSupplicantPropertySSID[];
   static const char kSupplicantPropertyNetworkMode[];
   static const char kSupplicantPropertyKeyMode[];
+  static const char kSupplicantPropertyScanType[];
   static const char kSupplicantKeyModeNone[];
+  static const char kSupplicantScanTypeActive[];
 
   void ScanDoneTask();
+  void ScanTask();
 
   ScopedRunnableMethodFactory<WiFi> task_factory_;
   scoped_ptr<SupplicantProcessProxyInterface> supplicant_process_proxy_;