Add value_type to base::Value::List.

Using testing::Each() requires that the underlying container exposes
value_type as STL containers do. This CL adds it.

Fixed: 1342677
Change-Id: I4e11411aee7c021635d0ddb02836dd7d5cf53867
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3750979
Reviewed-by: Francois Pierre Doray <fdoray@chromium.org>
Commit-Queue: Jan Keitel <jkeitel@google.com>
Cr-Commit-Position: refs/heads/main@{#1022647}
diff --git a/base/values.h b/base/values.h
index 1ab03a8..dd2654a 100644
--- a/base/values.h
+++ b/base/values.h
@@ -570,6 +570,7 @@
    public:
     using iterator = CheckedContiguousIterator<Value>;
     using const_iterator = CheckedContiguousConstIterator<Value>;
+    using value_type = Value;
 
     List();
 
diff --git a/base/values_unittest.cc b/base/values_unittest.cc
index a1dea28..d220174 100644
--- a/base/values_unittest.cc
+++ b/base/values_unittest.cc
@@ -217,6 +217,17 @@
   EXPECT_EQ(Value::Type::LIST, value.type());
 }
 
+TEST(ValuesTest, UseTestingEachOnValueList) {
+  Value::List list;
+  list.Append(true);
+  list.Append(true);
+
+  // This will only work if `Value::List::value_type` is defined.
+  EXPECT_THAT(list, testing::Each(testing::ResultOf(
+                        [](const Value& value) { return value.GetBool(); },
+                        testing::Eq(true))));
+}
+
 TEST(ValuesTest, ConstructListFromValueList) {
   Value::List list;
   list.Append("foo");