Adds SpdyStringPieceCaseHash and SpdyStringPieceCaseEq, for future use in SpdyHeaderBlock.

SpdyStringPieceCaseHash could be implemented by incorporating Chromium's ToLowerASCII into a function object like StringPieceHashImpl:
https://cs.chromium.org/chromium/src/base/strings/string_util.h?l=87&rcl=b493570b9e803c8423c3b9de45a36b6fb82dd970
https://cs.chromium.org/chromium/src/base/strings/string_piece.h?l=532&rcl=9c7be4ec394e834bc5e687c82ccacb379ae26cd3

SpdyStringPieceCaseEq could be implemented using Chromium's EqualsCaseInsensitiveASCII:
https://cs.chromium.org/chromium/src/base/strings/string_util.h?l=139&rcl=b493570b9e803c8423c3b9de45a36b6fb82dd970

gfe-relnote: n/a (new code, not yet used in the GFE)
PiperOrigin-RevId: 287994767
Change-Id: Ie47ac5e93a7f61d12ceef28abaa1e18e9a62fb06
diff --git a/spdy/platform/api/spdy_string_utils.h b/spdy/platform/api/spdy_string_utils.h
index e2f709d..7619fb0 100644
--- a/spdy/platform/api/spdy_string_utils.h
+++ b/spdy/platform/api/spdy_string_utils.h
@@ -53,6 +53,10 @@
   return SpdyHexDumpImpl(data);
 }
 
+using SpdyStringPieceCaseHash = SpdyStringPieceCaseHashImpl;
+
+using SpdyStringPieceCaseEq = SpdyStringPieceCaseEqImpl;
+
 }  // namespace spdy
 
 #endif  // QUICHE_SPDY_PLATFORM_API_SPDY_STRING_UTILS_H_
diff --git a/spdy/platform/api/spdy_string_utils_test.cc b/spdy/platform/api/spdy_string_utils_test.cc
index f6f094f..76a2a35 100644
--- a/spdy/platform/api/spdy_string_utils_test.cc
+++ b/spdy/platform/api/spdy_string_utils_test.cc
@@ -237,6 +237,28 @@
   EXPECT_EQ("10000001", SpdyHexEncodeUInt32AndTrim(0x10000001));
 }
 
+TEST(SpdyStringUtilsTest, SpdyStringPieceCaseHash) {
+  SpdyStringPieceCaseHash hasher;
+  auto mixed = hasher("To Be Or Not To Be, That is The Question");
+  auto lower = hasher("to be or not to be, that is the question");
+  EXPECT_EQ(mixed, lower);
+  auto lower2 = hasher("to be or not to be, that is the question");
+  EXPECT_EQ(lower, lower2);
+  auto different = hasher("to see or not to see, that is the question");
+  EXPECT_NE(lower, different);
+  EXPECT_NE(lower, hasher(""));
+}
+
+TEST(SpdyStringUtilsTest, SpdyStringPieceCaseEq) {
+  SpdyStringPieceCaseEq eq;
+  EXPECT_TRUE(eq("To Be Or Not To Be, That is The Question",
+                 "to be or not to be, that is the question"));
+  EXPECT_TRUE(eq("to be or not to be, that is the question",
+                 "to be or not to be, that is the question"));
+  EXPECT_FALSE(eq("to be or not to be, that is the question",
+                  "to see or not to see, that is the question"));
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace spdy