Reland "Make freeNativePeerConnectionObserver generic."

This is a reland of 046f78cae64fec756391e81206c5aa007274b791
Original change's description:
> Make freeNativePeerConnectionObserver generic.
> 
> Previously, it was only possible to free PeerConnectionObserverJni
> objects using this method. Now it is generic and can free any
> PeerConnectionObserver.
> 
> Bug: webrtc:8662
> Change-Id: I619ca5ed88a0c2553fa6d19ce41e510947d5bd44
> Reviewed-on: https://webrtc-review.googlesource.com/35222
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
> Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21411}

Bug: webrtc:8662
Change-Id: Iba64d613f7b434260a0d7b762ca67d49b295a84f
Reviewed-on: https://webrtc-review.googlesource.com/38901
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21587}
diff --git a/api/peerconnectioninterface.h b/api/peerconnectioninterface.h
index 6ea0cb0..9e26df5 100644
--- a/api/peerconnectioninterface.h
+++ b/api/peerconnectioninterface.h
@@ -67,6 +67,10 @@
 #ifndef API_PEERCONNECTIONINTERFACE_H_
 #define API_PEERCONNECTIONINTERFACE_H_
 
+// TODO(sakal): Remove this define after migration to virtual PeerConnection
+// observer is complete.
+#define VIRTUAL_PEERCONNECTION_OBSERVER_DESTRUCTOR
+
 #include <memory>
 #include <string>
 #include <utility>
@@ -977,6 +981,8 @@
     kIceState,
   };
 
+  virtual ~PeerConnectionObserver() = default;
+
   // Triggered when the SignalingState changed.
   virtual void OnSignalingChange(
       PeerConnectionInterface::SignalingState new_state) = 0;
@@ -1049,10 +1055,6 @@
   // TODO(hbos,deadbeef): Make pure virtual when all subclasses implement it.
   virtual void OnRemoveTrack(
       rtc::scoped_refptr<RtpReceiverInterface> receiver) {}
-
- protected:
-  // Dtor protected as objects shouldn't be deleted via this interface.
-  ~PeerConnectionObserver() {}
 };
 
 // PeerConnectionFactoryInterface is the factory interface used for creating
diff --git a/sdk/android/src/jni/pc/peerconnection.cc b/sdk/android/src/jni/pc/peerconnection.cc
index ed15980..d904f07 100644
--- a/sdk/android/src/jni/pc/peerconnection.cc
+++ b/sdk/android/src/jni/pc/peerconnection.cc
@@ -329,8 +329,7 @@
     JNIEnv*,
     const JavaParamRef<jclass>&,
     jlong j_p) {
-  PeerConnectionObserverJni* p =
-      reinterpret_cast<PeerConnectionObserverJni*>(j_p);
+  PeerConnectionObserver* p = reinterpret_cast<PeerConnectionObserver*>(j_p);
   delete p;
 }