bluetooth: Refactor (Add|Remove)Observer impls into BluetoothAdapter.

In preparation before BluetoothAdapterAndroid impl, move duplicate
implementation of AddObserver, RemoveObserver into the BluetoothAdapter
base class.

BUG=471536

Review URL: https://codereview.chromium.org/1057603004

Cr-Commit-Position: refs/heads/master@{#326186}
diff --git a/device/bluetooth/bluetooth_adapter.cc b/device/bluetooth/bluetooth_adapter.cc
index 14679d6..23fde08 100644
--- a/device/bluetooth/bluetooth_adapter.cc
+++ b/device/bluetooth/bluetooth_adapter.cc
@@ -34,6 +34,16 @@
 }
 #endif
 
+void BluetoothAdapter::AddObserver(BluetoothAdapter::Observer* observer) {
+  DCHECK(observer);
+  observers_.AddObserver(observer);
+}
+
+void BluetoothAdapter::RemoveObserver(BluetoothAdapter::Observer* observer) {
+  DCHECK(observer);
+  observers_.RemoveObserver(observer);
+}
+
 void BluetoothAdapter::StartDiscoverySession(
     const DiscoverySessionCallback& callback,
     const ErrorCallback& error_callback) {
diff --git a/device/bluetooth/bluetooth_adapter.h b/device/bluetooth/bluetooth_adapter.h
index e2ebf48..4841048 100644
--- a/device/bluetooth/bluetooth_adapter.h
+++ b/device/bluetooth/bluetooth_adapter.h
@@ -215,9 +215,8 @@
   // Adds and removes observers for events on this bluetooth adapter. If
   // monitoring multiple adapters, check the |adapter| parameter of observer
   // methods to determine which adapter is issuing the event.
-  virtual void AddObserver(BluetoothAdapter::Observer* observer) = 0;
-  virtual void RemoveObserver(
-      BluetoothAdapter::Observer* observer) = 0;
+  virtual void AddObserver(BluetoothAdapter::Observer* observer);
+  virtual void RemoveObserver(BluetoothAdapter::Observer* observer);
 
   // The address of this adapter. The address format is "XX:XX:XX:XX:XX:XX",
   // where each XX is a hexadecimal number.
@@ -454,6 +453,9 @@
   void DiscoverySessionBecameInactive(
       BluetoothDiscoverySession* discovery_session);
 
+  // Observers of BluetoothAdapter, notified from implementation subclasses.
+  ObserverList<device::BluetoothAdapter::Observer> observers_;
+
   // Devices paired with, connected to, discovered by, or visible to the
   // adapter. The key is the Bluetooth address of the device and the value is
   // the BluetoothDevice object whose lifetime is managed by the adapter
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.cc b/device/bluetooth/bluetooth_adapter_chromeos.cc
index b9cdd09..8f733238 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.cc
+++ b/device/bluetooth/bluetooth_adapter_chromeos.cc
@@ -144,18 +144,6 @@
     delete this;
 }
 
-void BluetoothAdapterChromeOS::AddObserver(
-    BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.AddObserver(observer);
-}
-
-void BluetoothAdapterChromeOS::RemoveObserver(
-    BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.RemoveObserver(observer);
-}
-
 std::string BluetoothAdapterChromeOS::GetAddress() const {
   if (!IsPresent())
     return std::string();
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.h b/device/bluetooth/bluetooth_adapter_chromeos.h
index 055bafb9..4254b8a 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.h
+++ b/device/bluetooth/bluetooth_adapter_chromeos.h
@@ -66,8 +66,6 @@
   // BluetoothAdapter:
   void Shutdown() override;
   void DeleteOnCorrectThread() const override;
-  void AddObserver(device::BluetoothAdapter::Observer* observer) override;
-  void RemoveObserver(device::BluetoothAdapter::Observer* observer) override;
   std::string GetAddress() const override;
   std::string GetName() const override;
   void SetName(const std::string& name,
@@ -353,9 +351,6 @@
   // Object path of the adapter we track.
   dbus::ObjectPath object_path_;
 
-  // List of observers interested in event notifications from us.
-  ObserverList<device::BluetoothAdapter::Observer> observers_;
-
   // Instance of the D-Bus agent object used for pairing, initialized with
   // our own class as its delegate.
   scoped_ptr<BluetoothAgentServiceProvider> agent_;
diff --git a/device/bluetooth/bluetooth_adapter_mac.h b/device/bluetooth/bluetooth_adapter_mac.h
index bca4389..3567e0f0 100644
--- a/device/bluetooth/bluetooth_adapter_mac.h
+++ b/device/bluetooth/bluetooth_adapter_mac.h
@@ -41,8 +41,6 @@
   static base::WeakPtr<BluetoothAdapter> CreateAdapter();
 
   // BluetoothAdapter:
-  void AddObserver(BluetoothAdapter::Observer* observer) override;
-  void RemoveObserver(BluetoothAdapter::Observer* observer) override;
   std::string GetAddress() const override;
   std::string GetName() const override;
   void SetName(const std::string& name,
@@ -129,9 +127,6 @@
 
   scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
 
-  // List of observers interested in event notifications from us.
-  ObserverList<BluetoothAdapter::Observer> observers_;
-
   base::WeakPtrFactory<BluetoothAdapterMac> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterMac);
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm
index 7c04a433..c2e77eee 100644
--- a/device/bluetooth/bluetooth_adapter_mac.mm
+++ b/device/bluetooth/bluetooth_adapter_mac.mm
@@ -64,16 +64,6 @@
 BluetoothAdapterMac::~BluetoothAdapterMac() {
 }
 
-void BluetoothAdapterMac::AddObserver(BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.AddObserver(observer);
-}
-
-void BluetoothAdapterMac::RemoveObserver(BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.RemoveObserver(observer);
-}
-
 std::string BluetoothAdapterMac::GetAddress() const {
   return address_;
 }
diff --git a/device/bluetooth/bluetooth_adapter_unittest.cc b/device/bluetooth/bluetooth_adapter_unittest.cc
index 81e2dcb..939ae050 100644
--- a/device/bluetooth/bluetooth_adapter_unittest.cc
+++ b/device/bluetooth/bluetooth_adapter_unittest.cc
@@ -19,10 +19,6 @@
   TestBluetoothAdapter() {
   }
 
-  void AddObserver(BluetoothAdapter::Observer* observer) override {}
-
-  void RemoveObserver(BluetoothAdapter::Observer* observer) override {}
-
   std::string GetAddress() const override { return ""; }
 
   std::string GetName() const override { return ""; }
diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc
index a9fc20034..20cd897 100644
--- a/device/bluetooth/bluetooth_adapter_win.cc
+++ b/device/bluetooth/bluetooth_adapter_win.cc
@@ -53,16 +53,6 @@
   }
 }
 
-void BluetoothAdapterWin::AddObserver(BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.AddObserver(observer);
-}
-
-void BluetoothAdapterWin::RemoveObserver(BluetoothAdapter::Observer* observer) {
-  DCHECK(observer);
-  observers_.RemoveObserver(observer);
-}
-
 std::string BluetoothAdapterWin::GetAddress() const {
   return address_;
 }
diff --git a/device/bluetooth/bluetooth_adapter_win.h b/device/bluetooth/bluetooth_adapter_win.h
index 2b086a2f..bf22f3d 100644
--- a/device/bluetooth/bluetooth_adapter_win.h
+++ b/device/bluetooth/bluetooth_adapter_win.h
@@ -41,8 +41,6 @@
       const InitCallback& init_callback);
 
   // BluetoothAdapter:
-  virtual void AddObserver(BluetoothAdapter::Observer* observer) override;
-  virtual void RemoveObserver(BluetoothAdapter::Observer* observer) override;
   virtual std::string GetAddress() const override;
   virtual std::string GetName() const override;
   virtual void SetName(const std::string& name,
@@ -152,9 +150,6 @@
 
   base::ThreadChecker thread_checker_;
 
-  // List of observers interested in event notifications from us.
-  ObserverList<BluetoothAdapter::Observer> observers_;
-
   // NOTE: This should remain the last member so it'll be destroyed and
   // invalidate its weak pointers before any other members are destroyed.
   base::WeakPtrFactory<BluetoothAdapterWin> weak_ptr_factory_;