Revert "Added PeerConnectionObserver::OnRemoveTrack."

This reverts commit ba97ba7af917d4152f5f3363aba1c1561c6673dc.

Reason for revert: The new tests have caused several test failures on the test bots; the method FakeAudioMediaStreamTrack:GetSignalLevel, which is not supposed to be called is sometimes called anyway.

Original change's description:
> Added PeerConnectionObserver::OnRemoveTrack.
> 
> This corresponds to processing the removal of a remote track step of
> the spec, with processing the addition of a remote track already
> covered by OnAddTrack.
> https://w3c.github.io/webrtc-pc/#processing-remote-mediastreamtracks
> 
> Bug: webrtc:8260, webrtc:8315
> Change-Id: Ica8be92369733eb3cf1397fb60385d45a9b58700
> Reviewed-on: https://webrtc-review.googlesource.com/4722
> Commit-Queue: Henrik Boström <hbos@webrtc.org>
> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
> Reviewed-by: Steve Anton <steveanton@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#20214}

TBR=steveanton@webrtc.org,deadbeef@webrtc.org,hbos@webrtc.org

Change-Id: Id2d9533e27227254769b4280a8ff10a47313e714
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8260, webrtc:8315
Reviewed-on: https://webrtc-review.googlesource.com/7940
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20218}
diff --git a/api/peerconnectioninterface.h b/api/peerconnectioninterface.h
index 1039cb5..7291a86 100644
--- a/api/peerconnectioninterface.h
+++ b/api/peerconnectioninterface.h
@@ -868,31 +868,13 @@
   // Called when the ICE connection receiving status changes.
   virtual void OnIceConnectionReceivingChange(bool receiving) {}
 
-  // This is called when a receiver and its track is created.
-  // TODO(zhihuang): Make this pure virtual when all subclasses implement it.
+  // Called when a track is added to streams.
+  // TODO(zhihuang) Make this a pure virtual method when all its subclasses
+  // implement it.
   virtual void OnAddTrack(
       rtc::scoped_refptr<RtpReceiverInterface> receiver,
       const std::vector<rtc::scoped_refptr<MediaStreamInterface>>& streams) {}
 
-  // TODO(hbos,deadbeef): Add |OnAssociatedStreamsUpdated| with |receiver| and
-  // |streams| as arguments. This should be called when an existing receiver its
-  // associated streams updated. https://crbug.com/webrtc/8315
-  // This may be blocked on supporting multiple streams per sender or else
-  // this may count as the removal and addition of a track?
-  // https://crbug.com/webrtc/7932
-
-  // Called when a receiver is completely removed. This is current (Plan B SDP)
-  // behavior that occurs when processing the removal of a remote track, and is
-  // called when the receiver is removed and the track is muted. When Unified
-  // Plan SDP is supported, transceivers can change direction (and receivers
-  // stopped) but receivers are never removed.
-  // https://w3c.github.io/webrtc-pc/#process-remote-track-removal
-  // TODO(hbos,deadbeef): When Unified Plan SDP is supported and receivers are
-  // no longer removed, deprecate and remove this callback.
-  // 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() {}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 950a6ee..6e95bf8 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -393,7 +393,6 @@
       "mediastream_unittest.cc",
       "peerconnection_crypto_unittest.cc",
       "peerconnection_integrationtest.cc",
-      "peerconnection_rtp_unittest.cc",
       "peerconnectionendtoend_unittest.cc",
       "peerconnectionfactory_unittest.cc",
       "peerconnectioninterface_unittest.cc",
@@ -468,7 +467,6 @@
       "../p2p:p2p_test_utils",
       "../p2p:rtc_p2p",
       "../pc:rtc_pc",
-      "../rtc_base:rtc_base",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_main",
       "../rtc_base:rtc_base_tests_utils",
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index e8e428d..bc95895 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -1462,18 +1462,15 @@
 
 // TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote
 // description.
-rtc::scoped_refptr<RtpReceiverInterface> PeerConnection::RemoveAndStopReceiver(
-    const std::string& track_id) {
+void PeerConnection::DestroyReceiver(const std::string& track_id) {
   auto it = FindReceiverForTrack(track_id);
   if (it == receivers_.end()) {
     LOG(LS_WARNING) << "RtpReceiver for track with id " << track_id
                     << " doesn't exist.";
-    return nullptr;
+  } else {
+    (*it)->internal()->Stop();
+    receivers_.erase(it);
   }
-  (*it)->internal()->Stop();
-  rtc::scoped_refptr<RtpReceiverInterface> receiver = *it;
-  receivers_.erase(it);
-  return receiver;
 }
 
 void PeerConnection::AddAudioTrack(AudioTrackInterface* track,
@@ -2015,11 +2012,10 @@
                                           cricket::MediaType media_type) {
   MediaStreamInterface* stream = remote_streams_->find(stream_label);
 
-  rtc::scoped_refptr<RtpReceiverInterface> receiver;
   if (media_type == cricket::MEDIA_TYPE_AUDIO) {
     // When the MediaEngine audio channel is destroyed, the RemoteAudioSource
     // will be notified which will end the AudioRtpReceiver::track().
-    receiver = RemoveAndStopReceiver(track_id);
+    DestroyReceiver(track_id);
     rtc::scoped_refptr<AudioTrackInterface> audio_track =
         stream->FindAudioTrack(track_id);
     if (audio_track) {
@@ -2028,7 +2024,7 @@
   } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
     // Stopping or destroying a VideoRtpReceiver will end the
     // VideoRtpReceiver::track().
-    receiver = RemoveAndStopReceiver(track_id);
+    DestroyReceiver(track_id);
     rtc::scoped_refptr<VideoTrackInterface> video_track =
         stream->FindVideoTrack(track_id);
     if (video_track) {
@@ -2039,9 +2035,6 @@
   } else {
     RTC_NOTREACHED() << "Invalid media type";
   }
-  if (receiver) {
-    observer_->OnRemoveTrack(receiver);
-  }
 }
 
 void PeerConnection::UpdateEndedRemoteMediaStreams() {
diff --git a/pc/peerconnection.h b/pc/peerconnection.h
index 9d49f93..fa06c3d 100644
--- a/pc/peerconnection.h
+++ b/pc/peerconnection.h
@@ -246,8 +246,7 @@
   void CreateVideoReceiver(MediaStreamInterface* stream,
                            const std::string& track_id,
                            uint32_t ssrc);
-  rtc::scoped_refptr<RtpReceiverInterface> RemoveAndStopReceiver(
-      const std::string& track_id);
+  void DestroyReceiver(const std::string& track_id);
 
   // May be called either by AddStream/RemoveStream, or when a track is
   // added/removed from a stream previously added via AddStream.
diff --git a/pc/peerconnection_rtp_unittest.cc b/pc/peerconnection_rtp_unittest.cc
deleted file mode 100644
index 9dd6796..0000000
--- a/pc/peerconnection_rtp_unittest.cc
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- *  Copyright 2017 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <memory>
-#include <vector>
-
-#include "api/jsep.h"
-#include "api/mediastreaminterface.h"
-#include "api/peerconnectioninterface.h"
-#include "pc/mediastream.h"
-#include "pc/mediastreamtrack.h"
-#include "pc/peerconnectionwrapper.h"
-#include "pc/test/fakeaudiocapturemodule.h"
-#include "pc/test/mockpeerconnectionobservers.h"
-#include "rtc_base/checks.h"
-#include "rtc_base/gunit.h"
-#include "rtc_base/ptr_util.h"
-#include "rtc_base/refcountedobject.h"
-#include "rtc_base/scoped_ref_ptr.h"
-#include "rtc_base/thread.h"
-
-// This file contains tests for RTP Media API-related behavior of
-// |webrtc::PeerConnection|, see https://w3c.github.io/webrtc-pc/#rtp-media-api.
-
-namespace {
-
-// TODO(hbos): Consolidate fake track classes. https://crbug.com/webrtc/8369
-class FakeAudioMediaStreamTrack
-    : public rtc::RefCountedObject<
-          webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>> {
- public:
-  explicit FakeAudioMediaStreamTrack(const std::string& id)
-      : rtc::RefCountedObject<
-            webrtc::MediaStreamTrack<webrtc::AudioTrackInterface>>(id) {}
-
-  std::string kind() const override {
-    return webrtc::MediaStreamTrackInterface::kAudioKind;
-  }
-
-  webrtc::AudioSourceInterface* GetSource() const override { return nullptr; }
-
-  void AddSink(webrtc::AudioTrackSinkInterface* sink) override {}
-
-  void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override {}
-
-  bool GetSignalLevel(int* level) override {
-    RTC_NOTREACHED();
-    return false;
-  }
-
-  rtc::scoped_refptr<webrtc::AudioProcessorInterface> GetAudioProcessor()
-      override {
-    RTC_NOTREACHED();
-    return nullptr;
-  }
-};
-
-class PeerConnectionRtpTest : public testing::Test {
- public:
-  PeerConnectionRtpTest()
-      : pc_factory_(webrtc::CreatePeerConnectionFactory(
-            rtc::Thread::Current(),
-            rtc::Thread::Current(),
-            rtc::Thread::Current(),
-            FakeAudioCaptureModule::Create(),
-            nullptr,
-            nullptr)) {}
-
-  std::unique_ptr<webrtc::PeerConnectionWrapper> CreatePeerConnection() {
-    webrtc::PeerConnectionInterface::RTCConfiguration config;
-    auto observer = rtc::MakeUnique<webrtc::MockPeerConnectionObserver>();
-    auto pc = pc_factory_->CreatePeerConnection(config, nullptr, nullptr,
-                                                observer.get());
-    return std::unique_ptr<webrtc::PeerConnectionWrapper>(
-        new webrtc::PeerConnectionWrapper(pc_factory_, pc,
-                                          std::move(observer)));
-  }
-
- protected:
-  rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_;
-};
-
-TEST_F(PeerConnectionRtpTest, AddTrackWithoutStreamFiresOnAddTrack) {
-  auto caller = CreatePeerConnection();
-  auto callee = CreatePeerConnection();
-
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track(
-      new FakeAudioMediaStreamTrack("audio_track"));
-  EXPECT_TRUE(caller->pc()->AddTrack(audio_track.get(), {}));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  // TODO(deadbeef): When no stream is handled correctly we would expect
-  // |add_track_events_[0].streams| to be empty. https://crbug.com/webrtc/7933
-  ASSERT_EQ(1u, callee->observer()->add_track_events_[0].streams.size());
-  EXPECT_TRUE(
-      callee->observer()->add_track_events_[0].streams[0]->FindAudioTrack(
-          "audio_track"));
-}
-
-TEST_F(PeerConnectionRtpTest, AddTrackWithStreamFiresOnAddTrack) {
-  auto caller = CreatePeerConnection();
-  auto callee = CreatePeerConnection();
-
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track(
-      new FakeAudioMediaStreamTrack("audio_track"));
-  auto stream = webrtc::MediaStream::Create("audio_stream");
-  EXPECT_TRUE(caller->pc()->AddTrack(audio_track.get(), {stream.get()}));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  ASSERT_EQ(1u, callee->observer()->add_track_events_[0].streams.size());
-  EXPECT_EQ("audio_stream",
-            callee->observer()->add_track_events_[0].streams[0]->label());
-  EXPECT_TRUE(
-      callee->observer()->add_track_events_[0].streams[0]->FindAudioTrack(
-          "audio_track"));
-}
-
-TEST_F(PeerConnectionRtpTest, RemoveTrackWithoutStreamFiresOnRemoveTrack) {
-  auto caller = CreatePeerConnection();
-  auto callee = CreatePeerConnection();
-
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track(
-      new FakeAudioMediaStreamTrack("audio_track"));
-  auto sender = caller->pc()->AddTrack(audio_track.get(), {});
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  EXPECT_TRUE(caller->pc()->RemoveTrack(sender));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  EXPECT_EQ(callee->observer()->GetAddTrackReceivers(),
-            callee->observer()->remove_track_events_);
-}
-
-TEST_F(PeerConnectionRtpTest, RemoveTrackWithStreamFiresOnRemoveTrack) {
-  auto caller = CreatePeerConnection();
-  auto callee = CreatePeerConnection();
-
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track(
-      new FakeAudioMediaStreamTrack("audio_track"));
-  auto stream = webrtc::MediaStream::Create("audio_stream");
-  auto sender = caller->pc()->AddTrack(audio_track.get(), {stream.get()});
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  EXPECT_TRUE(caller->pc()->RemoveTrack(sender));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-
-  ASSERT_EQ(1u, callee->observer()->add_track_events_.size());
-  EXPECT_EQ(callee->observer()->GetAddTrackReceivers(),
-            callee->observer()->remove_track_events_);
-}
-
-TEST_F(PeerConnectionRtpTest, RemoveTrackWithSharedStreamFiresOnRemoveTrack) {
-  auto caller = CreatePeerConnection();
-  auto callee = CreatePeerConnection();
-
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track1(
-      new FakeAudioMediaStreamTrack("audio_track1"));
-  rtc::scoped_refptr<FakeAudioMediaStreamTrack> audio_track2(
-      new FakeAudioMediaStreamTrack("audio_track2"));
-  auto stream = webrtc::MediaStream::Create("shared_audio_stream");
-  std::vector<webrtc::MediaStreamInterface*> streams{stream.get()};
-  auto sender1 = caller->pc()->AddTrack(audio_track1.get(), streams);
-  auto sender2 = caller->pc()->AddTrack(audio_track2.get(), streams);
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-
-  ASSERT_EQ(2u, callee->observer()->add_track_events_.size());
-
-  // Remove "audio_track1".
-  EXPECT_TRUE(caller->pc()->RemoveTrack(sender1));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-  ASSERT_EQ(2u, callee->observer()->add_track_events_.size());
-  EXPECT_EQ(
-      std::vector<rtc::scoped_refptr<webrtc::RtpReceiverInterface>>{
-          callee->observer()->add_track_events_[0].receiver},
-      callee->observer()->remove_track_events_);
-
-  // Remove "audio_track2".
-  EXPECT_TRUE(caller->pc()->RemoveTrack(sender2));
-  ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
-  ASSERT_EQ(2u, callee->observer()->add_track_events_.size());
-  EXPECT_EQ(callee->observer()->GetAddTrackReceivers(),
-            callee->observer()->remove_track_events_);
-}
-
-}  // namespace
diff --git a/pc/test/mockpeerconnectionobservers.h b/pc/test/mockpeerconnectionobservers.h
index 119c32b..64f84b6 100644
--- a/pc/test/mockpeerconnectionobservers.h
+++ b/pc/test/mockpeerconnectionobservers.h
@@ -25,16 +25,6 @@
 
 class MockPeerConnectionObserver : public PeerConnectionObserver {
  public:
-  struct AddTrackEvent {
-    explicit AddTrackEvent(
-        rtc::scoped_refptr<RtpReceiverInterface> receiver,
-        std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams)
-        : receiver(std::move(receiver)), streams(std::move(streams)) {}
-
-    rtc::scoped_refptr<RtpReceiverInterface> receiver;
-    std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams;
-  };
-
   MockPeerConnectionObserver() : remote_streams_(StreamCollection::Create()) {}
   virtual ~MockPeerConnectionObserver() {}
   void SetPeerConnectionInterface(PeerConnectionInterface* pc) {
@@ -102,26 +92,13 @@
     callback_triggered_ = true;
   }
 
-  void OnAddTrack(rtc::scoped_refptr<RtpReceiverInterface> receiver,
-                  const std::vector<rtc::scoped_refptr<MediaStreamInterface>>&
-                      streams) override {
+  void OnAddTrack(
+      rtc::scoped_refptr<webrtc::RtpReceiverInterface> receiver,
+      const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>>&
+          streams) override {
     RTC_DCHECK(receiver);
     num_added_tracks_++;
     last_added_track_label_ = receiver->id();
-    add_track_events_.push_back(AddTrackEvent(receiver, streams));
-  }
-
-  void OnRemoveTrack(
-      rtc::scoped_refptr<RtpReceiverInterface> receiver) override {
-    remove_track_events_.push_back(receiver);
-  }
-
-  std::vector<rtc::scoped_refptr<RtpReceiverInterface>> GetAddTrackReceivers() {
-    std::vector<rtc::scoped_refptr<RtpReceiverInterface>> receivers;
-    for (const AddTrackEvent& event : add_track_events_) {
-      receivers.push_back(event.receiver);
-    }
-    return receivers;
   }
 
   // Returns the label of the last added stream.
@@ -147,8 +124,6 @@
   bool callback_triggered_ = false;
   int num_added_tracks_ = 0;
   std::string last_added_track_label_;
-  std::vector<AddTrackEvent> add_track_events_;
-  std::vector<rtc::scoped_refptr<RtpReceiverInterface>> remove_track_events_;
 
  private:
   rtc::scoped_refptr<MediaStreamInterface> last_added_stream_;
diff --git a/tools_webrtc/valgrind/gtest_exclude/peerconnection_unittests.gtest-memcheck.txt b/tools_webrtc/valgrind/gtest_exclude/peerconnection_unittests.gtest-memcheck.txt
index 8f10317..497f1f0 100644
--- a/tools_webrtc/valgrind/gtest_exclude/peerconnection_unittests.gtest-memcheck.txt
+++ b/tools_webrtc/valgrind/gtest_exclude/peerconnection_unittests.gtest-memcheck.txt
@@ -1,9 +1,8 @@
 # Tests that are failing when run under memcheck.
 # https://code.google.com/p/webrtc/issues/detail?id=4387
 DtmfSenderTest.*
-PeerConnectionEndToEndTest.*
-PeerConnectionCryptoUnitTest.*
 PeerConnectionIntegrationTest.*
+PeerConnectionEndToEndTest.*
 PeerConnectionInterfaceTest.*
-PeerConnectionRtpTest.*
+PeerConnectionCryptoUnitTest.*
 RTCStatsIntegrationTest.*