Remove handrolled search from GetCSSColorByName

BUG=pdfium:798

Change-Id: I9f0cc6fa095f111d6c43034b55f5e12e2bcab059
Reviewed-on: https://pdfium-review.googlesource.com/24716
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/core/fxcrt/css/cfx_cssdeclaration.cpp b/core/fxcrt/css/cfx_cssdeclaration.cpp
index d901a95..d5026a7 100644
--- a/core/fxcrt/css/cfx_cssdeclaration.cpp
+++ b/core/fxcrt/css/cfx_cssdeclaration.cpp
@@ -88,20 +88,18 @@
     {L"pt", CFX_CSSNumberType::Points},      {L"px", CFX_CSSNumberType::Pixels},
 };
 
-struct CFX_CSSColorTable {
-  uint32_t dwHash;
-  FX_ARGB dwValue;
+struct CFX_CSSColorEntry {
+  const wchar_t* name;
+  FX_ARGB value;
 };
-const CFX_CSSColorTable g_CFX_CSSColors[] = {
-    {0x031B47FE, 0xff000080}, {0x0BB8DF5B, 0xffff0000},
-    {0x0D82A78C, 0xff800000}, {0x2ACC82E8, 0xff00ffff},
-    {0x2D083986, 0xff008080}, {0x4A6A6195, 0xffc0c0c0},
-    {0x546A8EF3, 0xff808080}, {0x65C9169C, 0xffffa500},
-    {0x8422BB61, 0xffffffff}, {0x9271A558, 0xff800080},
-    {0xA65A3EE3, 0xffff00ff}, {0xB1345708, 0xff0000ff},
-    {0xB6D2CF1F, 0xff808000}, {0xD19B5E1C, 0xffffff00},
-    {0xDB64391D, 0xff000000}, {0xF616D507, 0xff00ff00},
-    {0xF6EFFF31, 0xff008000},
+// 16 colours from CSS 2.0 + alternate spelling of grey/gray.
+const CFX_CSSColorEntry colorTable[] = {
+    {L"aqua", 0xff00ffff},    {L"black", 0xff000000}, {L"blue", 0xff0000ff},
+    {L"fuchsia", 0xffff00ff}, {L"gray", 0xff808080},  {L"green", 0xff008000},
+    {L"grey", 0xff808080},    {L"lime", 0xff00ff00},  {L"maroon", 0xff800000},
+    {L"navy", 0xff000080},    {L"olive", 0xff808000}, {L"orange", 0xffffa500},
+    {L"purple", 0xff800080},  {L"red", 0xffff0000},   {L"silver", 0xffc0c0c0},
+    {L"teal", 0xff008080},    {L"white", 0xffffffff}, {L"yellow", 0xffffff00},
 };
 
 const CFX_CSSPropertyValueEntry* GetCSSPropertyValueByName(
@@ -135,23 +133,18 @@
   return nullptr;
 }
 
-const CFX_CSSColorTable* GetCSSColorByName(const WideStringView& wsName) {
-  ASSERT(!wsName.IsEmpty());
-  uint32_t dwHash = FX_HashCode_GetW(wsName, true);
-  int32_t iEnd = sizeof(g_CFX_CSSColors) / sizeof(CFX_CSSColorTable) - 1;
-  int32_t iMid, iStart = 0;
-  uint32_t dwMid;
-  do {
-    iMid = (iStart + iEnd) / 2;
-    dwMid = g_CFX_CSSColors[iMid].dwHash;
-    if (dwHash == dwMid) {
-      return g_CFX_CSSColors + iMid;
-    } else if (dwHash > dwMid) {
-      iStart = iMid + 1;
-    } else {
-      iEnd = iMid - 1;
-    }
-  } while (iStart <= iEnd);
+const CFX_CSSColorEntry* GetCSSColorByName(WideStringView wsName) {
+  if (wsName.IsEmpty())
+    return nullptr;
+
+  WideString lowerName = WideString(wsName);
+  lowerName.MakeLower();
+
+  for (auto* iter = std::begin(colorTable); iter != std::end(colorTable);
+       ++iter) {
+    if (lowerName.Compare(iter->name) == 0)
+      return iter;
+  }
   return nullptr;
 }
 
@@ -252,12 +245,12 @@
     return true;
   }
 
-  const CFX_CSSColorTable* pColor =
+  const CFX_CSSColorEntry* pColor =
       GetCSSColorByName(WideStringView(pszValue, iValueLen));
   if (!pColor)
     return false;
 
-  *dwColor = pColor->dwValue;
+  *dwColor = pColor->value;
   return true;
 }
 
@@ -589,7 +582,7 @@
         break;
       }
       case CFX_CSSPrimitiveType::String: {
-        const CFX_CSSColorTable* pColorItem =
+        const CFX_CSSColorEntry* pColorItem =
             GetCSSColorByName(WideStringView(pszValue, iValueLen));
         if (pColorItem)
           continue;