(Auto)update libjingle 66540208-> 66541346

git-svn-id: http://webrtc.googlecode.com/svn/trunk@6085 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/peerconnection.cc b/talk/app/webrtc/peerconnection.cc
index 7e9c9fc..4376cb3 100644
--- a/talk/app/webrtc/peerconnection.cc
+++ b/talk/app/webrtc/peerconnection.cc
@@ -301,6 +301,7 @@
 PeerConnection::PeerConnection(PeerConnectionFactory* factory)
     : factory_(factory),
       observer_(NULL),
+      uma_observer_(NULL),
       signaling_state_(kStable),
       ice_state_(kIceNew),
       ice_connection_state_(kIceConnectionNew),
@@ -358,6 +359,12 @@
     portallocator_flags |= cricket::PORTALLOCATOR_ENABLE_IPV6;
   }
 
+  if (value && uma_observer_) {
+    uma_observer_->IncrementCounter(kPeerConnection_IPv6);
+  } else if (!value && uma_observer_) {
+    uma_observer_->IncrementCounter(kPeerConnection_IPv4);
+  }
+
   port_allocator_->set_flags(portallocator_flags);
   // No step delay is used while allocating ports.
   port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
@@ -619,6 +626,10 @@
   return session_->ProcessIceMessage(ice_candidate);
 }
 
+void PeerConnection::RegisterUMAObserver(UMAObserver* observer) {
+  uma_observer_ = observer;
+}
+
 const SessionDescriptionInterface* PeerConnection::local_description() const {
   return session_->local_description();
 }
diff --git a/talk/app/webrtc/peerconnection.h b/talk/app/webrtc/peerconnection.h
index 1cd2665..4a428ef 100644
--- a/talk/app/webrtc/peerconnection.h
+++ b/talk/app/webrtc/peerconnection.h
@@ -105,6 +105,8 @@
       const PeerConnectionInterface::RTCConfiguration& config);
   virtual bool AddIceCandidate(const IceCandidateInterface* candidate);
 
+  virtual void RegisterUMAObserver(UMAObserver* observer);
+
   virtual void Close();
 
  protected:
@@ -183,6 +185,7 @@
   // will refer to the same reference count.
   talk_base::scoped_refptr<PeerConnectionFactory> factory_;
   PeerConnectionObserver* observer_;
+  UMAObserver* uma_observer_;
   SignalingState signaling_state_;
   // TODO(bemasc): Remove ice_state_.
   IceState ice_state_;
diff --git a/talk/app/webrtc/peerconnectioninterface.h b/talk/app/webrtc/peerconnectioninterface.h
index a21c48d..54d3417 100644
--- a/talk/app/webrtc/peerconnectioninterface.h
+++ b/talk/app/webrtc/peerconnectioninterface.h
@@ -76,6 +76,7 @@
 #include "talk/app/webrtc/jsep.h"
 #include "talk/app/webrtc/mediastreaminterface.h"
 #include "talk/app/webrtc/statstypes.h"
+#include "talk/app/webrtc/umametrics.h"
 #include "talk/base/fileutils.h"
 #include "talk/base/socketaddress.h"
 
@@ -118,6 +119,15 @@
   virtual ~StatsObserver() {}
 };
 
+class UMAObserver : public talk_base::RefCountInterface {
+ public:
+  virtual void IncrementCounter(UMAMetricsCounter type) = 0;
+  virtual void AddHistogramSample(UMAMetricsName type, int value) = 0;
+
+ protected:
+  virtual ~UMAObserver() {}
+};
+
 class PeerConnectionInterface : public talk_base::RefCountInterface {
  public:
   // See http://dev.w3.org/2011/webrtc/editor/webrtc.html#state-definitions .
@@ -255,6 +265,8 @@
   // take the ownership of the |candidate|.
   virtual bool AddIceCandidate(const IceCandidateInterface* candidate) = 0;
 
+  virtual void RegisterUMAObserver(UMAObserver* observer) = 0;
+
   // Returns the current SignalingState.
   virtual SignalingState signaling_state() = 0;
 
diff --git a/talk/app/webrtc/peerconnectionproxy.h b/talk/app/webrtc/peerconnectionproxy.h
index a571105..74e5012 100644
--- a/talk/app/webrtc/peerconnectionproxy.h
+++ b/talk/app/webrtc/peerconnectionproxy.h
@@ -62,6 +62,7 @@
   PROXY_METHOD2(bool, UpdateIce, const IceServers&,
                 const MediaConstraintsInterface*)
   PROXY_METHOD1(bool, AddIceCandidate, const IceCandidateInterface*)
+  PROXY_METHOD1(void, RegisterUMAObserver, UMAObserver*)
   PROXY_METHOD0(SignalingState, signaling_state)
   PROXY_METHOD0(IceState, ice_state)
   PROXY_METHOD0(IceConnectionState, ice_connection_state)
diff --git a/talk/app/webrtc/umametrics.h b/talk/app/webrtc/umametrics.h
new file mode 100755
index 0000000..e6414c3
--- /dev/null
+++ b/talk/app/webrtc/umametrics.h
@@ -0,0 +1,59 @@
+/*
+ * libjingle
+ * Copyright 2014, Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright notice,
+ *     this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright notice,
+ *     this list of conditions and the following disclaimer in the documentation
+ *     and/or other materials provided with the distribution.
+ *  3. The name of the author may not be used to endorse or promote products
+ *     derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// This file contains enums related to IPv4/IPv6 metrics.
+
+#ifndef TALK_APP_WEBRTC_UMAMETRICS_H_
+#define TALK_APP_WEBRTC_UMAMETRICS_H_
+
+namespace webrtc {
+
+// Currently this contains information related to WebRTC network/transport
+// information.
+
+// This enum is backed by Chromium's histograms.xml,
+// chromium/src/tools/metrics/histograms/histograms.xml
+// Existing values cannot be re-ordered and new enums must be added
+// before kBoundary.
+enum UMAMetricsCounter {
+  kPeerConnection_IPv4,
+  kPeerConnection_IPv6,
+  kBestConnections_IPv4,
+  kBestConnections_IPv6,
+  kBoundary,
+};
+
+// This enum defines types for UMA samples, which will have a range.
+enum UMAMetricsName {
+  kNetworkInterfaces_IPv4,
+  kNetworkInterfaces_IPv6,
+  kTimeToConnect,  // In milliseconds.
+};
+
+}  // namespace webrtc
+
+#endif  // TALK_APP_WEBRTC_UMA6METRICS_H_