New method StatsObserver::OnCompleteReports, passing ownership.

The new name, OnCompleteReports rather than OnComplete, is needed
because in C++ method lookup, overriding a method hides all otherwise
inherited methods with the same name, even if they have a different
signature. And here, the intention is that each subclass should
override one or the other of the two methods, and inherit the method it
doesn't override.

This cl is a prerequisite for
https://codereview.webrtc.org/2567143003/, because the Chrome glue
code needs to retain the stats report after the OnComplete method has
returned.

Currently, Chrome makes a copy of the stats mapping (which breaks when
changing ValuePtr from an rtc::linked_ptr to an std::unique_ptr). After
this cl, Chrome can be fixed to take ownership and no longer needs to
copy anything, unblocking cl 2567143003.

BUG=webrtc:6424

Review-Url: https://codereview.webrtc.org/2584553002
Cr-Commit-Position: refs/heads/master@{#15708}
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 58174f0..b638f35 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -1445,9 +1445,9 @@
     }
     case MSG_GETSTATS: {
       GetStatsMsg* param = static_cast<GetStatsMsg*>(msg->pdata);
-      StatsReports reports;
-      stats_->GetStats(param->track, &reports);
-      param->observer->OnComplete(reports);
+      std::unique_ptr<StatsReports> reports(new StatsReports);
+      stats_->GetStats(param->track, reports.get());
+      param->observer->OnCompleteReports(std::move(reports));
       delete param;
       break;
     }
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
index d4daf24..9c2301c 100644
--- a/webrtc/api/peerconnectioninterface.h
+++ b/webrtc/api/peerconnectioninterface.h
@@ -109,7 +109,14 @@
 
 class StatsObserver : public rtc::RefCountInterface {
  public:
-  virtual void OnComplete(const StatsReports& reports) = 0;
+  // TODO(nisse, hbos): Old version, not passing ownership. Should
+  // perhaps be deprecated, but since all of this is a legacy
+  // interface anyway, probably best to leave as is until this class
+  // can be deleted.
+  virtual void OnComplete(const StatsReports& reports) {}
+  virtual void OnCompleteReports(std::unique_ptr<StatsReports> reports) {
+    OnComplete(*reports);
+  }
 
  protected:
   virtual ~StatsObserver() {}
diff --git a/webrtc/api/test/mockpeerconnectionobservers.h b/webrtc/api/test/mockpeerconnectionobservers.h
index 23647f6..2bf0a3a 100644
--- a/webrtc/api/test/mockpeerconnectionobservers.h
+++ b/webrtc/api/test/mockpeerconnectionobservers.h
@@ -108,12 +108,12 @@
   MockStatsObserver() : called_(false), stats_() {}
   virtual ~MockStatsObserver() {}
 
-  virtual void OnComplete(const StatsReports& reports) {
+  void OnCompleteReports(std::unique_ptr<StatsReports> reports) override {
     ASSERT(!called_);
     called_ = true;
     stats_.Clear();
-    stats_.number_of_reports = reports.size();
-    for (const auto* r : reports) {
+    stats_.number_of_reports = reports->size();
+    for (const auto* r : *reports) {
       if (r->type() == StatsReport::kStatsReportTypeSsrc) {
         stats_.timestamp = r->timestamp();
         GetIntValue(r, StatsReport::kStatsValueNameAudioOutputLevel,