tabs: log version of saved tab state at deserialization

This will allow us to validate whether the old version 0 and version 1
deserialization logic is indeed dead code.

Bug: 1520963
Change-Id: I7b18de6f5f0894087299a8373d02a58136e0529b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5230738
Reviewed-by: David Trainor <dtrainor@chromium.org>
Reviewed-by: Wenyu Fu <wenyufu@chromium.org>
Commit-Queue: Elly FJ <ellyjones@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1251826}
diff --git a/chrome/browser/tab/web_contents_state.cc b/chrome/browser/tab/web_contents_state.cc
index 143a826..7f2101fa 100644
--- a/chrome/browser/tab/web_contents_state.cc
+++ b/chrome/browser/tab/web_contents_state.cc
@@ -16,6 +16,7 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
 #include "base/logging.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/pickle.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
@@ -268,6 +269,12 @@
     return false;
   }
 
+  // TODO(https://crbug.com/1520963): Remove this once we have enough data to
+  // conclude whether V0 and V1 are still used.
+  constexpr size_t kHighestVersion = 3;
+  UMA_HISTOGRAM_EXACT_LINEAR("Android.WebContentsState.SavedStateVersion",
+                             saved_state_version, kHighestVersion);
+
   if (!saved_state_version) {
     // When |saved_state_version| is 0, it predates our notion of each tab
     // having a saved version id. For that version of tab serialization, we
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 38fc274..b56ec92 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -4493,6 +4493,18 @@
   </summary>
 </histogram>
 
+<histogram name="Android.WebContentsState.SavedStateVersion" units="version"
+    expires_after="2024-06-01">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>src/chrome/browser/tab/OWNERS</owner>
+  <summary>
+    Logs which version of the WebContentsState saved state is being deserialized
+    by ExtractNavigationEntries() and related functions.
+
+    This is recorded every time a WebContentsState is deserialized.
+  </summary>
+</histogram>
+
 <histogram name="Android.WebView.AndroidX.ApiCall" enum="AndroidXWebkitApiCall"
     expires_after="2024-10-31">
   <owner>ntfschr@chromium.org</owner>