<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[195928] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/195928">195928</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-01-31 11:22:31 -0800 (Sun, 31 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Replace CaseFoldingHash with ASCIICaseInsensitiveHash
https://bugs.webkit.org/show_bug.cgi?id=153639

Reviewed by Filip Pizlo.

Source/WebCore:

* Modules/webdatabase/DatabaseAuthorizer.h: Use ASCIICaseInsensitiveHash
for whitelisted functions. Function names are all ASCII.

* accessibility/AccessibilityObject.cpp: Use ASCIICaseInsensitiveHash
for ARIA roles. ARIA roles are all ASCII.

* crypto/CryptoAlgorithmRegistry.h: Use ASCIICaseInsensitiveHash for
crypto algorithm names. Algorithm names are all ASCII.

* css/CSSFontSelector.cpp:
(WebCore::registerLocalFontFacesForFamily): Use ASCIICaseInsensitiveHash
for font faces. Face names should use ASCII case insensitive matching;
there is no need for non-ASCII case folding.
* css/CSSFontSelector.h: Ditto.

* dom/DOMImplementation.cpp: Use ASCIICaseInsensitiveHash for the
FeatureSet. The features are all ASCII.

* dom/Document.h: Use ASCIICaseInsensitiveHash for the access key
map. Access keys are all ASCII.

* dom/ScriptElement.cpp:
(WebCore::isLegacySupportedJavaScriptLanguage): Use ASCIICaseInsensitiveHash
for the language set. These strings are all ASCII.

* editing/EditorCommand.cpp: Use ASCIICaseInsensitiveHash for editor
command names. These names are all ASCII.

* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::parametersForPlugin): Use ASCIICaseInsensitiveHash
for parameter names. These names are all ASCII.

* html/InputType.cpp: Use ASCIICaseInsensitiveHash for the input types.
The input types are all ASCII.

* loader/CrossOriginAccessControl.h: Use ASCIICaseInsensitiveHash for
HTTP header field names. These names are all ASCII.
* loader/CrossOriginPreflightResultCache.h: Ditto.

* loader/archive/ArchiveFactory.cpp: Use ASCIICaseInsensitiveHash for
MIME types. MIME types are all ASCII.
* platform/MIMETypeRegistry.cpp:
(WebCore::initializeSupportedImageMIMETypes): Ditto.

* platform/SchemeRegistry.h: Use ASCIICaseInsensitiveHas for URL schemes.
URL schemes are all ASCII.
* platform/URL.cpp: Ditto.

* platform/graphics/FontCache.cpp:
(WebCore::FontPlatformDataCacheKey::operator==): Use ASCIICaseInsensitiveHash.
(WebCore::FontPlatformDataCacheKeyHash::hash): Use ASCIICaseInsensitiveHash.

* platform/graphics/FontCascade.cpp:
(WebCore::keysMatch): Rename from operator== since this operation is not
equality. Changed to equalIgnoringASCIICase and did a little streamlining.
(WebCore::makeFontCascadeCacheKey): Use reserveInitialCapacity for slightly
better memory use.
(WebCore::computeFontCascadeCacheHash): Use IntegerHasher to make computing
a hash more efficient by eliminating the overhead of building a vector and
even possible heap allocation and deallocation.
(WebCore::retrieveOrAddCachedFonts): Use keysMatch instead of ==.

* platform/graphics/cocoa/FontCacheCoreText.cpp: Use ASCIICaseInsensitiveHash
for font family names. These names should use ASCII case insensitive matching;
there is no need for non-ASCII case folding.

* platform/network/HTTPHeaderMap.h: Use ASCIICaseInsensitiveHash for
HTTP header field names. These names are all ASCII.

* rendering/style/RenderStyle.cpp:
(WebCore::computeFontHash): Use IntegerHasher to avoid allocating memory just
to compute a hash. Use ASCIICaseInsensitiveHash.

Source/WebKit/win:

* WebCoreStatistics.cpp:
(WebCoreStatistics::memoryStatistics): Use ASCIICaseInsensitiveHash for field names.
These names are all ASCII.

* WebURLResponse.cpp:
(WebURLResponse::allHeaderFields): Use ASCIICaseInsensitiveHash for HTTP header
field names. These names are all ASCII.

Source/WebKit2:

* UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Use ASCIICaseInsensitiveHash
for MIME types. MIME types are all ASCII.

* UIProcess/Plugins/PlugInAutoStartProvider.h: Use ASCIICaseInsensitiveHash for
origins. Origin strings should use ASCII case insensitive matching and should not
fold non-ASCII case.

* WebProcess/WebPage/WebPage.h: Use ASCIICaseInsensitiveHash for MIME types.
MIME types are all ASCII.

* WebProcess/WebProcess.cpp:
(WebKit::addCaseFoldedCharacters): Use ASCIICaseInsensitiveHash to hash plug-in
origin strings. (See rationale above.)
(WebKit::hashForPlugInOrigin): Updated comment.

Source/WTF:

* wtf/text/StringHash.h: Renamed CaseFoldingHash to ASCIICaseInsensitiveHash.
(WTF::ASCIICaseInsensitiveHash::foldCase): Use toASCIILower.
(WTF::ASCIICaseInsensitiveHash::equal): Use equalIgnoringASCIICase.
Also added some assertions.

* wtf/text/StringImpl.cpp: Made the latin1CaseFoldTable private to this file,
since it's no longer needed by CaseFoldingHash. Moved it up before its first use.
(WTF::equalCompatibilityCaseless): Fixed typo in the name of this function.
(WTF::equalCompatibiltyCaselessNonNull): Deleted.

* wtf/text/StringImpl.h: Removed declarations of latin1CaseFoldTable and
equalCompatibiltyCaselessNonNull

Tools:

* Scripts/do-webcore-rename: Use script to do this rename.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextStringHashh">trunk/Source/WTF/wtf/text/StringHash.h</a></li>
<li><a href="#trunkSourceWTFwtftextStringImplcpp">trunk/Source/WTF/wtf/text/StringImpl.cpp</a></li>
<li><a href="#trunkSourceWTFwtftextStringImplh">trunk/Source/WTF/wtf/text/StringImpl.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseAuthorizerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.h</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityAccessibilityObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityObject.cpp</a></li>
<li><a href="#trunkSourceWebCorecryptoCryptoAlgorithmRegistryh">trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorcpp">trunk/Source/WebCore/css/CSSFontSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSFontSelectorh">trunk/Source/WebCore/css/CSSFontSelector.h</a></li>
<li><a href="#trunkSourceWebCoredomDOMImplementationcpp">trunk/Source/WebCore/dom/DOMImplementation.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCoredomScriptElementcpp">trunk/Source/WebCore/dom/ScriptElement.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingEditorCommandcpp">trunk/Source/WebCore/editing/EditorCommand.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementcpp">trunk/Source/WebCore/html/HTMLObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlInputTypecpp">trunk/Source/WebCore/html/InputType.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderCrossOriginAccessControlh">trunk/Source/WebCore/loader/CrossOriginAccessControl.h</a></li>
<li><a href="#trunkSourceWebCoreloaderCrossOriginPreflightResultCacheh">trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h</a></li>
<li><a href="#trunkSourceWebCoreloaderarchiveArchiveFactorycpp">trunk/Source/WebCore/loader/archive/ArchiveFactory.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformMIMETypeRegistrycpp">trunk/Source/WebCore/platform/MIMETypeRegistry.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformSchemeRegistryh">trunk/Source/WebCore/platform/SchemeRegistry.h</a></li>
<li><a href="#trunkSourceWebCoreplatformURLcpp">trunk/Source/WebCore/platform/URL.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCachecpp">trunk/Source/WebCore/platform/graphics/FontCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontCascadecpp">trunk/Source/WebCore/platform/graphics/FontCascade.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp">trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkHTTPHeaderMaph">trunk/Source/WebCore/platform/network/HTTPHeaderMap.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStylecpp">trunk/Source/WebCore/rendering/style/RenderStyle.cpp</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinWebCoreStatisticscpp">trunk/Source/WebKit/win/WebCoreStatistics.cpp</a></li>
<li><a href="#trunkSourceWebKitwinWebURLResponsecpp">trunk/Source/WebKit/win/WebURLResponse.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaWKWebViewContentProviderRegistrymm">trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPluginsPlugInAutoStartProviderh">trunk/Source/WebKit2/UIProcess/Plugins/PlugInAutoStartProvider.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebProcesscpp">trunk/Source/WebKit2/WebProcess/WebProcess.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptsdowebcorerename">trunk/Tools/Scripts/do-webcore-rename</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WTF/ChangeLog        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-01-31  Darin Adler  &lt;darin@apple.com&gt;
+
+        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
+        https://bugs.webkit.org/show_bug.cgi?id=153639
+
+        Reviewed by Filip Pizlo.
+
+        * wtf/text/StringHash.h: Renamed CaseFoldingHash to ASCIICaseInsensitiveHash.
+        (WTF::ASCIICaseInsensitiveHash::foldCase): Use toASCIILower.
+        (WTF::ASCIICaseInsensitiveHash::equal): Use equalIgnoringASCIICase.
+        Also added some assertions.
+
+        * wtf/text/StringImpl.cpp: Made the latin1CaseFoldTable private to this file,
+        since it's no longer needed by CaseFoldingHash. Moved it up before its first use.
+        (WTF::equalCompatibilityCaseless): Fixed typo in the name of this function.
+        (WTF::equalCompatibiltyCaselessNonNull): Deleted.
+
+        * wtf/text/StringImpl.h: Removed declarations of latin1CaseFoldTable and
+        equalCompatibiltyCaselessNonNull
+
</ins><span class="cx"> 2016-01-30  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r195911.
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringHashh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringHash.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringHash.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WTF/wtf/text/StringHash.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2006, 2007, 2008, 2012, 2013 Apple Inc. All rights reserved
</del><ins>+ * Copyright (C) 2006-2008, 2012-2013, 2016 Apple Inc. All rights reserved
</ins><span class="cx">  * Copyright (C) Research In Motion Limited 2009. All rights reserved.
</span><span class="cx">  *
</span><span class="cx">  * This library is free software; you can redistribute it and/or
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx">         return value.isNull();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // The hash() functions on StringHash and CaseFoldingHash do not support
</del><ins>+    // The hash() functions on StringHash and ASCIICaseInsensitiveHash do not support
</ins><span class="cx">     // null strings. get(), contains(), and add() on HashMap&lt;String,..., StringHash&gt;
</span><span class="cx">     // cause a null-pointer dereference when passed null strings.
</span><span class="cx"> 
</span><span class="lines">@@ -71,14 +71,11 @@
</span><span class="cx">         static const bool safeToCompareToEmptyOrDeleted = false;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    class CaseFoldingHash {
</del><ins>+    class ASCIICaseInsensitiveHash {
</ins><span class="cx">     public:
</span><span class="cx">         template&lt;typename T&gt; static inline UChar foldCase(T character)
</span><span class="cx">         {
</span><del>-            if (std::is_same&lt;T, LChar&gt;::value)
-                return StringImpl::latin1CaseFoldTable[character];
-            
-            return u_foldCase(character, U_FOLD_CASE_DEFAULT);
</del><ins>+            return toASCIILower(character);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         static unsigned hash(const UChar* data, unsigned length)
</span><span class="lines">@@ -105,17 +102,23 @@
</span><span class="cx"> 
</span><span class="cx">         static inline unsigned hash(const char* data, unsigned length)
</span><span class="cx">         {
</span><del>-            return CaseFoldingHash::hash(reinterpret_cast&lt;const LChar*&gt;(data), length);
</del><ins>+            return hash(reinterpret_cast&lt;const LChar*&gt;(data), length);
</ins><span class="cx">         }
</span><span class="cx">         
</span><ins>+        static inline bool equal(const StringImpl&amp; a, const StringImpl&amp; b)
+        {
+            return equalIgnoringASCIICase(a, b);
+        }
</ins><span class="cx">         static inline bool equal(const StringImpl* a, const StringImpl* b)
</span><span class="cx">         {
</span><del>-            return equalCompatibiltyCaselessNonNull(a, b);
</del><ins>+            ASSERT(a);
+            ASSERT(b);
+            return equal(*a, *b);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         static unsigned hash(const RefPtr&lt;StringImpl&gt;&amp; key) 
</span><span class="cx">         {
</span><del>-            return hash(*key);
</del><ins>+            return hash(key.get());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         static bool equal(const RefPtr&lt;StringImpl&gt;&amp; a, const RefPtr&lt;StringImpl&gt;&amp; b)
</span><span class="lines">@@ -167,8 +170,8 @@
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+using WTF::ASCIICaseInsensitiveHash;
</ins><span class="cx"> using WTF::AlreadyHashed;
</span><del>-using WTF::CaseFoldingHash;
</del><span class="cx"> using WTF::StringHash;
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringImpl.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringImpl.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WTF/wtf/text/StringImpl.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -950,30 +950,50 @@
</span><span class="cx">     return charactersToFloat(characters16(), m_length, ok);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool equalCompatibiltyCaseless(const LChar* a, const LChar* b, unsigned length)
</del><ins>+// Table is based on ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt
+static const UChar latin1CaseFoldTable[256] = {
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+    0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+    0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+    0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+    0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x03bc, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df,
+    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff,
+};
+
+static inline bool equalCompatibilityCaseless(const LChar* a, const LChar* b, unsigned length)
</ins><span class="cx"> {
</span><span class="cx">     while (length--) {
</span><del>-        if (StringImpl::latin1CaseFoldTable[*a++] != StringImpl::latin1CaseFoldTable[*b++])
</del><ins>+        if (latin1CaseFoldTable[*a++] != latin1CaseFoldTable[*b++])
</ins><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool equalCompatibiltyCaseless(const UChar* a, const LChar* b, unsigned length)
</del><ins>+static inline bool equalCompatibilityCaseless(const UChar* a, const LChar* b, unsigned length)
</ins><span class="cx"> {
</span><span class="cx">     while (length--) {
</span><del>-        if (u_foldCase(*a++, U_FOLD_CASE_DEFAULT) != StringImpl::latin1CaseFoldTable[*b++])
</del><ins>+        if (u_foldCase(*a++, U_FOLD_CASE_DEFAULT) != latin1CaseFoldTable[*b++])
</ins><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool equalCompatibiltyCaseless(const LChar* a, const UChar* b, unsigned length)
</del><ins>+static inline bool equalCompatibilityCaseless(const LChar* a, const UChar* b, unsigned length)
</ins><span class="cx"> {
</span><del>-    return equalCompatibiltyCaseless(b, a, length);
</del><ins>+    return equalCompatibilityCaseless(b, a, length);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline bool equalCompatibiltyCaseless(const UChar* a, const UChar* b, unsigned length)
</del><ins>+static inline bool equalCompatibilityCaseless(const UChar* a, const UChar* b, unsigned length)
</ins><span class="cx"> {
</span><span class="cx">     return !u_memcasecmp(a, b, length, U_FOLD_CASE_DEFAULT);
</span><span class="cx"> }
</span><span class="lines">@@ -1082,7 +1102,7 @@
</span><span class="cx">         const LChar* searchCharacters = characters8() + index;
</span><span class="cx"> 
</span><span class="cx">         unsigned i = 0;
</span><del>-        while (!equalCompatibiltyCaseless(searchCharacters + i, matchString, matchLength)) {
</del><ins>+        while (!equalCompatibilityCaseless(searchCharacters + i, matchString, matchLength)) {
</ins><span class="cx">             if (i == delta)
</span><span class="cx">                 return notFound;
</span><span class="cx">             ++i;
</span><span class="lines">@@ -1093,7 +1113,7 @@
</span><span class="cx">     const UChar* searchCharacters = characters16() + index;
</span><span class="cx"> 
</span><span class="cx">     unsigned i = 0;
</span><del>-    while (!equalCompatibiltyCaseless(searchCharacters + i, matchString, matchLength)) {
</del><ins>+    while (!equalCompatibilityCaseless(searchCharacters + i, matchString, matchLength)) {
</ins><span class="cx">         if (i == delta)
</span><span class="cx">             return notFound;
</span><span class="cx">         ++i;
</span><span class="lines">@@ -1157,7 +1177,7 @@
</span><span class="cx"> 
</span><span class="cx">     unsigned i = 0;
</span><span class="cx">     // keep looping until we match
</span><del>-    while (!equalCompatibiltyCaseless(searchCharacters + i, matchCharacters, matchLength)) {
</del><ins>+    while (!equalCompatibilityCaseless(searchCharacters + i, matchCharacters, matchLength)) {
</ins><span class="cx">         if (i == delta)
</span><span class="cx">             return notFound;
</span><span class="cx">         ++i;
</span><span class="lines">@@ -1298,7 +1318,7 @@
</span><span class="cx">     unsigned delta = std::min(index, length - matchLength);
</span><span class="cx"> 
</span><span class="cx">     // keep looping until we match
</span><del>-    while (!equalCompatibiltyCaseless(searchCharacters + delta, matchCharacters, matchLength)) {
</del><ins>+    while (!equalCompatibilityCaseless(searchCharacters + delta, matchCharacters, matchLength)) {
</ins><span class="cx">         if (!delta)
</span><span class="cx">             return notFound;
</span><span class="cx">         --delta;
</span><span class="lines">@@ -1344,8 +1364,8 @@
</span><span class="cx">         return equal(stringImpl-&gt;characters16() + startOffset, reinterpret_cast&lt;const LChar*&gt;(matchString), matchLength);
</span><span class="cx">     }
</span><span class="cx">     if (stringImpl-&gt;is8Bit())
</span><del>-        return equalCompatibiltyCaseless(stringImpl-&gt;characters8() + startOffset, reinterpret_cast&lt;const LChar*&gt;(matchString), matchLength);
-    return equalCompatibiltyCaseless(stringImpl-&gt;characters16() + startOffset, reinterpret_cast&lt;const LChar*&gt;(matchString), matchLength);
</del><ins>+        return equalCompatibilityCaseless(stringImpl-&gt;characters8() + startOffset, reinterpret_cast&lt;const LChar*&gt;(matchString), matchLength);
+    return equalCompatibilityCaseless(stringImpl-&gt;characters16() + startOffset, reinterpret_cast&lt;const LChar*&gt;(matchString), matchLength);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ALWAYS_INLINE static bool equalInner(const StringImpl&amp; stringImpl, unsigned startOffset, const StringImpl&amp; matchString)
</span><span class="lines">@@ -1918,30 +1938,6 @@
</span><span class="cx">     return equalCommon(a, b);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool equalCompatibiltyCaselessNonNull(const StringImpl* a, const StringImpl* b)
-{
-    ASSERT(a);
-    ASSERT(b);
-    if (a == b)
-        return true;
-
-    unsigned length = a-&gt;length();
-    if (length != b-&gt;length())
-        return false;
-
-    if (a-&gt;is8Bit()) {
-        if (b-&gt;is8Bit())
-            return equalCompatibiltyCaseless(a-&gt;characters8(), b-&gt;characters8(), length);
-
-        return equalCompatibiltyCaseless(b-&gt;characters16(), a-&gt;characters8(), length);
-    }
-
-    if (b-&gt;is8Bit())
-        return equalCompatibiltyCaseless(a-&gt;characters16(), b-&gt;characters8(), length);
-
-    return equalCompatibiltyCaseless(a-&gt;characters16(), b-&gt;characters16(), length);
-}
-
</del><span class="cx"> bool equalIgnoringNullity(StringImpl* a, StringImpl* b)
</span><span class="cx"> {
</span><span class="cx">     if (!a &amp;&amp; b &amp;&amp; !b-&gt;length())
</span><span class="lines">@@ -2141,26 +2137,6 @@
</span><span class="cx">     return utf8ForRange(0, length(), mode);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// Table is based on ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt
-const UChar StringImpl::latin1CaseFoldTable[256] = {
-    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
-    0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 
-    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 
-    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
-    0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
-    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
-    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
-    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
-    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
-    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
-    0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-    0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x03bc, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
-    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df,
-    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, 
-};
-
</del><span class="cx"> bool equalIgnoringNullity(const UChar* a, size_t aLength, StringImpl* b)
</span><span class="cx"> {
</span><span class="cx">     if (!b)
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringImpl.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringImpl.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WTF/wtf/text/StringImpl.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -762,8 +762,6 @@
</span><span class="cx">     ALWAYS_INLINE static StringStats&amp; stringStats() { return m_stringStats; }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    WTF_EXPORT_STRING_API static const UChar latin1CaseFoldTable[256];
-
</del><span class="cx">     Ref&lt;StringImpl&gt; extractFoldedStringInSymbol()
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isSymbol());
</span><span class="lines">@@ -946,9 +944,6 @@
</span><span class="cx"> inline bool equal(const char* a, StringImpl* b) { return equal(b, reinterpret_cast&lt;const LChar*&gt;(a)); }
</span><span class="cx"> WTF_EXPORT_STRING_API bool equal(const StringImpl&amp; a, const StringImpl&amp; b);
</span><span class="cx"> 
</span><del>-// FIXME: Deprecated. Used only by CaseFoldingHash, which itself is soon to be deprecated and removed, replaced by ASCIICaseFoldingHash.
-WTF_EXPORT_STRING_API bool equalCompatibiltyCaselessNonNull(const StringImpl*, const StringImpl*);
-
</del><span class="cx"> WTF_EXPORT_STRING_API bool equalIgnoringNullity(StringImpl*, StringImpl*);
</span><span class="cx"> WTF_EXPORT_STRING_API bool equalIgnoringNullity(const UChar*, size_t length, StringImpl*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/ChangeLog        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2016-01-31  Darin Adler  &lt;darin@apple.com&gt;
+
+        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
+        https://bugs.webkit.org/show_bug.cgi?id=153639
+
+        Reviewed by Filip Pizlo.
+
+        * Modules/webdatabase/DatabaseAuthorizer.h: Use ASCIICaseInsensitiveHash
+        for whitelisted functions. Function names are all ASCII.
+
+        * accessibility/AccessibilityObject.cpp: Use ASCIICaseInsensitiveHash
+        for ARIA roles. ARIA roles are all ASCII.
+
+        * crypto/CryptoAlgorithmRegistry.h: Use ASCIICaseInsensitiveHash for
+        crypto algorithm names. Algorithm names are all ASCII.
+
+        * css/CSSFontSelector.cpp:
+        (WebCore::registerLocalFontFacesForFamily): Use ASCIICaseInsensitiveHash
+        for font faces. Face names should use ASCII case insensitive matching;
+        there is no need for non-ASCII case folding.
+        * css/CSSFontSelector.h: Ditto.
+
+        * dom/DOMImplementation.cpp: Use ASCIICaseInsensitiveHash for the
+        FeatureSet. The features are all ASCII.
+
+        * dom/Document.h: Use ASCIICaseInsensitiveHash for the access key
+        map. Access keys are all ASCII.
+
+        * dom/ScriptElement.cpp:
+        (WebCore::isLegacySupportedJavaScriptLanguage): Use ASCIICaseInsensitiveHash
+        for the language set. These strings are all ASCII.
+
+        * editing/EditorCommand.cpp: Use ASCIICaseInsensitiveHash for editor
+        command names. These names are all ASCII.
+
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::parametersForPlugin): Use ASCIICaseInsensitiveHash
+        for parameter names. These names are all ASCII.
+
+        * html/InputType.cpp: Use ASCIICaseInsensitiveHash for the input types.
+        The input types are all ASCII.
+
+        * loader/CrossOriginAccessControl.h: Use ASCIICaseInsensitiveHash for
+        HTTP header field names. These names are all ASCII.
+        * loader/CrossOriginPreflightResultCache.h: Ditto.
+
+        * loader/archive/ArchiveFactory.cpp: Use ASCIICaseInsensitiveHash for
+        MIME types. MIME types are all ASCII.
+        * platform/MIMETypeRegistry.cpp:
+        (WebCore::initializeSupportedImageMIMETypes): Ditto.
+
+        * platform/SchemeRegistry.h: Use ASCIICaseInsensitiveHas for URL schemes.
+        URL schemes are all ASCII.
+        * platform/URL.cpp: Ditto.
+
+        * platform/graphics/FontCache.cpp:
+        (WebCore::FontPlatformDataCacheKey::operator==): Use ASCIICaseInsensitiveHash.
+        (WebCore::FontPlatformDataCacheKeyHash::hash): Use ASCIICaseInsensitiveHash.
+
+        * platform/graphics/FontCascade.cpp:
+        (WebCore::keysMatch): Rename from operator== since this operation is not
+        equality. Changed to equalIgnoringASCIICase and did a little streamlining.
+        (WebCore::makeFontCascadeCacheKey): Use reserveInitialCapacity for slightly
+        better memory use.
+        (WebCore::computeFontCascadeCacheHash): Use IntegerHasher to make computing
+        a hash more efficient by eliminating the overhead of building a vector and
+        even possible heap allocation and deallocation.
+        (WebCore::retrieveOrAddCachedFonts): Use keysMatch instead of ==.
+
+        * platform/graphics/cocoa/FontCacheCoreText.cpp: Use ASCIICaseInsensitiveHash
+        for font family names. These names should use ASCII case insensitive matching;
+        there is no need for non-ASCII case folding.
+
+        * platform/network/HTTPHeaderMap.h: Use ASCIICaseInsensitiveHash for
+        HTTP header field names. These names are all ASCII.
+
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::computeFontHash): Use IntegerHasher to avoid allocating memory just
+        to compute a hash. Use ASCIICaseInsensitiveHash.
+
</ins><span class="cx"> 2016-01-31  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Reduce PassRefPtr uses in dom - 5
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseAuthorizerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseAuthorizer.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -117,7 +117,7 @@
</span><span class="cx"> 
</span><span class="cx">     const String m_databaseInfoTableName;
</span><span class="cx"> 
</span><del>-    HashSet&lt;String, CaseFoldingHash&gt; m_whitelistedFunctions;
</del><ins>+    HashSet&lt;String, ASCIICaseInsensitiveHash&gt; m_whitelistedFunctions;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1988,7 +1988,7 @@
</span><span class="cx">     return nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-typedef HashMap&lt;String, AccessibilityRole, CaseFoldingHash&gt; ARIARoleMap;
</del><ins>+typedef HashMap&lt;String, AccessibilityRole, ASCIICaseInsensitiveHash&gt; ARIARoleMap;
</ins><span class="cx"> typedef HashMap&lt;AccessibilityRole, String, DefaultHash&lt;int&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;&gt; ARIAReverseRoleMap;
</span><span class="cx"> 
</span><span class="cx"> static ARIARoleMap* gAriaRoleMap = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorecryptoCryptoAlgorithmRegistryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/crypto/CryptoAlgorithmRegistry.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> 
</span><span class="cx">     void registerAlgorithm(const String&amp; name, CryptoAlgorithmIdentifier, CryptoAlgorithmConstructor);
</span><span class="cx"> 
</span><del>-    HashMap&lt;String, CryptoAlgorithmIdentifier, CaseFoldingHash&gt; m_nameToIdentifierMap;
</del><ins>+    HashMap&lt;String, CryptoAlgorithmIdentifier, ASCIICaseInsensitiveHash&gt; m_nameToIdentifierMap;
</ins><span class="cx">     HashMap&lt;unsigned, String&gt; m_identifierToNameMap;
</span><span class="cx">     HashMap&lt;unsigned, CryptoAlgorithmConstructor&gt; m_identifierToConstructorMap;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -224,7 +224,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void registerLocalFontFacesForFamily(const String&amp; familyName, HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, CaseFoldingHash&gt;&amp; locallyInstalledFontFaces)
</del><ins>+static void registerLocalFontFacesForFamily(const String&amp; familyName, HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt;&amp; locallyInstalledFontFaces)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!locallyInstalledFontFaces.contains(familyName));
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSFontSelectorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSFontSelector.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSFontSelector.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/css/CSSFontSelector.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -86,9 +86,9 @@
</span><span class="cx">     void beginLoadTimerFired();
</span><span class="cx"> 
</span><span class="cx">     Document* m_document;
</span><del>-    HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, CaseFoldingHash&gt; m_fontFaces;
-    HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, CaseFoldingHash&gt; m_locallyInstalledFontFaces;
-    HashMap&lt;String, HashMap&lt;unsigned, RefPtr&lt;CSSSegmentedFontFace&gt;&gt;, CaseFoldingHash&gt; m_fonts;
</del><ins>+    HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_fontFaces;
+    HashMap&lt;String, Vector&lt;Ref&lt;CSSFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_locallyInstalledFontFaces;
+    HashMap&lt;String, HashMap&lt;unsigned, RefPtr&lt;CSSSegmentedFontFace&gt;&gt;, ASCIICaseInsensitiveHash&gt; m_fonts;
</ins><span class="cx">     HashSet&lt;FontSelectorClient*&gt; m_clients;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;CachedResourceHandle&lt;CachedFont&gt;&gt; m_fontsToBeginLoading;
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMImplementationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMImplementation.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span><span class="cx"> 
</span><del>-typedef HashSet&lt;String, CaseFoldingHash&gt; FeatureSet;
</del><ins>+typedef HashSet&lt;String, ASCIICaseInsensitiveHash&gt; FeatureSet;
</ins><span class="cx"> 
</span><span class="cx"> static void addString(FeatureSet&amp; set, const char* string)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/dom/Document.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1613,7 +1613,7 @@
</span><span class="cx">     HashSet&lt;HTMLMediaElement*&gt; m_allowsMediaDocumentInlinePlaybackElements;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    HashMap&lt;StringImpl*, Element*, CaseFoldingHash&gt; m_elementsByAccessKey;
</del><ins>+    HashMap&lt;StringImpl*, Element*, ASCIICaseInsensitiveHash&gt; m_elementsByAccessKey;
</ins><span class="cx">     bool m_accessKeyMapValid;
</span><span class="cx"> 
</span><span class="cx">     DocumentOrderedMap m_imagesByUsemap;
</span></span></pre></div>
<a id="trunkSourceWebCoredomScriptElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ScriptElement.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ScriptElement.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/dom/ScriptElement.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     // We want to accept all the values that either of these browsers accept, but not other values.
</span><span class="cx"> 
</span><span class="cx">     // FIXME: This function is not HTML5 compliant. These belong in the MIME registry as &quot;text/javascript&lt;version&gt;&quot; entries.
</span><del>-    typedef HashSet&lt;String, CaseFoldingHash&gt; LanguageSet;
</del><ins>+    typedef HashSet&lt;String, ASCIICaseInsensitiveHash&gt; LanguageSet;
</ins><span class="cx">     static NeverDestroyed&lt;LanguageSet&gt; languages;
</span><span class="cx">     if (languages.get().isEmpty()) {
</span><span class="cx">         languages.get().add(&quot;javascript&quot;);
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingEditorCommandcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/EditorCommand.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/EditorCommand.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/editing/EditorCommand.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     bool allowExecutionWhenDisabled;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-typedef HashMap&lt;String, const EditorInternalCommand*, CaseFoldingHash&gt; CommandMap;
</del><ins>+typedef HashMap&lt;String, const EditorInternalCommand*, ASCIICaseInsensitiveHash&gt; CommandMap;
</ins><span class="cx"> 
</span><span class="cx"> static const bool notTextInsertion = false;
</span><span class="cx"> static const bool isTextInsertion = true;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx"> // FIXME: This function should not deal with url or serviceType!
</span><span class="cx"> void HTMLObjectElement::parametersForPlugin(Vector&lt;String&gt;&amp; paramNames, Vector&lt;String&gt;&amp; paramValues, String&amp; url, String&amp; serviceType)
</span><span class="cx"> {
</span><del>-    HashSet&lt;StringImpl*, CaseFoldingHash&gt; uniqueParamNames;
</del><ins>+    HashSet&lt;StringImpl*, ASCIICaseInsensitiveHash&gt; uniqueParamNames;
</ins><span class="cx">     String urlParameter;
</span><span class="cx">     
</span><span class="cx">     // Scan the PARAM children and store their name/value pairs.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlInputTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/InputType.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/InputType.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/html/InputType.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> typedef bool (RuntimeEnabledFeatures::*InputTypeConditionalFunction)() const;
</span><span class="cx"> typedef const AtomicString&amp; (*InputTypeNameFunction)();
</span><span class="cx"> typedef std::unique_ptr&lt;InputType&gt; (*InputTypeFactoryFunction)(HTMLInputElement&amp;);
</span><del>-typedef HashMap&lt;AtomicString, InputTypeFactoryFunction, CaseFoldingHash&gt; InputTypeFactoryMap;
</del><ins>+typedef HashMap&lt;AtomicString, InputTypeFactoryFunction, ASCIICaseInsensitiveHash&gt; InputTypeFactoryMap;
</ins><span class="cx"> 
</span><span class="cx"> template&lt;class T&gt;
</span><span class="cx"> static std::unique_ptr&lt;InputType&gt; createInputType(HTMLInputElement&amp; element)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderCrossOriginAccessControlh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/CrossOriginAccessControl.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef HashSet&lt;String, CaseFoldingHash&gt; HTTPHeaderSet;
</del><ins>+typedef HashSet&lt;String, ASCIICaseInsensitiveHash&gt; HTTPHeaderSet;
</ins><span class="cx"> 
</span><span class="cx"> class HTTPHeaderMap;
</span><span class="cx"> enum class HTTPHeaderName;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderCrossOriginPreflightResultCacheh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/loader/CrossOriginPreflightResultCache.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     std::chrono::steady_clock::time_point m_absoluteExpiryTime;
</span><span class="cx">     StoredCredentials m_credentials;
</span><span class="cx">     HashSet&lt;String&gt; m_methods;
</span><del>-    HashSet&lt;String, CaseFoldingHash&gt; m_headers;
</del><ins>+    HashSet&lt;String, ASCIICaseInsensitiveHash&gt; m_headers;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class CrossOriginPreflightResultCache {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderarchiveArchiveFactorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/archive/ArchiveFactory.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/archive/ArchiveFactory.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/loader/archive/ArchiveFactory.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> typedef PassRefPtr&lt;Archive&gt; RawDataCreationFunction(const URL&amp;, SharedBuffer*);
</span><del>-typedef HashMap&lt;String, RawDataCreationFunction*, CaseFoldingHash&gt; ArchiveMIMETypesMap;
</del><ins>+typedef HashMap&lt;String, RawDataCreationFunction*, ASCIICaseInsensitiveHash&gt; ArchiveMIMETypesMap;
</ins><span class="cx"> 
</span><span class="cx"> // The create functions in the archive classes return PassRefPtr to concrete subclasses
</span><span class="cx"> // of Archive. This adaptor makes the functions have a uniform return type.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformMIMETypeRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/MIMETypeRegistry.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/MIMETypeRegistry.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/MIMETypeRegistry.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> static HashSet&lt;String&gt;* pdfAndPostScriptMIMETypes;
</span><span class="cx"> static HashSet&lt;String&gt;* unsupportedTextMIMETypes;
</span><span class="cx"> 
</span><del>-typedef HashMap&lt;String, Vector&lt;String&gt;*, CaseFoldingHash&gt; MediaMIMETypeMap;
</del><ins>+typedef HashMap&lt;String, Vector&lt;String&gt;*, ASCIICaseInsensitiveHash&gt; MediaMIMETypeMap;
</ins><span class="cx">     
</span><span class="cx"> static void initializeSupportedImageMIMETypes()
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformSchemeRegistryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/SchemeRegistry.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/SchemeRegistry.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/SchemeRegistry.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef HashSet&lt;String, CaseFoldingHash&gt; URLSchemesMap;
</del><ins>+typedef HashSet&lt;String, ASCIICaseInsensitiveHash&gt; URLSchemesMap;
</ins><span class="cx"> 
</span><span class="cx"> class SchemeRegistry {
</span><span class="cx"> public:
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformURLcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/URL.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/URL.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/URL.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1990,7 +1990,7 @@
</span><span class="cx">     return protocolIs(&quot;about&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-typedef HashMap&lt;String, unsigned short, CaseFoldingHash&gt; DefaultPortsMap;
</del><ins>+typedef HashMap&lt;String, unsigned short, ASCIICaseInsensitiveHash&gt; DefaultPortsMap;
</ins><span class="cx"> static const DefaultPortsMap&amp; defaultPortsMap()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;const DefaultPortsMap&gt; defaultPortsMap(DefaultPortsMap({
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCache.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCache.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/graphics/FontCache.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">             return true;
</span><span class="cx">         if (m_family.isNull() || other.m_family.isNull())
</span><span class="cx">             return false;
</span><del>-        return CaseFoldingHash::equal(m_family, other.m_family);
</del><ins>+        return ASCIICaseInsensitiveHash::equal(m_family, other.m_family);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     FontDescriptionKey m_fontDescriptionKey;
</span><span class="lines">@@ -129,7 +129,7 @@
</span><span class="cx"> struct FontPlatformDataCacheKeyHash {
</span><span class="cx">     static unsigned hash(const FontPlatformDataCacheKey&amp; fontKey)
</span><span class="cx">     {
</span><del>-        return pairIntHash(CaseFoldingHash::hash(fontKey.m_family), fontKey.m_fontDescriptionKey.computeHash());
</del><ins>+        return pairIntHash(ASCIICaseInsensitiveHash::hash(fontKey.m_family), fontKey.m_fontDescriptionKey.computeHash());
</ins><span class="cx">     }
</span><span class="cx">          
</span><span class="cx">     static bool equal(const FontPlatformDataCacheKey&amp; a, const FontPlatformDataCacheKey&amp; b)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontCascadecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontCascade.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -190,22 +190,20 @@
</span><span class="cx">     Ref&lt;FontCascadeFonts&gt; fonts;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+// FIXME: Should make hash traits for FontCascadeCacheKey instead of using a hash as the key (so we hash a hash).
</ins><span class="cx"> typedef HashMap&lt;unsigned, std::unique_ptr&lt;FontCascadeCacheEntry&gt;, AlreadyHashed&gt; FontCascadeCache;
</span><span class="cx"> 
</span><del>-static bool operator==(const FontCascadeCacheKey&amp; a, const FontCascadeCacheKey&amp; b)
</del><ins>+static bool keysMatch(const FontCascadeCacheKey&amp; a, const FontCascadeCacheKey&amp; b)
</ins><span class="cx"> {
</span><span class="cx">     if (a.fontDescriptionKey != b.fontDescriptionKey)
</span><span class="cx">         return false;
</span><span class="cx">     if (a.fontSelectorId != b.fontSelectorId || a.fontSelectorVersion != b.fontSelectorVersion)
</span><span class="cx">         return false;
</span><del>-    if (a.families.size() != b.families.size())
</del><ins>+    unsigned size = a.families.size();
+    if (size != b.families.size())
</ins><span class="cx">         return false;
</span><del>-    for (unsigned i = 0; i &lt; a.families.size(); ++i) {
-        auto* aImpl = a.families[i].impl();
-        auto* bImpl = b.families[i].impl();
-        if (aImpl == bImpl)
-            continue;
-        if (!aImpl || !bImpl || !CaseFoldingHash::equal(aImpl, bImpl))
</del><ins>+    for (unsigned i = 0; i &lt; size; ++i) {
+        if (!equalIgnoringASCIICase(a.families[i], b.families[i]))
</ins><span class="cx">             return false;
</span><span class="cx">     }
</span><span class="cx">     return true;
</span><span class="lines">@@ -232,26 +230,27 @@
</span><span class="cx"> {
</span><span class="cx">     FontCascadeCacheKey key;
</span><span class="cx">     key.fontDescriptionKey = FontDescriptionKey(description);
</span><del>-    for (unsigned i = 0; i &lt; description.familyCount(); ++i)
-        key.families.append(description.familyAt(i));
</del><ins>+    unsigned familyCount = description.familyCount();
+    key.families.reserveInitialCapacity(familyCount);
+    for (unsigned i = 0; i &lt; familyCount; ++i)
+        key.families.uncheckedAppend(description.familyAt(i));
</ins><span class="cx">     key.fontSelectorId = fontSelector ? fontSelector-&gt;uniqueId() : 0;
</span><span class="cx">     key.fontSelectorVersion = fontSelector ? fontSelector-&gt;version() : 0;
</span><span class="cx">     return key;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// FIXME: Why can't we just teach HashMap about FontCascadeCacheKey instead of hashing a hash?
</del><span class="cx"> static unsigned computeFontCascadeCacheHash(const FontCascadeCacheKey&amp; key)
</span><span class="cx"> {
</span><del>-    Vector&lt;unsigned, 7&gt; hashCodes;
-    hashCodes.reserveInitialCapacity(4 + key.families.size());
-
-    hashCodes.uncheckedAppend(key.fontDescriptionKey.computeHash());
-    hashCodes.uncheckedAppend(key.fontSelectorId);
-    hashCodes.uncheckedAppend(key.fontSelectorVersion);
-    for (unsigned i = 0; i &lt; key.families.size(); ++i)
-        hashCodes.uncheckedAppend(key.families[i].impl() ? CaseFoldingHash::hash(key.families[i]) : 0);
-
-    return StringHasher::hashMemory(hashCodes.data(), hashCodes.size() * sizeof(unsigned));
</del><ins>+    // FIXME: Should hash the key and the family name characters rather than making a hash out of other hashes.
+    IntegerHasher hasher;
+    hasher.add(key.fontDescriptionKey.computeHash());
+    hasher.add(key.fontSelectorId);
+    hasher.add(key.fontSelectorVersion);
+    for (unsigned i = 0; i &lt; key.families.size(); ++i) {
+        StringImpl* family = key.families[i].impl();
+        hasher.add(family ? ASCIICaseInsensitiveHash::hash(family) : 0);
+    }
+    return hasher.hash();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void pruneUnreferencedEntriesFromFontCascadeCache()
</span><span class="lines">@@ -272,8 +271,8 @@
</span><span class="cx">     auto key = makeFontCascadeCacheKey(fontDescription, fontSelector.get());
</span><span class="cx"> 
</span><span class="cx">     unsigned hash = computeFontCascadeCacheHash(key);
</span><del>-    auto addResult = fontCascadeCache().add(hash, std::unique_ptr&lt;FontCascadeCacheEntry&gt;());
-    if (!addResult.isNewEntry &amp;&amp; addResult.iterator-&gt;value-&gt;key == key)
</del><ins>+    auto addResult = fontCascadeCache().add(hash, nullptr);
+    if (!addResult.isNewEntry &amp;&amp; keysMatch(addResult.iterator-&gt;value-&gt;key, key))
</ins><span class="cx">         return addResult.iterator-&gt;value-&gt;fonts.get();
</span><span class="cx"> 
</span><span class="cx">     auto&amp; newEntry = addResult.iterator-&gt;value;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontCacheCoreTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -645,7 +645,7 @@
</span><span class="cx">     return SynthesisPair(needsSyntheticBold, needsSyntheticOblique);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-typedef HashSet&lt;String, CaseFoldingHash&gt; Whitelist;
</del><ins>+typedef HashSet&lt;String, ASCIICaseInsensitiveHash&gt; Whitelist;
</ins><span class="cx"> static Whitelist&amp; fontWhitelist()
</span><span class="cx"> {
</span><span class="cx">     static NeverDestroyed&lt;Whitelist&gt; whitelist;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkHTTPHeaderMaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/HTTPHeaderMap.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/HTTPHeaderMap.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/platform/network/HTTPHeaderMap.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> class HTTPHeaderMap {
</span><span class="cx"> public:
</span><span class="cx">     typedef HashMap&lt;HTTPHeaderName, String, WTF::IntHash&lt;HTTPHeaderName&gt;, WTF::StrongEnumHashTraits&lt;HTTPHeaderName&gt;&gt; CommonHeadersHashMap;
</span><del>-    typedef HashMap&lt;String, String, CaseFoldingHash&gt; UncommonHeadersHashMap;
</del><ins>+    typedef HashMap&lt;String, String, ASCIICaseInsensitiveHash&gt; UncommonHeadersHashMap;
</ins><span class="cx"> 
</span><span class="cx">     class HTTPHeaderMapConstIterator {
</span><span class="cx">     public:
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStylecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -366,21 +366,19 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(IOS_TEXT_AUTOSIZING)
</span><del>-inline unsigned computeFontHash(const FontCascade&amp; font)
</del><ins>+
+static inline unsigned computeFontHash(const FontCascade&amp; font)
</ins><span class="cx"> {
</span><del>-    unsigned hashCodes[2] = {
-        CaseFoldingHash::hash(font.fontDescription().firstFamily().impl()),
-        static_cast&lt;unsigned&gt;(font.fontDescription().specifiedSize())
-    };
-    return StringHasher::computeHash(reinterpret_cast&lt;UChar*&gt;(hashCodes), 2 * sizeof(unsigned) / sizeof(UChar));
</del><ins>+    IntegerHasher hasher;
+    hasher.add(ASCIICaseInsensitiveHash::hash(font.fontDescription().firstFamily()));
+    hasher.add(font.fontDescription().specifiedSize());
+    return hasher.hash();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-uint32_t RenderStyle::hashForTextAutosizing() const
</del><ins>+unsigned RenderStyle::hashForTextAutosizing() const
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Not a very smart hash. Could be improved upon. See &lt;https://bugs.webkit.org/show_bug.cgi?id=121131&gt;.
</span><del>-    uint32_t hash = 0;
-    
-    hash ^= rareNonInheritedData-&gt;m_appearance;
</del><ins>+    unsigned hash = rareNonInheritedData-&gt;m_appearance;
</ins><span class="cx">     hash ^= rareNonInheritedData-&gt;marginBeforeCollapse;
</span><span class="cx">     hash ^= rareNonInheritedData-&gt;marginAfterCollapse;
</span><span class="cx">     hash ^= rareNonInheritedData-&gt;lineClamp.value();
</span><span class="lines">@@ -421,6 +419,7 @@
</span><span class="cx">         &amp;&amp; noninherited_flags.floating() == other-&gt;noninherited_flags.floating()
</span><span class="cx">         &amp;&amp; rareNonInheritedData-&gt;textOverflow == other-&gt;rareNonInheritedData-&gt;textOverflow;
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif // ENABLE(IOS_TEXT_AUTOSIZING)
</span><span class="cx"> 
</span><span class="cx"> bool RenderStyle::inheritedDataShared(const RenderStyle* other) const
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit/win/ChangeLog        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-01-31  Darin Adler  &lt;darin@apple.com&gt;
+
+        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
+        https://bugs.webkit.org/show_bug.cgi?id=153639
+
+        Reviewed by Filip Pizlo.
+
+        * WebCoreStatistics.cpp:
+        (WebCoreStatistics::memoryStatistics): Use ASCIICaseInsensitiveHash for field names.
+        These names are all ASCII.
+
+        * WebURLResponse.cpp:
+        (WebURLResponse::allHeaderFields): Use ASCIICaseInsensitiveHash for HTTP header
+        field names. These names are all ASCII.
+
</ins><span class="cx"> 2016-01-30  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r195911.
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebCoreStatisticscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebCoreStatistics.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebCoreStatistics.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit/win/WebCoreStatistics.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -295,7 +295,7 @@
</span><span class="cx">     unsigned long long heapFree = JSDOMWindow::commonVM().heap.capacity() - heapSize;
</span><span class="cx">     GlobalMemoryStatistics globalMemoryStats = globalMemoryStatistics();
</span><span class="cx"> 
</span><del>-    HashMap&lt;String, unsigned long long, CaseFoldingHash&gt; fields;
</del><ins>+    HashMap&lt;String, unsigned long long, ASCIICaseInsensitiveHash&gt; fields;
</ins><span class="cx">     fields.add(&quot;FastMallocReservedVMBytes&quot;, static_cast&lt;unsigned long long&gt;(fastMallocStatistics.reservedVMBytes));
</span><span class="cx">     fields.add(&quot;FastMallocCommittedVMBytes&quot;, static_cast&lt;unsigned long long&gt;(fastMallocStatistics.committedVMBytes));
</span><span class="cx">     fields.add(&quot;FastMallocFreeListBytes&quot;, static_cast&lt;unsigned long long&gt;(fastMallocStatistics.freeListBytes));
</span><span class="lines">@@ -304,7 +304,7 @@
</span><span class="cx">     fields.add(&quot;JavaScriptStackSize&quot;, static_cast&lt;unsigned long long&gt;(globalMemoryStats.stackBytes));
</span><span class="cx">     fields.add(&quot;JavaScriptJITSize&quot;, static_cast&lt;unsigned long long&gt;(globalMemoryStats.JITBytes));
</span><span class="cx"> 
</span><del>-    *statistics = COMPropertyBag&lt;unsigned long long, String, CaseFoldingHash&gt;::adopt(fields);
</del><ins>+    *statistics = COMPropertyBag&lt;unsigned long long, String, ASCIICaseInsensitiveHash&gt;::adopt(fields);
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebURLResponsecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebURLResponse.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebURLResponse.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit/win/WebURLResponse.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -362,11 +362,11 @@
</span><span class="cx">     if (!headerFields)
</span><span class="cx">         return E_POINTER;
</span><span class="cx"> 
</span><del>-    HashMap&lt;String, String, CaseFoldingHash&gt; fields;
</del><ins>+    HashMap&lt;String, String, ASCIICaseInsensitiveHash&gt; fields;
</ins><span class="cx">     for (const auto&amp; keyValuePair : m_response.httpHeaderFields())
</span><span class="cx">         fields.add(keyValuePair.key, keyValuePair.value);
</span><span class="cx"> 
</span><del>-    *headerFields = COMPropertyBag&lt;String, String, CaseFoldingHash&gt;::adopt(fields);
</del><ins>+    *headerFields = COMPropertyBag&lt;String, String, ASCIICaseInsensitiveHash&gt;::adopt(fields);
</ins><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit2/ChangeLog        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-01-31  Darin Adler  &lt;darin@apple.com&gt;
+
+        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
+        https://bugs.webkit.org/show_bug.cgi?id=153639
+
+        Reviewed by Filip Pizlo.
+
+        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Use ASCIICaseInsensitiveHash
+        for MIME types. MIME types are all ASCII.
+
+        * UIProcess/Plugins/PlugInAutoStartProvider.h: Use ASCIICaseInsensitiveHash for
+        origins. Origin strings should use ASCII case insensitive matching and should not
+        fold non-ASCII case.
+
+        * WebProcess/WebPage/WebPage.h: Use ASCIICaseInsensitiveHash for MIME types.
+        MIME types are all ASCII.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::addCaseFoldedCharacters): Use ASCIICaseInsensitiveHash to hash plug-in
+        origin strings. (See rationale above.)
+        (WebKit::hashForPlugInOrigin): Updated comment.
+
</ins><span class="cx"> 2016-01-31  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Use std::make_unique&lt;&gt; when creating an unique_ptr object.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaWKWebViewContentProviderRegistrymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> using namespace WebKit;
</span><span class="cx"> 
</span><span class="cx"> @implementation WKWebViewContentProviderRegistry {
</span><del>-    HashMap&lt;String, Class &lt;WKWebViewContentProvider&gt;, CaseFoldingHash&gt; _contentProviderForMIMEType;
</del><ins>+    HashMap&lt;String, Class &lt;WKWebViewContentProvider&gt;, ASCIICaseInsensitiveHash&gt; _contentProviderForMIMEType;
</ins><span class="cx">     HashCountedSet&lt;WebPageProxy*&gt; _pages;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPluginsPlugInAutoStartProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Plugins/PlugInAutoStartProvider.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Plugins/PlugInAutoStartProvider.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PlugInAutoStartProvider.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx"> 
</span><span class="cx">     void setAutoStartOriginsTableWithItemsPassingTest(API::Dictionary&amp;, std::function&lt;bool(double expirationTimestamp)&gt;);
</span><span class="cx"> 
</span><del>-    typedef HashMap&lt;String, PlugInAutoStartOriginMap, CaseFoldingHash&gt; AutoStartTable;
</del><ins>+    typedef HashMap&lt;String, PlugInAutoStartOriginMap, ASCIICaseInsensitiveHash&gt; AutoStartTable;
</ins><span class="cx">     typedef HashMap&lt;WebCore::SessionID, AutoStartTable&gt; SessionAutoStartTable;
</span><span class="cx">     SessionAutoStartTable m_autoStartTable;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1393,7 +1393,7 @@
</span><span class="cx">     WebCore::Timer m_volatilityTimer;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    HashSet&lt;String, CaseFoldingHash&gt; m_mimeTypesWithCustomContentProviders;
</del><ins>+    HashSet&lt;String, ASCIICaseInsensitiveHash&gt; m_mimeTypesWithCustomContentProviders;
</ins><span class="cx">     WebCore::Color m_backgroundColor;
</span><span class="cx"> 
</span><span class="cx">     HashSet&lt;unsigned&gt; m_activeRenderingSuppressionTokens;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -721,16 +721,16 @@
</span><span class="cx">     if (string.isEmpty())
</span><span class="cx">         return;
</span><span class="cx">     if (string.is8Bit()) {
</span><del>-        hasher.addCharacters&lt;LChar, CaseFoldingHash::foldCase&lt;LChar&gt;&gt;(string.characters8(), string.length());
</del><ins>+        hasher.addCharacters&lt;LChar, ASCIICaseInsensitiveHash::foldCase&lt;LChar&gt;&gt;(string.characters8(), string.length());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    hasher.addCharacters&lt;UChar, CaseFoldingHash::foldCase&lt;UChar&gt;&gt;(string.characters16(), string.length());
</del><ins>+    hasher.addCharacters&lt;UChar, ASCIICaseInsensitiveHash::foldCase&lt;UChar&gt;&gt;(string.characters16(), string.length());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static unsigned hashForPlugInOrigin(const String&amp; pageOrigin, const String&amp; pluginOrigin, const String&amp; mimeType)
</span><span class="cx"> {
</span><span class="cx">     // We want to avoid concatenating the strings and then taking the hash, since that could lead to an expensive conversion.
</span><del>-    // We also want to avoid using the hash() function in StringImpl or CaseFoldingHash because that masks out bits for the use of flags.
</del><ins>+    // We also want to avoid using the hash() function in StringImpl or ASCIICaseInsensitiveHash because that masks out bits for the use of flags.
</ins><span class="cx">     StringHasher hasher;
</span><span class="cx">     addCaseFoldedCharacters(hasher, pageOrigin);
</span><span class="cx">     hasher.addCharacter(0);
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Tools/ChangeLog        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-01-31  Darin Adler  &lt;darin@apple.com&gt;
+
+        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
+        https://bugs.webkit.org/show_bug.cgi?id=153639
+
+        Reviewed by Filip Pizlo.
+
+        * Scripts/do-webcore-rename: Use script to do this rename.
+
</ins><span class="cx"> 2016-01-30  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r195911.
</span></span></pre></div>
<a id="trunkToolsScriptsdowebcorerename"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/do-webcore-rename (195927 => 195928)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/do-webcore-rename        2016-01-31 12:08:32 UTC (rev 195927)
+++ trunk/Tools/Scripts/do-webcore-rename        2016-01-31 19:22:31 UTC (rev 195928)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> my $isDOMTypeRename = 0;
</span><span class="cx"> my %renames = (
</span><span class="cx">     # Renames go here in the form of:
</span><del>-    &quot;deleteAllValues&quot; =&gt; &quot;deprecatedDeleteAllValues&quot;,
</del><ins>+    &quot;CaseFoldingHash&quot; =&gt; &quot;ASCIICaseInsensitiveHash&quot;,
</ins><span class="cx"> );
</span><span class="cx"> 
</span><span class="cx"> my %renamesContemplatedForTheFuture = (
</span></span></pre>
</div>
</div>

</body>
</html>