UMA: Add Net.WebSocket.DeflateMode

Counts the number of successful handshake completion with
permessage-deflate enabled for each negotiated context_takeover
parameter value.

BUG=128156,359926

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266444 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc
index d4ed6f8..6c5e849 100644
--- a/net/websockets/websocket_basic_handshake_stream.cc
+++ b/net/websockets/websocket_basic_handshake_stream.cc
@@ -14,6 +14,7 @@
 #include "base/basictypes.h"
 #include "base/bind.h"
 #include "base/containers/hash_tables.h"
+#include "base/metrics/histogram.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
@@ -505,6 +506,11 @@
                                extensions_));
   DCHECK(extension_params_.get());
   if (extension_params_->deflate_enabled) {
+    UMA_HISTOGRAM_ENUMERATION(
+        "Net.WebSocket.DeflateMode",
+        extension_params_->deflate_mode,
+        WebSocketDeflater::NUM_CONTEXT_TAKEOVER_MODE_TYPES);
+
     return scoped_ptr<WebSocketStream>(
         new WebSocketDeflateStream(basic_stream.Pass(),
                                    extension_params_->deflate_mode,
diff --git a/net/websockets/websocket_deflater.h b/net/websockets/websocket_deflater.h
index da85bfec..1b631e26 100644
--- a/net/websockets/websocket_deflater.h
+++ b/net/websockets/websocket_deflater.h
@@ -21,9 +21,12 @@
 
 class NET_EXPORT_PRIVATE WebSocketDeflater {
  public:
+  // Do not reorder or remove entries of this enum. The values of them are used
+  // in UMA.
   enum ContextTakeOverMode {
     DO_NOT_TAKE_OVER_CONTEXT,
     TAKE_OVER_CONTEXT,
+    NUM_CONTEXT_TAKEOVER_MODE_TYPES,
   };
 
   explicit WebSocketDeflater(ContextTakeOverMode mode);
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 32f96c62..ca250c6 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -13989,6 +13989,18 @@
   <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
 </histogram>
 
+<histogram name="Net.WebSocket.DeflateMode"
+    enum="WebSocketNewPerMessageDeflateContextTakeoverMode">
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <summary>
+    Count the number of WebSockets that accepted permessage-deflate extension
+    for each context take over mode. Used by the new Chromium-based WebSocket
+    implementation.
+  </summary>
+</histogram>
+
 <histogram name="Net.WebSocket.Duration" units="milliseconds">
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
@@ -29795,10 +29807,13 @@
 
 <histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode"
     enum="WebSocketPerMessageDeflateContextTakeOverMode">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
   <summary>
     Count the number of WebSockets that accepted permessage-deflate extension
-    for each context take over mode.
+    for each context take over mode. Used by the old Blink-based WebSocket
+    implementation.
   </summary>
 </histogram>
 
@@ -42208,9 +42223,14 @@
   <int value="2" label="FAILED">Failed</int>
 </enum>
 
+<enum name="WebSocketNewPerMessageDeflateContextTakeoverMode" type="int">
+  <int value="0" label="Do not take over"/>
+  <int value="1" label="Take over"/>
+</enum>
+
 <enum name="WebSocketPerMessageDeflateContextTakeOverMode" type="int">
-  <int value="0" label="DoNotTakeOverContext"/>
-  <int value="1" label="TakeOverContext"/>
+  <int value="0" label="Do not take over"/>
+  <int value="1" label="Take over"/>
 </enum>
 
 <enum name="WebSocketSendType" type="int">