<!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>[196080] trunk/Source</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/196080">196080</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-02-03 14:08:57 -0800 (Wed, 03 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Convert another batch of String::lower callsites to something better, typically convertToASCIILowercase
https://bugs.webkit.org/show_bug.cgi?id=153789

Reviewed by Sam Weinig.

Source/WebCore:

* dom/DOMImplementation.cpp:
(WebCore::DOMImplementation::isXMLMIMEType): Use equalLettersIgnoringASCIICase
and the boolean argument to endsWith to ignore ASCII case.
(WebCore::DOMImplementation::isTextMIMEType): Ditto. Also simplified the logic
by removing an if statement.

* dom/Document.cpp:
(WebCore::isSeparator): Deleted. Moved to WindowFeatures.cpp.
(WebCore::processArguments): Ditto.
(WebCore::Document::processViewport): Call the processFeaturesString function
from WindowFeatures.h; the code here was originally just a pasted copy of that code!
(WebCore::Document::processFormatDetection): Ditto.

* html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::toEncodingMimeType): Remove now-unneeded
lowercasing of MIME type before calling isSupportedImageMIMETypeForEncoding,
since the MIME type registry now ignores ASCII case. Use convertToASCIILowercase
on the return value, to preserve behavior.
(WebCore::HTMLCanvasElement::toDataURL): Minor coding style tweaks.

* html/HTMLEmbedElement.cpp:
(WebCore::HTMLEmbedElement::parseAttribute): Use convertToASCIILowercase for
the service type here.

* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Remove now-unneeded
lowercasing since MIME type registry now ignores ASCII case. And use
equalLettersIgnoringASCIICase for the case here.

* html/HTMLInputElement.cpp:
(WebCore::parseAcceptAttribute): Use convertToASCIILowercase for the type here.

* html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::parseAttribute): Use convertToASCIILowercase for the
media value here.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::canPlayType): Use convertToASCIILowercase for the
content type here.
(WebCore::HTMLMediaElement::selectNextSourceChild): Ditto.

* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::parseAttribute): Use convertToASCIILowercase for
the service type here.

* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::parseAttribute): Use convertToASCIILowercase for
the kind here.
(WebCore::HTMLTrackElement::ensureTrack): Ditto. Also use fastGetAttribute
since this is neither the style attribute nor an animatable SVG attribute.

* html/parser/HTMLTreeBuilder.cpp:
(WebCore::createCaseMap): Use convertToASCIILowercase for the local names here.

* inspector/DOMPatchSupport.cpp:
(WebCore::DOMPatchSupport::patchNode): Use containsIgnoringASCIICase instead
of combining lower with find == notFound here.
(WebCore::nodeName): Use convertToASCIILowercase here.

* inspector/InspectorOverlay.cpp:
(WebCore::buildObjectForElementData): Use convertToASCIILowercase for node
name here.

* inspector/InspectorPageAgent.cpp:
(WebCore::createXHRTextDecoder): Remove a now-unneeded call to lower since
DOMImplementation::isXMLMIMEType now ignores ASCII case.

* inspector/InspectorStyleSheet.cpp:
(WebCore::lowercasePropertyName): Use convertToASCIILowercase for property
names here. Also use startsWith rather than a hand-written alternative.
(WebCore::InspectorStyle::populateAllProperties): Use the return value of
the add function to avoid doing a double hash table lookp.
(WebCore::InspectorStyle::styleWithProperties): Use convertToASCIILowercase
to lowercase the property name.

* inspector/NetworkResourcesData.cpp:
(WebCore::createOtherResourceTextDecoder): Remove unneeded call to lower since
DOMImplement::isXMLMIMEType now ignores ASCII case.

* loader/CrossOriginAccessControl.cpp:
(WebCore::createAccessControlPreflightRequest): Use convertToASCIILowercase
to lowercase the access control request header field value.

* loader/cache/CachedScript.cpp:
(WebCore::CachedScript::mimeType): Use convertToASCIILowercase on the content type.

* page/CaptionUserPreferencesMediaAF.cpp:
(WebCore::languageIdentifier): Use convertToASCIILowercase on the language code.

* page/DOMWindow.cpp:
(WebCore::DOMWindow::open): Call parseWindowFeatures instead of using the
constructor for WindowFeatures.
(WebCore::DOMWindow::showModalDialog): Call parseDialogFeatures instead of
using the constructor for WindowFeatures.

* page/EventHandler.cpp:
(WebCore::findDropZone): Remove unneeded lowercasing and empty string checking,
and use the option SpaceSplitString already has to convert to lowercase.
(WebCore::EventHandler::handleAccessKey): Remove unneeded call to lower since
getElementByAccessKey now ignores case. Also tweaked coding style a bit.

* page/OriginAccessEntry.cpp:
(WebCore::OriginAccessEntry::OriginAccessEntry): Use convertToASCIILowercase
on the protocol and host.
(WebCore::OriginAccessEntry::matchesOrigin): Ditto.

* page/SecurityOrigin.cpp:
(WebCore::shouldTreatAsUniqueOrigin): Remove unneeded call to lower since
SchemeRegistry now ignores ASCII case.
(WebCore::SecurityOrigin::SecurityOrigin): Use convertToASCIILowercase on
the protocol and host.
(WebCore::SecurityOrigin::setDomainFromDOM): Use convertToASCIILowercase on
the domain.
(WebCore::SecurityOrigin::canDisplay): Remove call to lower since SchemeRegistry
now ignores ASCII case and because this now uses equalIgnoringASCIICase in
one place that used to use exact matching.

* page/WindowFeatures.cpp: Refactored so this is now some helper functions
plus a struct rather than a class.
(WebCore::isSeparator): Renamed this and removed special handling for NUL.
(WebCore::parseWindowFeatures): Moved the code that was formerly in the
WindowFeatures constructor in here. Refactored the parsing into the
processFeaturesString function, shared with the functions in Document that
do the same kind of parsing. Removed the code that converts the entire string
to lowercase before parsing.
(WebCore::processFeaturesString): Moved the improved version of this function
here from Document.cpp; more efficient because it doesn't allocate strings.
(WebCore::setWindowFeature): Changed to be a function private to this file
with internal linkage. Use equalLettersIgnoringASCIICase so we no longer
rely on converting the string to lowercase before parsing.
(WebCore::parseDialogFeatures): Similar refactoring, but also changed all
the default handling to use Optional&lt;&gt; instead of default values.
(WebCore::boolFeature): Changed to use option and to ignore ASCII case.
(WebCore::floatFeature): Ditto.
(WebCore::parseDialogFeaturesMap): Removed the calls to lower, which are
not needed any more.

* page/WindowFeatures.h: Added default values for all the data members,
and removed all the functions from the WindowFeatures struct. Added the two
functions for parsing window and dialog features. Also added the
processFeaturesString function so we can share it with Document.cpp.

* platform/SchemeRegistry.cpp:
(WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal): Use
equalLettersIgnoringASCIICase to ignore ASCII case.

* platform/efl/MIMETypeRegistryEfl.cpp:
(WebCore::MIMETypeRegistry::getMIMETypeForExtension): Use a modern for loop,
and equalIgnoringASCIICase rather than calling lower.

* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::load): Use convertToASCIILowercase on MIME type and
key system.
(WebCore::MediaPlayer::generateKeyRequest): Ditto.
(WebCore::MediaPlayer::addKey): Ditto.
(WebCore::MediaPlayer::cancelKeyRequest): Ditto.

* platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
(WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon): Use
convertToASCIILowercase on vendor string.

* platform/gtk/MIMETypeRegistryGtk.cpp:
(WebCore::MIMETypeRegistry::getMIMETypeForExtension): Use a modern for loop,
and equalIgnoringASCIICase rather than calling lower.

* platform/mac/PasteboardMac.mm:
(WebCore::cocoaTypeFromHTMLClipboardType): Use convertToASCIILowercase
on the type. Also did a bit of renaming and tweaking the logic.

Source/WTF:

* wtf/text/StringView.h:
(WTF::StringView::toInt): Added an overload without the out parameter.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtftextStringViewh">trunk/Source/WTF/wtf/text/StringView.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomDOMImplementationcpp">trunk/Source/WebCore/dom/DOMImplementation.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLCanvasElementcpp">trunk/Source/WebCore/html/HTMLCanvasElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLEmbedElementcpp">trunk/Source/WebCore/html/HTMLEmbedElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageElementcpp">trunk/Source/WebCore/html/HTMLImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementcpp">trunk/Source/WebCore/html/HTMLInputElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLLinkElementcpp">trunk/Source/WebCore/html/HTMLLinkElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementcpp">trunk/Source/WebCore/html/HTMLObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLTrackElementcpp">trunk/Source/WebCore/html/HTMLTrackElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlparserHTMLTreeBuildercpp">trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorDOMPatchSupportcpp">trunk/Source/WebCore/inspector/DOMPatchSupport.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorOverlaycpp">trunk/Source/WebCore/inspector/InspectorOverlay.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorPageAgentcpp">trunk/Source/WebCore/inspector/InspectorPageAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorStyleSheetcpp">trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorNetworkResourcesDatacpp">trunk/Source/WebCore/inspector/NetworkResourcesData.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderCrossOriginAccessControlcpp">trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedScriptcpp">trunk/Source/WebCore/loader/cache/CachedScript.cpp</a></li>
<li><a href="#trunkSourceWebCorepageCaptionUserPreferencesMediaAFcpp">trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowcpp">trunk/Source/WebCore/page/DOMWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlercpp">trunk/Source/WebCore/page/EventHandler.cpp</a></li>
<li><a href="#trunkSourceWebCorepageOriginAccessEntrycpp">trunk/Source/WebCore/page/OriginAccessEntry.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOrigincpp">trunk/Source/WebCore/page/SecurityOrigin.cpp</a></li>
<li><a href="#trunkSourceWebCorepageWindowFeaturescpp">trunk/Source/WebCore/page/WindowFeatures.cpp</a></li>
<li><a href="#trunkSourceWebCorepageWindowFeaturesh">trunk/Source/WebCore/page/WindowFeatures.h</a></li>
<li><a href="#trunkSourceWebCoreplatformSchemeRegistrycpp">trunk/Source/WebCore/platform/SchemeRegistry.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformeflMIMETypeRegistryEflcpp">trunk/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsMediaPlayercpp">trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsopenglExtensions3DOpenGLCommoncpp">trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgtkMIMETypeRegistryGtkcpp">trunk/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmacPasteboardMacmm">trunk/Source/WebCore/platform/mac/PasteboardMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WTF/ChangeLog        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-02-03  Darin Adler  &lt;darin@apple.com&gt;
+
+        Convert another batch of String::lower callsites to something better, typically convertToASCIILowercase
+        https://bugs.webkit.org/show_bug.cgi?id=153789
+
+        Reviewed by Sam Weinig.
+
+        * wtf/text/StringView.h:
+        (WTF::StringView::toInt): Added an overload without the out parameter.
+
</ins><span class="cx"> 2016-02-03  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK][EFL] Switch FTL to B3
</span></span></pre></div>
<a id="trunkSourceWTFwtftextStringViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/text/StringView.h (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/text/StringView.h        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WTF/wtf/text/StringView.h        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -125,6 +125,7 @@
</span><span class="cx">     WTF_EXPORT_STRING_API bool endsWith(const StringView&amp;) const;
</span><span class="cx">     WTF_EXPORT_STRING_API bool endsWithIgnoringASCIICase(const StringView&amp;) const;
</span><span class="cx"> 
</span><ins>+    int toInt() const;
</ins><span class="cx">     int toInt(bool&amp; isValid) const;
</span><span class="cx">     int toIntStrict(bool&amp; isValid) const;
</span><span class="cx">     float toFloat(bool&amp; isValid) const;
</span><span class="lines">@@ -455,6 +456,12 @@
</span><span class="cx">     return charactersToFloat(characters16(), length(), &amp;isValid);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline int StringView::toInt() const
+{
+    bool isValid;
+    return toInt(isValid);
+}
+
</ins><span class="cx"> inline int StringView::toInt(bool&amp; isValid) const
</span><span class="cx"> {
</span><span class="cx">     if (is8Bit())
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/ChangeLog        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -1,3 +1,179 @@
</span><ins>+2016-02-03  Darin Adler  &lt;darin@apple.com&gt;
+
+        Convert another batch of String::lower callsites to something better, typically convertToASCIILowercase
+        https://bugs.webkit.org/show_bug.cgi?id=153789
+
+        Reviewed by Sam Weinig.
+
+        * dom/DOMImplementation.cpp:
+        (WebCore::DOMImplementation::isXMLMIMEType): Use equalLettersIgnoringASCIICase
+        and the boolean argument to endsWith to ignore ASCII case.
+        (WebCore::DOMImplementation::isTextMIMEType): Ditto. Also simplified the logic
+        by removing an if statement.
+
+        * dom/Document.cpp:
+        (WebCore::isSeparator): Deleted. Moved to WindowFeatures.cpp.
+        (WebCore::processArguments): Ditto.
+        (WebCore::Document::processViewport): Call the processFeaturesString function
+        from WindowFeatures.h; the code here was originally just a pasted copy of that code!
+        (WebCore::Document::processFormatDetection): Ditto.
+
+        * html/HTMLCanvasElement.cpp:
+        (WebCore::HTMLCanvasElement::toEncodingMimeType): Remove now-unneeded
+        lowercasing of MIME type before calling isSupportedImageMIMETypeForEncoding,
+        since the MIME type registry now ignores ASCII case. Use convertToASCIILowercase
+        on the return value, to preserve behavior.
+        (WebCore::HTMLCanvasElement::toDataURL): Minor coding style tweaks.
+
+        * html/HTMLEmbedElement.cpp:
+        (WebCore::HTMLEmbedElement::parseAttribute): Use convertToASCIILowercase for
+        the service type here.
+
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Remove now-unneeded
+        lowercasing since MIME type registry now ignores ASCII case. And use
+        equalLettersIgnoringASCIICase for the case here.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::parseAcceptAttribute): Use convertToASCIILowercase for the type here.
+
+        * html/HTMLLinkElement.cpp:
+        (WebCore::HTMLLinkElement::parseAttribute): Use convertToASCIILowercase for the
+        media value here.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::canPlayType): Use convertToASCIILowercase for the
+        content type here.
+        (WebCore::HTMLMediaElement::selectNextSourceChild): Ditto.
+
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::parseAttribute): Use convertToASCIILowercase for
+        the service type here.
+
+        * html/HTMLTrackElement.cpp:
+        (WebCore::HTMLTrackElement::parseAttribute): Use convertToASCIILowercase for
+        the kind here.
+        (WebCore::HTMLTrackElement::ensureTrack): Ditto. Also use fastGetAttribute
+        since this is neither the style attribute nor an animatable SVG attribute.
+
+        * html/parser/HTMLTreeBuilder.cpp:
+        (WebCore::createCaseMap): Use convertToASCIILowercase for the local names here.
+
+        * inspector/DOMPatchSupport.cpp:
+        (WebCore::DOMPatchSupport::patchNode): Use containsIgnoringASCIICase instead
+        of combining lower with find == notFound here.
+        (WebCore::nodeName): Use convertToASCIILowercase here.
+
+        * inspector/InspectorOverlay.cpp:
+        (WebCore::buildObjectForElementData): Use convertToASCIILowercase for node
+        name here.
+
+        * inspector/InspectorPageAgent.cpp:
+        (WebCore::createXHRTextDecoder): Remove a now-unneeded call to lower since
+        DOMImplementation::isXMLMIMEType now ignores ASCII case.
+
+        * inspector/InspectorStyleSheet.cpp:
+        (WebCore::lowercasePropertyName): Use convertToASCIILowercase for property
+        names here. Also use startsWith rather than a hand-written alternative.
+        (WebCore::InspectorStyle::populateAllProperties): Use the return value of
+        the add function to avoid doing a double hash table lookp.
+        (WebCore::InspectorStyle::styleWithProperties): Use convertToASCIILowercase
+        to lowercase the property name.
+
+        * inspector/NetworkResourcesData.cpp:
+        (WebCore::createOtherResourceTextDecoder): Remove unneeded call to lower since
+        DOMImplement::isXMLMIMEType now ignores ASCII case.
+
+        * loader/CrossOriginAccessControl.cpp:
+        (WebCore::createAccessControlPreflightRequest): Use convertToASCIILowercase
+        to lowercase the access control request header field value.
+
+        * loader/cache/CachedScript.cpp:
+        (WebCore::CachedScript::mimeType): Use convertToASCIILowercase on the content type.
+
+        * page/CaptionUserPreferencesMediaAF.cpp:
+        (WebCore::languageIdentifier): Use convertToASCIILowercase on the language code.
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::open): Call parseWindowFeatures instead of using the
+        constructor for WindowFeatures.
+        (WebCore::DOMWindow::showModalDialog): Call parseDialogFeatures instead of
+        using the constructor for WindowFeatures.
+
+        * page/EventHandler.cpp:
+        (WebCore::findDropZone): Remove unneeded lowercasing and empty string checking,
+        and use the option SpaceSplitString already has to convert to lowercase.
+        (WebCore::EventHandler::handleAccessKey): Remove unneeded call to lower since
+        getElementByAccessKey now ignores case. Also tweaked coding style a bit.
+
+        * page/OriginAccessEntry.cpp:
+        (WebCore::OriginAccessEntry::OriginAccessEntry): Use convertToASCIILowercase
+        on the protocol and host.
+        (WebCore::OriginAccessEntry::matchesOrigin): Ditto.
+
+        * page/SecurityOrigin.cpp:
+        (WebCore::shouldTreatAsUniqueOrigin): Remove unneeded call to lower since
+        SchemeRegistry now ignores ASCII case.
+        (WebCore::SecurityOrigin::SecurityOrigin): Use convertToASCIILowercase on
+        the protocol and host.
+        (WebCore::SecurityOrigin::setDomainFromDOM): Use convertToASCIILowercase on
+        the domain.
+        (WebCore::SecurityOrigin::canDisplay): Remove call to lower since SchemeRegistry
+        now ignores ASCII case and because this now uses equalIgnoringASCIICase in
+        one place that used to use exact matching.
+
+        * page/WindowFeatures.cpp: Refactored so this is now some helper functions
+        plus a struct rather than a class.
+        (WebCore::isSeparator): Renamed this and removed special handling for NUL.
+        (WebCore::parseWindowFeatures): Moved the code that was formerly in the
+        WindowFeatures constructor in here. Refactored the parsing into the
+        processFeaturesString function, shared with the functions in Document that
+        do the same kind of parsing. Removed the code that converts the entire string
+        to lowercase before parsing.
+        (WebCore::processFeaturesString): Moved the improved version of this function
+        here from Document.cpp; more efficient because it doesn't allocate strings.
+        (WebCore::setWindowFeature): Changed to be a function private to this file
+        with internal linkage. Use equalLettersIgnoringASCIICase so we no longer
+        rely on converting the string to lowercase before parsing.
+        (WebCore::parseDialogFeatures): Similar refactoring, but also changed all
+        the default handling to use Optional&lt;&gt; instead of default values.
+        (WebCore::boolFeature): Changed to use option and to ignore ASCII case.
+        (WebCore::floatFeature): Ditto.
+        (WebCore::parseDialogFeaturesMap): Removed the calls to lower, which are
+        not needed any more.
+
+        * page/WindowFeatures.h: Added default values for all the data members,
+        and removed all the functions from the WindowFeatures struct. Added the two
+        functions for parsing window and dialog features. Also added the
+        processFeaturesString function so we can share it with Document.cpp.
+
+        * platform/SchemeRegistry.cpp:
+        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal): Use
+        equalLettersIgnoringASCIICase to ignore ASCII case.
+
+        * platform/efl/MIMETypeRegistryEfl.cpp:
+        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Use a modern for loop,
+        and equalIgnoringASCIICase rather than calling lower.
+
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::MediaPlayer::load): Use convertToASCIILowercase on MIME type and
+        key system.
+        (WebCore::MediaPlayer::generateKeyRequest): Ditto.
+        (WebCore::MediaPlayer::addKey): Ditto.
+        (WebCore::MediaPlayer::cancelKeyRequest): Ditto.
+
+        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
+        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon): Use
+        convertToASCIILowercase on vendor string.
+
+        * platform/gtk/MIMETypeRegistryGtk.cpp:
+        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Use a modern for loop,
+        and equalIgnoringASCIICase rather than calling lower.
+
+        * platform/mac/PasteboardMac.mm:
+        (WebCore::cocoaTypeFromHTMLClipboardType): Use convertToASCIILowercase
+        on the type. Also did a bit of renaming and tweaking the logic.
+
</ins><span class="cx"> 2016-02-03  Dave Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement hanging-punctuation property parsing.
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMImplementationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMImplementation.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/dom/DOMImplementation.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -268,10 +268,12 @@
</span><span class="cx"> 
</span><span class="cx"> bool DOMImplementation::isXMLMIMEType(const String&amp; mimeType)
</span><span class="cx"> {
</span><del>-    if (mimeType == &quot;text/xml&quot; || mimeType == &quot;application/xml&quot; || mimeType == &quot;text/xsl&quot;)
</del><ins>+    // FIXME: Can we move this logic to MIMETypeRegistry and have this just be a single function call?
+
+    if (equalLettersIgnoringASCIICase(mimeType, &quot;text/xml&quot;) || equalLettersIgnoringASCIICase(mimeType, &quot;application/xml&quot;) || equalLettersIgnoringASCIICase(mimeType, &quot;text/xsl&quot;))
</ins><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    if (!mimeType.endsWith(&quot;+xml&quot;))
</del><ins>+    if (!mimeType.endsWith(&quot;+xml&quot;, false))
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     size_t slashPosition = mimeType.find('/');
</span><span class="lines">@@ -291,13 +293,14 @@
</span><span class="cx"> 
</span><span class="cx"> bool DOMImplementation::isTextMIMEType(const String&amp; mimeType)
</span><span class="cx"> {
</span><del>-    if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType)
-        || mimeType == &quot;application/json&quot; // Render JSON as text/plain.
-        || (mimeType.startsWith(&quot;text/&quot;) &amp;&amp; mimeType != &quot;text/html&quot;
-            &amp;&amp; mimeType != &quot;text/xml&quot; &amp;&amp; mimeType != &quot;text/xsl&quot;))
-        return true;
</del><ins>+    // FIXME: Can we move this logic to MIMETypeRegistry and have this just be a single function call?
</ins><span class="cx"> 
</span><del>-    return false;
</del><ins>+    return MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType)
+        || equalLettersIgnoringASCIICase(mimeType, &quot;application/json&quot;) // Render JSON as text/plain.
+        || (mimeType.startsWith(&quot;text/&quot;, false)
+            &amp;&amp; !equalLettersIgnoringASCIICase(mimeType, &quot;text/html&quot;)
+            &amp;&amp; !equalLettersIgnoringASCIICase(mimeType, &quot;text/xml&quot;)
+            &amp;&amp; !equalLettersIgnoringASCIICase(mimeType, &quot;text/xsl&quot;));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;HTMLDocument&gt; DOMImplementation::createHTMLDocument(const String&amp; title)
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/dom/Document.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -168,6 +168,7 @@
</span><span class="cx"> #include &quot;TreeWalker.h&quot;
</span><span class="cx"> #include &quot;VisitedLinkState.h&quot;
</span><span class="cx"> #include &quot;WheelEvent.h&quot;
</span><ins>+#include &quot;WindowFeatures.h&quot;
</ins><span class="cx"> #include &quot;XMLDocument.h&quot;
</span><span class="cx"> #include &quot;XMLDocumentParser.h&quot;
</span><span class="cx"> #include &quot;XMLNSNames.h&quot;
</span><span class="lines">@@ -3278,43 +3279,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool isSeparator(UChar character)
-{
-    return character == ' ' || character == '\t' || character == '\n' || character == '\r' || character == '=' || character == ',';
-}
-
-static void processArguments(StringView features, std::function&lt;void(StringView type, StringView value)&gt; callback)
-{
-    unsigned length = features.length();
-    for (unsigned i = 0; i &lt; length; ) {
-        // skip to first non-separator
-        while (i &lt; length &amp;&amp; isSeparator(features[i]))
-            ++i;
-        unsigned keyBegin = i;
-
-        // skip to first separator
-        while (i &lt; length &amp;&amp; !isSeparator(features[i]))
-            i++;
-        unsigned keyEnd = i;
-
-        // skip to first '=', but don't skip past a ','
-        while (i &lt; length &amp;&amp; features[i] != '=' &amp;&amp; features[i] != ',')
-            ++i;
-
-        // skip to first non-separator, but don't skip past a ','
-        while (i &lt; length &amp;&amp; isSeparator(features[i]) &amp;&amp; features[i] != ',')
-            ++i;
-        unsigned valueBegin = i;
-
-        // skip to first separator
-        while (i &lt; length &amp;&amp; !isSeparator(features[i]))
-            ++i;
-        unsigned valueEnd = i;
-
-        callback(features.substring(keyBegin, keyEnd - keyBegin), features.substring(valueBegin, valueEnd - valueBegin));
-    }
-}
-
</del><span class="cx"> void Document::processViewport(const String&amp; features, ViewportArguments::Type origin)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!features.isNull());
</span><span class="lines">@@ -3324,7 +3288,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_viewportArguments = ViewportArguments(origin);
</span><span class="cx"> 
</span><del>-    processArguments(features, [this](StringView key, StringView value) {
</del><ins>+    processFeaturesString(features, [this](StringView key, StringView value) {
</ins><span class="cx">         setViewportFeature(m_viewportArguments, *this, key, value);
</span><span class="cx">     });
</span><span class="cx"> 
</span><span class="lines">@@ -3349,7 +3313,7 @@
</span><span class="cx"> void Document::processFormatDetection(const String&amp; features)
</span><span class="cx"> {
</span><span class="cx">     // FIXME: Find a better place for this function.
</span><del>-    processArguments(features, [this](StringView key, StringView value) {
</del><ins>+    processFeaturesString(features, [this](StringView key, StringView value) {
</ins><span class="cx">         if (equalLettersIgnoringASCIICase(key, &quot;telephone&quot;) &amp;&amp; equalLettersIgnoringASCIICase(value, &quot;no&quot;))
</span><span class="cx">             setIsTelephoneNumberParsingAllowed(false);
</span><span class="cx">     });
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLCanvasElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -480,13 +480,9 @@
</span><span class="cx"> 
</span><span class="cx"> String HTMLCanvasElement::toEncodingMimeType(const String&amp; mimeType)
</span><span class="cx"> {
</span><del>-    String lowercaseMimeType = mimeType.lower();
-
-    // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread).
-    if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(lowercaseMimeType))
-        lowercaseMimeType = &quot;image/png&quot;;
-
-    return lowercaseMimeType;
</del><ins>+    if (!MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType))
+        return ASCIILiteral(&quot;image/png&quot;);
+    return mimeType.convertToASCIILowercase();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String HTMLCanvasElement::toDataURL(const String&amp; mimeType, const double* quality, ExceptionCode&amp; ec)
</span><span class="lines">@@ -499,19 +495,17 @@
</span><span class="cx">     if (m_size.isEmpty() || !buffer())
</span><span class="cx">         return ASCIILiteral(&quot;data:,&quot;);
</span><span class="cx"> 
</span><del>-    String encodingMimeType = toEncodingMimeType(mimeType);
</del><ins>+    String encodingMIMEType = toEncodingMimeType(mimeType);
</ins><span class="cx"> 
</span><span class="cx"> #if USE(CG)
</span><span class="cx">     // Try to get ImageData first, as that may avoid lossy conversions.
</span><del>-    RefPtr&lt;ImageData&gt; imageData = getImageData();
-
-    if (imageData)
-        return ImageDataToDataURL(*imageData, encodingMimeType, quality);
</del><ins>+    if (auto imageData = getImageData())
+        return ImageDataToDataURL(*imageData, encodingMIMEType, quality);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     makeRenderingResultsAvailable();
</span><span class="cx"> 
</span><del>-    return buffer()-&gt;toDataURL(encodingMimeType, quality);
</del><ins>+    return buffer()-&gt;toDataURL(encodingMIMEType, quality);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;ImageData&gt; HTMLCanvasElement::getImageData()
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLEmbedElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLEmbedElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLEmbedElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLEmbedElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx"> void HTMLEmbedElement::parseAttribute(const QualifiedName&amp; name, const AtomicString&amp; value)
</span><span class="cx"> {
</span><span class="cx">     if (name == typeAttr) {
</span><del>-        m_serviceType = value.string().left(value.find(';')).lower();
</del><ins>+        m_serviceType = value.string().left(value.find(';')).convertToASCIILowercase();
</ins><span class="cx">         // FIXME: The only difference between this and HTMLObjectElement's corresponding
</span><span class="cx">         // code is that HTMLObjectElement does setNeedsWidgetUpdate(true). Consider moving
</span><span class="cx">         // this up to the HTMLPlugInImageElement to be shared.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -162,8 +162,7 @@
</span><span class="cx">             if (indexOfSemicolon &gt;= 0)
</span><span class="cx">                 type.truncate(indexOfSemicolon);
</span><span class="cx">             type = stripLeadingAndTrailingHTMLSpaces(type);
</span><del>-            type = type.lower();
-            if (!type.isEmpty() &amp;&amp; !MIMETypeRegistry::isSupportedImageMIMEType(type) &amp;&amp; type != &quot;image/svg+xml&quot;)
</del><ins>+            if (!type.isEmpty() &amp;&amp; !MIMETypeRegistry::isSupportedImageMIMEType(type) &amp;&amp; !equalLettersIgnoringASCIICase(type, &quot;image/svg+xml&quot;))
</ins><span class="cx">                 continue;
</span><span class="cx">         }
</span><span class="cx">         MediaQueryEvaluator evaluator(document().printing() ? &quot;print&quot; : &quot;screen&quot;, document().frame(), document().documentElement() ? document().documentElement()-&gt;computedStyle() : nullptr);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -1229,7 +1229,7 @@
</span><span class="cx">             continue;
</span><span class="cx">         if (!predicate(trimmedType))
</span><span class="cx">             continue;
</span><del>-        types.append(trimmedType.lower());
</del><ins>+        types.append(trimmedType.convertToASCIILowercase());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return types;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLLinkElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLLinkElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLLinkElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLLinkElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -164,7 +164,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (name == mediaAttr) {
</span><del>-        m_media = value.string().lower();
</del><ins>+        m_media = value.string().convertToASCIILowercase();
</ins><span class="cx">         process();
</span><span class="cx">         if (m_sheet &amp;&amp; !isDisabled())
</span><span class="cx">             document().styleResolverChanged(DeferRecalcStyle);
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -920,7 +920,7 @@
</span><span class="cx"> {
</span><span class="cx">     MediaEngineSupportParameters parameters;
</span><span class="cx">     ContentType contentType(mimeType);
</span><del>-    parameters.type = contentType.type().lower();
</del><ins>+    parameters.type = contentType.type().convertToASCIILowercase();
</ins><span class="cx">     parameters.codecs = contentType.parameter(ASCIILiteral(&quot;codecs&quot;));
</span><span class="cx">     parameters.url = url;
</span><span class="cx"> #if ENABLE(ENCRYPTED_MEDIA)
</span><span class="lines">@@ -4176,7 +4176,7 @@
</span><span class="cx"> #endif
</span><span class="cx">             MediaEngineSupportParameters parameters;
</span><span class="cx">             ContentType contentType(type);
</span><del>-            parameters.type = contentType.type().lower();
</del><ins>+            parameters.type = contentType.type().convertToASCIILowercase();
</ins><span class="cx">             parameters.codecs = contentType.parameter(ASCIILiteral(&quot;codecs&quot;));
</span><span class="cx">             parameters.url = mediaURL;
</span><span class="cx"> #if ENABLE(ENCRYPTED_MEDIA)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">     if (name == formAttr)
</span><span class="cx">         formAttributeChanged();
</span><span class="cx">     else if (name == typeAttr) {
</span><del>-        m_serviceType = value.string().left(value.find(';')).lower();
</del><ins>+        m_serviceType = value.string().left(value.find(';')).convertToASCIILowercase();
</ins><span class="cx">         invalidateRenderer = !fastHasAttribute(classidAttr);
</span><span class="cx">         setNeedsWidgetUpdate(true);
</span><span class="cx">     } else if (name == dataAttr) {
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLTrackElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLTrackElement.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLTrackElement.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/HTMLTrackElement.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx">         // 4.8.10.12.3 Sourcing out-of-band text tracks
</span><span class="cx">         // As the kind, label, and srclang attributes are set, changed, or removed, the text track must update accordingly...
</span><span class="cx">         } else if (name == kindAttr)
</span><del>-            track()-&gt;setKind(value.lower());
</del><ins>+            track()-&gt;setKind(value.convertToASCIILowercase());
</ins><span class="cx">         else if (name == labelAttr)
</span><span class="cx">             track()-&gt;setLabel(value);
</span><span class="cx">         else if (name == srclangAttr)
</span><span class="lines">@@ -157,8 +157,8 @@
</span><span class="cx"> LoadableTextTrack&amp; HTMLTrackElement::ensureTrack()
</span><span class="cx"> {
</span><span class="cx">     if (!m_track) {
</span><del>-        // The kind attribute is an enumerated attribute, limited only to know values. It defaults to 'subtitles' if missing or invalid.
-        String kind = getAttribute(kindAttr).lower();
</del><ins>+        // The kind attribute is an enumerated attribute, limited only to known values. It defaults to 'subtitles' if missing or invalid.
+        String kind = fastGetAttribute(kindAttr).convertToASCIILowercase();
</ins><span class="cx">         if (!TextTrack::isValidKindKeyword(kind))
</span><span class="cx">             kind = TextTrack::subtitlesKeyword();
</span><span class="cx">         m_track = LoadableTextTrack::create(this, kind, label(), srclang());
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlparserHTMLTreeBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -511,7 +511,7 @@
</span><span class="cx">     for (unsigned i = 0; i &lt; length; ++i) {
</span><span class="cx">         const QualifiedName&amp; name = *names[i];
</span><span class="cx">         const AtomicString&amp; localName = name.localName();
</span><del>-        AtomicString loweredLocalName = localName.lower();
</del><ins>+        AtomicString loweredLocalName = localName.convertToASCIILowercase();
</ins><span class="cx">         if (loweredLocalName != localName)
</span><span class="cx">             map.add(loweredLocalName, name);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorDOMPatchSupportcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/DOMPatchSupport.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/DOMPatchSupport.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/inspector/DOMPatchSupport.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -136,14 +136,13 @@
</span><span class="cx">         oldList.append(createDigest(child, nullptr));
</span><span class="cx"> 
</span><span class="cx">     // Compose the new list.
</span><del>-    String markupCopy = markup.lower();
</del><span class="cx">     Vector&lt;std::unique_ptr&lt;Digest&gt;&gt; newList;
</span><span class="cx">     for (Node* child = parentNode-&gt;firstChild(); child != &amp;node; child = child-&gt;nextSibling())
</span><span class="cx">         newList.append(createDigest(child, nullptr));
</span><span class="cx">     for (Node* child = fragment-&gt;firstChild(); child; child = child-&gt;nextSibling()) {
</span><del>-        if (child-&gt;hasTagName(headTag) &amp;&amp; !child-&gt;firstChild() &amp;&amp; markupCopy.find(&quot;&lt;/head&gt;&quot;) == notFound)
</del><ins>+        if (child-&gt;hasTagName(headTag) &amp;&amp; !child-&gt;firstChild() &amp;&amp; !markup.containsIgnoringASCIICase(&quot;&lt;/head&gt;&quot;))
</ins><span class="cx">             continue; // HTML5 parser inserts empty &lt;head&gt; tag whenever it parses &lt;body&gt;
</span><del>-        if (child-&gt;hasTagName(bodyTag) &amp;&amp; !child-&gt;firstChild() &amp;&amp; markupCopy.find(&quot;&lt;/body&gt;&quot;) == notFound)
</del><ins>+        if (child-&gt;hasTagName(bodyTag) &amp;&amp; !child-&gt;firstChild() &amp;&amp; !markup.containsIgnoringASCIICase(&quot;&lt;/body&gt;&quot;))
</ins><span class="cx">             continue; // HTML5 parser inserts empty &lt;body&gt; tag whenever it parses &lt;/head&gt;
</span><span class="cx">         newList.append(createDigest(child, &amp;m_unusedNodesMap));
</span><span class="cx">     }
</span><span class="lines">@@ -496,11 +495,12 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #ifdef DEBUG_DOM_PATCH_SUPPORT
</span><ins>+
</ins><span class="cx"> static String nodeName(Node* node)
</span><span class="cx"> {
</span><span class="cx">     if (node-&gt;document().isXHTMLDocument())
</span><span class="cx">          return node-&gt;nodeName();
</span><del>-    return node-&gt;nodeName().lower();
</del><ins>+    return node-&gt;nodeName().convertToASCIILowercase();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DOMPatchSupport::dumpMap(const ResultMap&amp; map, const String&amp; name)
</span><span class="lines">@@ -509,6 +509,7 @@
</span><span class="cx">     for (size_t i = 0; i &lt; map.size(); ++i)
</span><span class="cx">         fprintf(stderr, &quot;%s[%lu]: %s (%p) - [%lu]\n&quot;, name.utf8().data(), i, map[i].first ? nodeName(map[i].first-&gt;m_node).utf8().data() : &quot;&quot;, map[i].first, map[i].second);
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorOverlaycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorOverlay.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorOverlay.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/inspector/InspectorOverlay.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -709,7 +709,7 @@
</span><span class="cx">     Element&amp; element = *effectiveElement;
</span><span class="cx">     bool isXHTML = element.document().isXHTMLDocument();
</span><span class="cx">     auto elementData = Inspector::Protocol::OverlayTypes::ElementData::create()
</span><del>-        .setTagName(isXHTML ? element.nodeName() : element.nodeName().lower())
</del><ins>+        .setTagName(isXHTML ? element.nodeName() : element.nodeName().convertToASCIILowercase())
</ins><span class="cx">         .setIdValue(element.getIdAttribute())
</span><span class="cx">         .release();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorPageAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorPageAgent.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorPageAgent.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/inspector/InspectorPageAgent.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx">     RefPtr&lt;TextResourceDecoder&gt; decoder;
</span><span class="cx">     if (!textEncodingName.isEmpty())
</span><span class="cx">         decoder = TextResourceDecoder::create(&quot;text/plain&quot;, textEncodingName);
</span><del>-    else if (DOMImplementation::isXMLMIMEType(mimeType.lower())) {
</del><ins>+    else if (DOMImplementation::isXMLMIMEType(mimeType)) {
</ins><span class="cx">         decoder = TextResourceDecoder::create(&quot;application/xml&quot;);
</span><span class="cx">         decoder-&gt;useLenientXMLDecoding();
</span><span class="cx">     } else if (equalLettersIgnoringASCIICase(mimeType, &quot;text/html&quot;))
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorStyleSheetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -350,9 +350,9 @@
</span><span class="cx"> static String lowercasePropertyName(const String&amp; name)
</span><span class="cx"> {
</span><span class="cx">     // Custom properties are case-sensitive.
</span><del>-    if (name.length() &gt; 2 &amp;&amp; name.characterAt(0) == '-' &amp;&amp; name.characterAt(1) == '-')
</del><ins>+    if (name.startsWith(&quot;--&quot;))
</ins><span class="cx">         return name;
</span><del>-    return name.lower();
</del><ins>+    return name.convertToASCIILowercase();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool InspectorStyle::populateAllProperties(Vector&lt;InspectorStyleProperty&gt;* result) const
</span><span class="lines">@@ -375,11 +375,8 @@
</span><span class="cx"> 
</span><span class="cx">     for (int i = 0, size = m_style-&gt;length(); i &lt; size; ++i) {
</span><span class="cx">         String name = m_style-&gt;item(i);
</span><del>-        String lowerName = lowercasePropertyName(name);
-        if (sourcePropertyNames.contains(lowerName))
-            continue;
-        sourcePropertyNames.add(lowerName);
-        result-&gt;append(InspectorStyleProperty(CSSPropertySourceData(name, m_style-&gt;getPropertyValue(name), !m_style-&gt;getPropertyPriority(name).isEmpty(), true, SourceRange()), false, false));
</del><ins>+        if (sourcePropertyNames.add(lowercasePropertyName(name)))
+            result-&gt;append(InspectorStyleProperty(CSSPropertySourceData(name, m_style-&gt;getPropertyValue(name), !m_style-&gt;getPropertyPriority(name).isEmpty(), true, SourceRange()), false, false));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return true;
</span><span class="lines">@@ -413,7 +410,7 @@
</span><span class="cx">         status = it-&gt;disabled ? Inspector::Protocol::CSS::CSSPropertyStatus::Disabled : Inspector::Protocol::CSS::CSSPropertyStatus::Active;
</span><span class="cx"> 
</span><span class="cx">         RefPtr&lt;Inspector::Protocol::CSS::CSSProperty&gt; property = Inspector::Protocol::CSS::CSSProperty::create()
</span><del>-            .setName(name.lower())
</del><ins>+            .setName(name.convertToASCIILowercase())
</ins><span class="cx">             .setValue(propertyEntry.value)
</span><span class="cx">             .release();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorNetworkResourcesDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/NetworkResourcesData.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/NetworkResourcesData.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/inspector/NetworkResourcesData.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -141,7 +141,7 @@
</span><span class="cx">     RefPtr&lt;TextResourceDecoder&gt; decoder;
</span><span class="cx">     if (!textEncodingName.isEmpty())
</span><span class="cx">         decoder = TextResourceDecoder::create(&quot;text/plain&quot;, textEncodingName);
</span><del>-    else if (DOMImplementation::isXMLMIMEType(mimeType.lower())) {
</del><ins>+    else if (DOMImplementation::isXMLMIMEType(mimeType)) {
</ins><span class="cx">         decoder = TextResourceDecoder::create(&quot;application/xml&quot;);
</span><span class="cx">         decoder-&gt;useLenientXMLDecoding();
</span><span class="cx">     } else if (equalLettersIgnoringASCIICase(mimeType, &quot;text/html&quot;))
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderCrossOriginAccessControlcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -127,7 +127,7 @@
</span><span class="cx">             headerBuffer.append(headerField.key);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        preflightRequest.setHTTPHeaderField(HTTPHeaderName::AccessControlRequestHeaders, headerBuffer.toString().lower());
</del><ins>+        preflightRequest.setHTTPHeaderField(HTTPHeaderName::AccessControlRequestHeaders, headerBuffer.toString().convertToASCIILowercase());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return preflightRequest;
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedScriptcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedScript.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedScript.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/loader/cache/CachedScript.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx"> 
</span><span class="cx"> String CachedScript::mimeType() const
</span><span class="cx"> {
</span><del>-    return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPHeaderName::ContentType)).lower();
</del><ins>+    return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPHeaderName::ContentType)).convertToASCIILowercase();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> StringView CachedScript::script()
</span></span></pre></div>
<a id="trunkSourceWebCorepageCaptionUserPreferencesMediaAFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -593,7 +593,7 @@
</span><span class="cx">     if (languageCode.isEmpty())
</span><span class="cx">         return languageCode;
</span><span class="cx"> 
</span><del>-    String lowercaseLanguageCode = languageCode.lower();
</del><ins>+    String lowercaseLanguageCode = languageCode.convertToASCIILowercase();
</ins><span class="cx"> 
</span><span class="cx">     // Need 2U here to disambiguate String::operator[] from operator(NSString*, int)[] in a production build.
</span><span class="cx">     if (lowercaseLanguageCode.length() &gt;= 3 &amp;&amp; (lowercaseLanguageCode[2U] == '_' || lowercaseLanguageCode[2U] == '-'))
</span></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/DOMWindow.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -2217,8 +2217,7 @@
</span><span class="cx">         return targetFrame-&gt;document()-&gt;domWindow();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    WindowFeatures windowFeatures(windowFeaturesString);
-    RefPtr&lt;Frame&gt; result = createWindow(urlString, frameName, windowFeatures, activeWindow, *firstFrame, *m_frame);
</del><ins>+    RefPtr&lt;Frame&gt; result = createWindow(urlString, frameName, parseWindowFeatures(windowFeaturesString), activeWindow, *firstFrame, *m_frame);
</ins><span class="cx">     return result ? result-&gt;document()-&gt;domWindow() : nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2245,8 +2244,7 @@
</span><span class="cx">     if (!canShowModalDialogNow(m_frame) || !firstWindow.allowPopUp())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    WindowFeatures windowFeatures(dialogFeaturesString, screenAvailableRect(m_frame-&gt;view()));
-    RefPtr&lt;Frame&gt; dialogFrame = createWindow(urlString, emptyAtom, windowFeatures, activeWindow, *firstFrame, *m_frame, WTFMove(prepareDialogFunction));
</del><ins>+    RefPtr&lt;Frame&gt; dialogFrame = createWindow(urlString, emptyAtom, parseDialogFeatures(dialogFeaturesString, screenAvailableRect(m_frame-&gt;view())), activeWindow, *firstFrame, *m_frame, WTFMove(prepareDialogFunction));
</ins><span class="cx">     if (!dialogFrame)
</span><span class="cx">         return;
</span><span class="cx">     dialogFrame-&gt;page()-&gt;chrome().runModal();
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/EventHandler.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -2166,27 +2166,16 @@
</span><span class="cx">     ASSERT(target);
</span><span class="cx">     Element* element = is&lt;Element&gt;(*target) ? downcast&lt;Element&gt;(target) : target-&gt;parentElement();
</span><span class="cx">     for (; element; element = element-&gt;parentElement()) {
</span><ins>+        SpaceSplitString keywords(element-&gt;fastGetAttribute(webkitdropzoneAttr), true);
</ins><span class="cx">         bool matched = false;
</span><del>-        String dropZoneStr = element-&gt;fastGetAttribute(webkitdropzoneAttr);
-
-        if (dropZoneStr.isEmpty())
-            continue;
-        
-        dropZoneStr = dropZoneStr.lower();
-        
-        SpaceSplitString keywords(dropZoneStr, false);
-        if (keywords.isEmpty())
-            continue;
-        
</del><span class="cx">         DragOperation dragOperation = DragOperationNone;
</span><del>-        for (unsigned int i = 0; i &lt; keywords.size(); i++) {
</del><ins>+        for (unsigned i = 0, size = keywords.size(); i &lt; size; ++i) {
</ins><span class="cx">             DragOperation op = convertDropZoneOperationToDragOperation(keywords[i]);
</span><span class="cx">             if (op != DragOperationNone) {
</span><span class="cx">                 if (dragOperation == DragOperationNone)
</span><span class="cx">                     dragOperation = op;
</span><span class="cx">             } else
</span><span class="cx">                 matched = matched || hasDropZoneType(*dataTransfer, keywords[i].string());
</span><del>-
</del><span class="cx">             if (matched &amp;&amp; dragOperation != DragOperationNone)
</span><span class="cx">                 break;
</span><span class="cx">         }
</span><span class="lines">@@ -2913,20 +2902,19 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool EventHandler::handleAccessKey(const PlatformKeyboardEvent&amp; evt)
</del><ins>+bool EventHandler::handleAccessKey(const PlatformKeyboardEvent&amp; event)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Ignoring the state of Shift key is what neither IE nor Firefox do.
</span><span class="cx">     // IE matches lower and upper case access keys regardless of Shift key state - but if both upper and
</span><span class="cx">     // lower case variants are present in a document, the correct element is matched based on Shift key state.
</span><span class="cx">     // Firefox only matches an access key if Shift is not pressed, and does that case-insensitively.
</span><span class="cx">     ASSERT(!(accessKeyModifiers() &amp; PlatformEvent::ShiftKey));
</span><del>-    if ((evt.modifiers() &amp; ~PlatformEvent::ShiftKey) != accessKeyModifiers())
</del><ins>+    if ((event.modifiers() &amp; ~PlatformEvent::ShiftKey) != accessKeyModifiers())
</ins><span class="cx">         return false;
</span><del>-    String key = evt.unmodifiedText();
-    Element* elem = m_frame.document()-&gt;getElementByAccessKey(key.lower());
-    if (!elem)
</del><ins>+    Element* element = m_frame.document()-&gt;getElementByAccessKey(event.unmodifiedText());
+    if (!element)
</ins><span class="cx">         return false;
</span><del>-    elem-&gt;accessKeyAction(false);
</del><ins>+    element-&gt;accessKeyAction(false);
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageOriginAccessEntrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/OriginAccessEntry.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/OriginAccessEntry.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/OriginAccessEntry.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -36,8 +36,8 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="cx"> OriginAccessEntry::OriginAccessEntry(const String&amp; protocol, const String&amp; host, SubdomainSetting subdomainSetting)
</span><del>-    : m_protocol(protocol.lower())
-    , m_host(host.lower())
</del><ins>+    : m_protocol(protocol.convertToASCIILowercase())
+    , m_host(host.convertToASCIILowercase())
</ins><span class="cx">     , m_subdomainSettings(subdomainSetting)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(subdomainSetting == AllowSubdomains || subdomainSetting == DisallowSubdomains);
</span><span class="lines">@@ -48,8 +48,8 @@
</span><span class="cx"> 
</span><span class="cx"> bool OriginAccessEntry::matchesOrigin(const SecurityOrigin&amp; origin) const
</span><span class="cx"> {
</span><del>-    ASSERT(origin.host() == origin.host().lower());
-    ASSERT(origin.protocol() == origin.protocol().lower());
</del><ins>+    ASSERT(origin.host() == origin.host().convertToASCIILowercase());
+    ASSERT(origin.protocol() == origin.protocol().convertToASCIILowercase());
</ins><span class="cx"> 
</span><span class="cx">     if (m_protocol != origin.protocol())
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOrigincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOrigin.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOrigin.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/SecurityOrigin.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -97,11 +97,7 @@
</span><span class="cx">     if (schemeRequiresHost(innerURL) &amp;&amp; innerURL.host().isEmpty())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    // SchemeRegistry needs a lower case protocol because it uses HashMaps
-    // that assume the scheme has already been canonicalized.
-    String protocol = innerURL.protocol().lower();
-
-    if (SchemeRegistry::shouldTreatURLSchemeAsNoAccess(protocol))
</del><ins>+    if (SchemeRegistry::shouldTreatURLSchemeAsNoAccess(innerURL.protocol()))
</ins><span class="cx">         return true;
</span><span class="cx"> 
</span><span class="cx">     // This is the common case.
</span><span class="lines">@@ -109,8 +105,8 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SecurityOrigin::SecurityOrigin(const URL&amp; url)
</span><del>-    : m_protocol(url.protocol().isNull() ? emptyString() : url.protocol().lower())
-    , m_host(url.host().isNull() ? emptyString() : url.host().lower())
</del><ins>+    : m_protocol(url.protocol().isNull() ? emptyString() : url.protocol().convertToASCIILowercase())
+    , m_host(url.host().isNull() ? emptyString() : url.host().convertToASCIILowercase())
</ins><span class="cx">     , m_port(url.port())
</span><span class="cx">     , m_isUnique(false)
</span><span class="cx">     , m_universalAccess(false)
</span><span class="lines">@@ -203,7 +199,7 @@
</span><span class="cx"> void SecurityOrigin::setDomainFromDOM(const String&amp; newDomain)
</span><span class="cx"> {
</span><span class="cx">     m_domainWasSetInDOM = true;
</span><del>-    m_domain = newDomain.lower();
</del><ins>+    m_domain = newDomain.convertToASCIILowercase();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SecurityOrigin::isSecure(const URL&amp; url)
</span><span class="lines">@@ -354,16 +350,16 @@
</span><span class="cx">     if (m_universalAccess)
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    String protocol = url.protocol().lower();
-
</del><span class="cx">     if (isFeedWithNestedProtocolInHTTPFamily(url))
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><ins>+    String protocol = url.protocol();
+
</ins><span class="cx">     if (SchemeRegistry::canDisplayOnlyIfCanRequest(protocol))
</span><span class="cx">         return canRequest(url);
</span><span class="cx"> 
</span><span class="cx">     if (SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(protocol))
</span><del>-        return m_protocol == protocol || SecurityPolicy::isAccessToURLWhiteListed(this, url);
</del><ins>+        return equalIgnoringASCIICase(m_protocol, protocol) || SecurityPolicy::isAccessToURLWhiteListed(this, url);
</ins><span class="cx"> 
</span><span class="cx">     if (SecurityPolicy::restrictAccessToLocal() &amp;&amp; SchemeRegistry::shouldTreatURLSchemeAsLocal(protocol))
</span><span class="cx">         return canLoadLocalResources() || SecurityPolicy::isAccessToURLWhiteListed(this, url);
</span></span></pre></div>
<a id="trunkSourceWebCorepageWindowFeaturescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WindowFeatures.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WindowFeatures.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/WindowFeatures.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -25,142 +25,124 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><ins>+#include &lt;wtf/HashMap.h&gt;
</ins><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringHash.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-// Though isspace() considers \t and \v to be whitespace, Win IE doesn't when parsing window features.
-static bool isWindowFeaturesSeparator(UChar c)
</del><ins>+typedef HashMap&lt;String, String, ASCIICaseInsensitiveHash&gt; DialogFeaturesMap;
+
+static void setWindowFeature(WindowFeatures&amp;, StringView key, StringView value);
+
+static DialogFeaturesMap parseDialogFeaturesMap(const String&amp;);
+static Optional&lt;bool&gt; boolFeature(const DialogFeaturesMap&amp;, const char* key);
+static Optional&lt;float&gt; floatFeature(const DialogFeaturesMap&amp;, const char* key, float min, float max);
+
+static bool isSeparator(UChar character)
</ins><span class="cx"> {
</span><del>-    return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ',' || c == '\0';
</del><ins>+    return character == ' ' || character == '\t' || character == '\n' || character == '\r' || character == '=' || character == ',';
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-WindowFeatures::WindowFeatures(const String&amp; features)
-    : resizable(true)
-    , fullscreen(false)
-    , dialog(false)
</del><ins>+WindowFeatures parseWindowFeatures(StringView featuresString)
</ins><span class="cx"> {
</span><del>-    /*
-     The IE rule is: all features except for channelmode and fullscreen default to YES, but
-     if the user specifies a feature string, all features default to NO. (There is no public
-     standard that applies to this method.)
</del><ins>+    // The IE rule is: all features except for channelmode and fullscreen default to YES, but
+    // if the user specifies a feature string, all features default to NO. (There is no public
+    // standard that applies to this method.)
+    //
+    // &lt;http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp&gt;
+    // We always allow a window to be resized, which is consistent with Firefox.
</ins><span class="cx"> 
</span><del>-     &lt;http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/open_0.asp&gt;
-     We always allow a window to be resized, which is consistent with Firefox.
-     */
</del><ins>+    WindowFeatures features;
</ins><span class="cx"> 
</span><del>-    if (features.isEmpty()) {
-        menuBarVisible = true;
-        statusBarVisible = true;
-        toolBarVisible = true;
-        locationBarVisible = true;
-        scrollbarsVisible = true;
-        return;
-    }
</del><ins>+    if (featuresString.isEmpty())
+        return features;
</ins><span class="cx"> 
</span><del>-    menuBarVisible = false;
-    statusBarVisible = false;
-    toolBarVisible = false;
-    locationBarVisible = false;
-    scrollbarsVisible = false;
</del><ins>+    features.menuBarVisible = false;
+    features.statusBarVisible = false;
+    features.toolBarVisible = false;
+    features.locationBarVisible = false;
+    features.scrollbarsVisible = false;
</ins><span class="cx"> 
</span><del>-    // Tread lightly in this code -- it was specifically designed to mimic Win IE's parsing behavior.
-    unsigned keyBegin, keyEnd;
-    unsigned valueBegin, valueEnd;
</del><ins>+    processFeaturesString(featuresString, [&amp;features](StringView key, StringView value) {
+        setWindowFeature(features, key, value);
+    });
</ins><span class="cx"> 
</span><del>-    String buffer = features.lower();
-    unsigned length = buffer.length();
</del><ins>+    return features;
+}
+
+void processFeaturesString(StringView features, std::function&lt;void(StringView type, StringView value)&gt; callback)
+{
+    unsigned length = features.length();
</ins><span class="cx">     for (unsigned i = 0; i &lt; length; ) {
</span><del>-        // skip to first non-separator, but don't skip past the end of the string
-        while (isWindowFeaturesSeparator(buffer[i])) {
-            if (i &gt;= length)
-                break;
-            i++;
-        }
-        keyBegin = i;
</del><ins>+        // skip to first non-separator
+        while (i &lt; length &amp;&amp; isSeparator(features[i]))
+            ++i;
+        unsigned keyBegin = i;
</ins><span class="cx"> 
</span><span class="cx">         // skip to first separator
</span><del>-        while (!isWindowFeaturesSeparator(buffer[i]))
</del><ins>+        while (i &lt; length &amp;&amp; !isSeparator(features[i]))
</ins><span class="cx">             i++;
</span><del>-        keyEnd = i;
</del><ins>+        unsigned keyEnd = i;
</ins><span class="cx"> 
</span><del>-        // skip to first '=', but don't skip past a ',' or the end of the string
-        while (buffer[i] != '=') {
-            if (buffer[i] == ',' || i &gt;= length)
-                break;
-            i++;
-        }
</del><ins>+        // skip to first '=', but don't skip past a ','
+        while (i &lt; length &amp;&amp; features[i] != '=' &amp;&amp; features[i] != ',')
+            ++i;
</ins><span class="cx"> 
</span><del>-        // skip to first non-separator, but don't skip past a ',' or the end of the string
-        while (isWindowFeaturesSeparator(buffer[i])) {
-            if (buffer[i] == ',' || i &gt;= length)
-                break;
-            i++;
-        }
-        valueBegin = i;
</del><ins>+        // skip to first non-separator, but don't skip past a ','
+        while (i &lt; length &amp;&amp; isSeparator(features[i]) &amp;&amp; features[i] != ',')
+            ++i;
+        unsigned valueBegin = i;
</ins><span class="cx"> 
</span><span class="cx">         // skip to first separator
</span><del>-        while (!isWindowFeaturesSeparator(buffer[i]))
-            i++;
-        valueEnd = i;
</del><ins>+        while (i &lt; length &amp;&amp; !isSeparator(features[i]))
+            ++i;
+        unsigned valueEnd = i;
</ins><span class="cx"> 
</span><del>-        ASSERT_WITH_SECURITY_IMPLICATION(i &lt;= length);
-
-        String keyString(buffer.substring(keyBegin, keyEnd - keyBegin));
-        String valueString(buffer.substring(valueBegin, valueEnd - valueBegin));
-        setWindowFeature(keyString, valueString);
</del><ins>+        callback(features.substring(keyBegin, keyEnd - keyBegin), features.substring(valueBegin, valueEnd - valueBegin));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WindowFeatures::setWindowFeature(const String&amp; keyString, const String&amp; valueString)
</del><ins>+static void setWindowFeature(WindowFeatures&amp; features, StringView key, StringView value)
</ins><span class="cx"> {
</span><del>-    int value;
-
</del><span class="cx">     // Listing a key with no value is shorthand for key=yes
</span><del>-    if (valueString.isEmpty() || valueString == &quot;yes&quot;)
-        value = 1;
</del><ins>+    int numericValue;
+    if (value.isEmpty() || equalLettersIgnoringASCIICase(value, &quot;yes&quot;))
+        numericValue = 1;
</ins><span class="cx">     else
</span><del>-        value = valueString.toInt();
</del><ins>+        numericValue = value.toInt();
</ins><span class="cx"> 
</span><del>-    // We treat keyString of &quot;resizable&quot; here as an additional feature rather than setting resizeable to true.
</del><ins>+    // We treat key of &quot;resizable&quot; here as an additional feature rather than setting resizeable to true.
</ins><span class="cx">     // This is consistent with Firefox, but could also be handled at another level.
</span><span class="cx"> 
</span><del>-    if (keyString == &quot;left&quot; || keyString == &quot;screenx&quot;)
-        x = value;
-    else if (keyString == &quot;top&quot; || keyString == &quot;screeny&quot;)
-        y = value;
-    else if (keyString == &quot;width&quot; || keyString == &quot;innerwidth&quot;)
-        width = value;
-    else if (keyString == &quot;height&quot; || keyString == &quot;innerheight&quot;)
-        height = value;
-    else if (keyString == &quot;menubar&quot;)
-        menuBarVisible = value;
-    else if (keyString == &quot;toolbar&quot;)
-        toolBarVisible = value;
-    else if (keyString == &quot;location&quot;)
-        locationBarVisible = value;
-    else if (keyString == &quot;status&quot;)
-        statusBarVisible = value;
-    else if (keyString == &quot;fullscreen&quot;)
-        fullscreen = value;
-    else if (keyString == &quot;scrollbars&quot;)
-        scrollbarsVisible = value;
-    else if (value == 1)
-        additionalFeatures.append(keyString);
</del><ins>+    if (equalLettersIgnoringASCIICase(key, &quot;left&quot;) || equalLettersIgnoringASCIICase(key, &quot;screenx&quot;))
+        features.x = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;top&quot;) || equalLettersIgnoringASCIICase(key, &quot;screeny&quot;))
+        features.y = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;width&quot;) || equalLettersIgnoringASCIICase(key, &quot;innerwidth&quot;))
+        features.width = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;height&quot;) || equalLettersIgnoringASCIICase(key, &quot;innerheight&quot;))
+        features.height = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;menubar&quot;))
+        features.menuBarVisible = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;toolbar&quot;))
+        features.toolBarVisible = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;location&quot;))
+        features.locationBarVisible = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;status&quot;))
+        features.statusBarVisible = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;fullscreen&quot;))
+        features.fullscreen = numericValue;
+    else if (equalLettersIgnoringASCIICase(key, &quot;scrollbars&quot;))
+        features.scrollbarsVisible = numericValue;
+    else if (numericValue == 1)
+        features.additionalFeatures.append(key.toString());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-WindowFeatures::WindowFeatures(const String&amp; dialogFeaturesString, const FloatRect&amp; screenAvailableRect)
-    : menuBarVisible(false)
-    , toolBarVisible(false)
-    , locationBarVisible(false)
-    , fullscreen(false)
-    , dialog(true)
</del><ins>+WindowFeatures parseDialogFeatures(const String&amp; dialogFeaturesString, const FloatRect&amp; screenAvailableRect)
</ins><span class="cx"> {
</span><del>-    auto features = parseDialogFeatures(dialogFeaturesString);
</del><ins>+    auto featuresMap = parseDialogFeaturesMap(dialogFeaturesString);
</ins><span class="cx"> 
</span><del>-    const bool trusted = false;
-
</del><span class="cx">     // The following features from Microsoft's documentation are not implemented:
</span><span class="cx">     // - default font settings
</span><span class="cx">     // - width, height, left, and top specified in units other than &quot;px&quot;
</span><span class="lines">@@ -169,52 +151,61 @@
</span><span class="cx">     // - help: boolFeature(features, &quot;help&quot;, true), makes help icon appear in dialog (what does it do on Windows?)
</span><span class="cx">     // - unadorned: trusted &amp;&amp; boolFeature(features, &quot;unadorned&quot;);
</span><span class="cx"> 
</span><del>-    width = floatFeature(features, &quot;dialogwidth&quot;, 100, screenAvailableRect.width(), 620); // default here came from frame size of dialog in MacIE
-    height = floatFeature(features, &quot;dialogheight&quot;, 100, screenAvailableRect.height(), 450); // default here came from frame size of dialog in MacIE
</del><ins>+    WindowFeatures features;
</ins><span class="cx"> 
</span><del>-    auto dialogLeft = floatFeature(features, &quot;dialogleft&quot;, screenAvailableRect.x(), screenAvailableRect.maxX() - *width, -1);
-    if (dialogLeft &gt; 0)
-        x = dialogLeft;
</del><ins>+    features.menuBarVisible = false;
+    features.toolBarVisible = false;
+    features.locationBarVisible = false;
+    features.dialog = true;
</ins><span class="cx"> 
</span><del>-    auto dialogTop = floatFeature(features, &quot;dialogtop&quot;, screenAvailableRect.y(), screenAvailableRect.maxY() - *height, -1);
-    if (dialogTop &gt; 0)
-        y = dialogTop;
</del><ins>+    float width = floatFeature(featuresMap, &quot;dialogwidth&quot;, 100, screenAvailableRect.width()).valueOr(620); // default here came from frame size of dialog in MacIE
+    float height = floatFeature(featuresMap, &quot;dialogheight&quot;, 100, screenAvailableRect.height()).valueOr(450); // default here came from frame size of dialog in MacIE
</ins><span class="cx"> 
</span><del>-    if (boolFeature(features, &quot;center&quot;, true)) {
-        if (!x)
-            x = screenAvailableRect.x() + (screenAvailableRect.width() - *width) / 2;
</del><ins>+    features.width = width;
+    features.height = height;
</ins><span class="cx"> 
</span><del>-        if (!y)
-            y = screenAvailableRect.y() + (screenAvailableRect.height() - *height) / 2;
</del><ins>+    features.x = floatFeature(featuresMap, &quot;dialogleft&quot;, screenAvailableRect.x(), screenAvailableRect.maxX() - width);
+    features.y = floatFeature(featuresMap, &quot;dialogtop&quot;, screenAvailableRect.y(), screenAvailableRect.maxY() - height);
+
+    if (boolFeature(featuresMap, &quot;center&quot;).valueOr(true)) {
+        if (!features.x)
+            features.x = screenAvailableRect.x() + (screenAvailableRect.width() - width) / 2;
+        if (!features.y)
+            features.y = screenAvailableRect.y() + (screenAvailableRect.height() - height) / 2;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    resizable = boolFeature(features, &quot;resizable&quot;);
-    scrollbarsVisible = boolFeature(features, &quot;scroll&quot;, true);
-    statusBarVisible = boolFeature(features, &quot;status&quot;, !trusted);
</del><ins>+    features.resizable = boolFeature(featuresMap, &quot;resizable&quot;).valueOr(false);
+    features.scrollbarsVisible = boolFeature(featuresMap, &quot;scroll&quot;).valueOr(true);
+    features.statusBarVisible = boolFeature(featuresMap, &quot;status&quot;).valueOr(false);
+
+    return features;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool WindowFeatures::boolFeature(const HashMap&lt;String, String&gt;&amp; features, const char* key, bool defaultValue)
</del><ins>+static Optional&lt;bool&gt; boolFeature(const DialogFeaturesMap&amp; features, const char* key)
</ins><span class="cx"> {
</span><span class="cx">     auto it = features.find(key);
</span><span class="cx">     if (it == features.end())
</span><del>-        return defaultValue;
</del><ins>+        return Nullopt;
</ins><span class="cx"> 
</span><del>-    const String&amp; value = it-&gt;value;
-    return value.isNull() || value == &quot;1&quot; || value == &quot;yes&quot; || value == &quot;on&quot;;
</del><ins>+    auto&amp; value = it-&gt;value;
+    return value.isNull()
+        || value == &quot;1&quot;
+        || equalLettersIgnoringASCIICase(value, &quot;yes&quot;)
+        || equalLettersIgnoringASCIICase(value, &quot;on&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-float WindowFeatures::floatFeature(const HashMap&lt;String, String&gt;&amp; features, const char* key, float min, float max, float defaultValue)
</del><ins>+static Optional&lt;float&gt; floatFeature(const DialogFeaturesMap&amp; features, const char* key, float min, float max)
</ins><span class="cx"> {
</span><span class="cx">     auto it = features.find(key);
</span><span class="cx">     if (it == features.end())
</span><del>-        return defaultValue;
</del><ins>+        return Nullopt;
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: The toDouble function does not offer a way to tell &quot;0q&quot; from string with no digits in it: Both
</span><span class="cx">     // return the number 0 and false for ok. But &quot;0q&quot; should yield the minimum rather than the default.
</span><span class="cx">     bool ok;
</span><span class="cx">     double parsedNumber = it-&gt;value.toDouble(&amp;ok);
</span><span class="cx">     if ((!parsedNumber &amp;&amp; !ok) || std::isnan(parsedNumber))
</span><del>-        return defaultValue;
</del><ins>+        return Nullopt;
</ins><span class="cx">     if (parsedNumber &lt; min || max &lt;= min)
</span><span class="cx">         return min;
</span><span class="cx">     if (parsedNumber &gt; max)
</span><span class="lines">@@ -224,10 +215,13 @@
</span><span class="cx">     return static_cast&lt;int&gt;(parsedNumber);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-HashMap&lt;String, String&gt; WindowFeatures::parseDialogFeatures(const String&amp; string)
</del><ins>+static DialogFeaturesMap parseDialogFeaturesMap(const String&amp; string)
</ins><span class="cx"> {
</span><del>-    HashMap&lt;String, String&gt; features;
</del><ins>+    // FIXME: Not clear why we take such a different approach to parsing dialog features
+    // as opposed to window features (using a map, different parsing quirks).
</ins><span class="cx"> 
</span><ins>+    DialogFeaturesMap features;
+
</ins><span class="cx">     Vector&lt;String&gt; vector;
</span><span class="cx">     string.split(';', vector);
</span><span class="cx"> 
</span><span class="lines">@@ -239,12 +233,12 @@
</span><span class="cx">         if (separatorPosition == notFound)
</span><span class="cx">             separatorPosition = colonPosition;
</span><span class="cx"> 
</span><del>-        String key = featureString.left(separatorPosition).stripWhiteSpace().lower();
</del><ins>+        String key = featureString.left(separatorPosition).stripWhiteSpace();
</ins><span class="cx"> 
</span><span class="cx">         // Null string for value indicates key without value.
</span><span class="cx">         String value;
</span><span class="cx">         if (separatorPosition != notFound) {
</span><del>-            value = featureString.substring(separatorPosition + 1).stripWhiteSpace().lower();
</del><ins>+            value = featureString.substring(separatorPosition + 1).stripWhiteSpace();
</ins><span class="cx">             value = value.left(value.find(' '));
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageWindowFeaturesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WindowFeatures.h (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WindowFeatures.h        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/page/WindowFeatures.h        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2003, 2007, 2010 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2003, 2007, 2010, 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -29,55 +29,39 @@
</span><span class="cx"> #ifndef WindowFeatures_h
</span><span class="cx"> #define WindowFeatures_h
</span><span class="cx"> 
</span><del>-#include &lt;wtf/Forward.h&gt;
-#include &lt;wtf/HashMap.h&gt;
</del><ins>+#include &lt;functional&gt;
</ins><span class="cx"> #include &lt;wtf/Optional.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><del>-#include &lt;wtf/text/StringHash.h&gt;
</del><ins>+#include &lt;wtf/text/WTFString.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class FloatRect;
</span><span class="cx"> 
</span><span class="cx"> struct WindowFeatures {
</span><del>-    WindowFeatures()
-        : menuBarVisible(true)
-        , statusBarVisible(true)
-        , toolBarVisible(true)
-        , locationBarVisible(true)
-        , scrollbarsVisible(true)
-        , resizable(true)
-        , fullscreen(false)
-        , dialog(false)
-    {
-    }
-    explicit WindowFeatures(const String&amp; windowFeaturesString);
-    WindowFeatures(const String&amp; dialogFeaturesString, const FloatRect&amp; screenAvailableRect);
-
</del><span class="cx">     Optional&lt;float&gt; x;
</span><span class="cx">     Optional&lt;float&gt; y;
</span><span class="cx">     Optional&lt;float&gt; width;
</span><span class="cx">     Optional&lt;float&gt; height;
</span><span class="cx"> 
</span><del>-    bool menuBarVisible;
-    bool statusBarVisible;
-    bool toolBarVisible;
-    bool locationBarVisible;
-    bool scrollbarsVisible;
-    bool resizable;
</del><ins>+    bool menuBarVisible { true };
+    bool statusBarVisible { true };
+    bool toolBarVisible { true };
+    bool locationBarVisible { true };
+    bool scrollbarsVisible { true };
+    bool resizable { true };
</ins><span class="cx"> 
</span><del>-    bool fullscreen;
-    bool dialog;
</del><ins>+    bool fullscreen { false };
+    bool dialog { false };
</ins><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; additionalFeatures;
</span><del>-
-private:
-    static HashMap&lt;String, String&gt; parseDialogFeatures(const String&amp;);
-    static bool boolFeature(const HashMap&lt;String, String&gt;&amp;, const char* key, bool defaultValue = false);
-    static float floatFeature(const HashMap&lt;String, String&gt;&amp;, const char* key, float min, float max, float defaultValue);
-    void setWindowFeature(const String&amp; keyString, const String&amp; valueString);
</del><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WindowFeatures parseWindowFeatures(StringView windowFeaturesString);
+WindowFeatures parseDialogFeatures(const String&amp; dialogFeaturesString, const FloatRect&amp; screenAvailableRect);
+
+void processFeaturesString(StringView features, std::function&lt;void(StringView type, StringView value)&gt; callback);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // WindowFeatures_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformSchemeRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/SchemeRegistry.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/SchemeRegistry.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/SchemeRegistry.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -126,10 +126,10 @@
</span><span class="cx"> 
</span><span class="cx"> void SchemeRegistry::removeURLSchemeRegisteredAsLocal(const String&amp; scheme)
</span><span class="cx"> {
</span><del>-    if (scheme == &quot;file&quot;)
</del><ins>+    if (equalLettersIgnoringASCIICase(scheme, &quot;file&quot;))
</ins><span class="cx">         return;
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-    if (scheme == &quot;applewebdata&quot;)
</del><ins>+    if (equalLettersIgnoringASCIICase(scheme, &quot;applewebdata&quot;))
</ins><span class="cx">         return;
</span><span class="cx"> #endif
</span><span class="cx">     localURLSchemes().remove(scheme);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformeflMIMETypeRegistryEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/efl/MIMETypeRegistryEfl.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -31,10 +31,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;MIMETypeRegistry.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;NotImplemented.h&quot;
-#include &lt;wtf/Assertions.h&gt;
-#include &lt;wtf/MainThread.h&gt;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> struct ExtensionMap {
</span><span class="lines">@@ -74,21 +70,14 @@
</span><span class="cx">     { &quot;xhtml&quot;, &quot;application/xhtml+xml&quot; },
</span><span class="cx">     { &quot;wml&quot;, &quot;text/vnd.wap.wml&quot; },
</span><span class="cx">     { &quot;wmlc&quot;, &quot;application/vnd.wap.wmlc&quot; },
</span><del>-    { 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-String MIMETypeRegistry::getMIMETypeForExtension(const String &amp;ext)
</del><ins>+String MIMETypeRegistry::getMIMETypeForExtension(const String&amp; extension)
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-
-    String s = ext.lower();
-    const ExtensionMap *e = extensionMap;
-    while (e-&gt;extension) {
-        if (s == e-&gt;extension)
-            return e-&gt;mimeType;
-        ++e;
</del><ins>+    for (auto&amp; entry : extensionMap) {
+        if (equalIgnoringASCIICase(extension, entry.extension))
+            return entry.mimeType;
</ins><span class="cx">     }
</span><del>-
</del><span class="cx">     return String();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsMediaPlayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -324,10 +324,10 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_reloadTimer.isActive());
</span><span class="cx"> 
</span><del>-    m_contentMIMEType = contentType.type().lower();
</del><ins>+    m_contentMIMEType = contentType.type().convertToASCIILowercase();
</ins><span class="cx">     m_contentTypeCodecs = contentType.parameter(codecs());
</span><span class="cx">     m_url = url;
</span><del>-    m_keySystem = keySystem.lower();
</del><ins>+    m_keySystem = keySystem.convertToASCIILowercase();
</ins><span class="cx">     m_contentMIMETypeWasInferredFromExtension = false;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MEDIA_SOURCE)
</span><span class="lines">@@ -366,7 +366,7 @@
</span><span class="cx">     ASSERT(mediaSource);
</span><span class="cx"> 
</span><span class="cx">     m_mediaSource = mediaSource;
</span><del>-    m_contentMIMEType = contentType.type().lower();
</del><ins>+    m_contentMIMEType = contentType.type().convertToASCIILowercase();
</ins><span class="cx">     m_contentTypeCodecs = contentType.parameter(codecs());
</span><span class="cx">     m_url = url;
</span><span class="cx">     m_keySystem = &quot;&quot;;
</span><span class="lines">@@ -517,17 +517,17 @@
</span><span class="cx"> #if ENABLE(ENCRYPTED_MEDIA)
</span><span class="cx"> MediaPlayer::MediaKeyException MediaPlayer::generateKeyRequest(const String&amp; keySystem, const unsigned char* initData, unsigned initDataLength)
</span><span class="cx"> {
</span><del>-    return m_private-&gt;generateKeyRequest(keySystem.lower(), initData, initDataLength);
</del><ins>+    return m_private-&gt;generateKeyRequest(keySystem.convertToASCIILowercase(), initData, initDataLength);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MediaPlayer::MediaKeyException MediaPlayer::addKey(const String&amp; keySystem, const unsigned char* key, unsigned keyLength, const unsigned char* initData, unsigned initDataLength, const String&amp; sessionId)
</span><span class="cx"> {
</span><del>-    return m_private-&gt;addKey(keySystem.lower(), key, keyLength, initData, initDataLength, sessionId);
</del><ins>+    return m_private-&gt;addKey(keySystem.convertToASCIILowercase(), key, keyLength, initData, initDataLength, sessionId);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> MediaPlayer::MediaKeyException MediaPlayer::cancelKeyRequest(const String&amp; keySystem, const String&amp; sessionId)
</span><span class="cx"> {
</span><del>-    return m_private-&gt;cancelKeyRequest(keySystem.lower(), sessionId);
</del><ins>+    return m_private-&gt;cancelKeyRequest(keySystem.convertToASCIILowercase(), sessionId);
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsopenglExtensions3DOpenGLCommoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">     m_renderer = String(reinterpret_cast&lt;const char*&gt;(::glGetString(GL_RENDERER)));
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; vendorComponents;
</span><del>-    m_vendor.lower().split(' ', vendorComponents);
</del><ins>+    m_vendor.convertToASCIILowercase().split(' ', vendorComponents);
</ins><span class="cx">     if (vendorComponents.contains(&quot;nvidia&quot;))
</span><span class="cx">         m_isNVIDIA = true;
</span><span class="cx">     if (vendorComponents.contains(&quot;ati&quot;) || vendorComponents.contains(&quot;amd&quot;))
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgtkMIMETypeRegistryGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -28,9 +28,6 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;MIMETypeRegistry.h&quot;
</span><span class="cx"> 
</span><del>-#include &lt;wtf/Assertions.h&gt;
-#include &lt;wtf/MainThread.h&gt;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> struct ExtensionMap {
</span><span class="lines">@@ -61,21 +58,14 @@
</span><span class="cx">     { &quot;xhtml&quot;, &quot;application/xhtml+xml&quot; },
</span><span class="cx">     { &quot;wml&quot;, &quot;text/vnd.wap.wml&quot; },
</span><span class="cx">     { &quot;wmlc&quot;, &quot;application/vnd.wap.wmlc&quot; },
</span><del>-    { 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-String MIMETypeRegistry::getMIMETypeForExtension(const String &amp;ext)
</del><ins>+String MIMETypeRegistry::getMIMETypeForExtension(const String&amp; extension)
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-
-    String s = ext.lower();
-    const ExtensionMap *e = extensionMap;
-    while (e-&gt;extension) {
-        if (s == e-&gt;extension)
-            return e-&gt;mimeType;
-        ++e;
</del><ins>+    for (auto&amp; entry : extensionMap) {
+        if (equalIgnoringASCIICase(extension, entry.extension))
+            return entry.mimeType;
</ins><span class="cx">     }
</span><del>-
</del><span class="cx">     return String();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacPasteboardMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/PasteboardMac.mm (196079 => 196080)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/PasteboardMac.mm        2016-02-03 21:54:36 UTC (rev 196079)
+++ trunk/Source/WebCore/platform/mac/PasteboardMac.mm        2016-02-03 22:08:57 UTC (rev 196080)
</span><span class="lines">@@ -417,34 +417,32 @@
</span><span class="cx"> static String cocoaTypeFromHTMLClipboardType(const String&amp; type)
</span><span class="cx"> {
</span><span class="cx">     // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dom-datatransfer-setdata
</span><del>-    String qType = type.lower();
</del><ins>+    String lowercasedType = type.convertToASCIILowercase();
</ins><span class="cx"> 
</span><del>-    if (qType == &quot;text&quot;)
-        qType = ASCIILiteral(&quot;text/plain&quot;);
-    if (qType == &quot;url&quot;)
-        qType = ASCIILiteral(&quot;text/uri-list&quot;);
</del><ins>+    if (lowercasedType == &quot;text&quot;)
+        lowercasedType = ASCIILiteral(&quot;text/plain&quot;);
+    if (lowercasedType == &quot;url&quot;)
+        lowercasedType = ASCIILiteral(&quot;text/uri-list&quot;);
</ins><span class="cx"> 
</span><del>-    // Ignore any trailing charset - JS strings are Unicode, which encapsulates the charset issue
-    if (qType == &quot;text/plain&quot; || qType.startsWith(&quot;text/plain;&quot;))
-        return String(NSStringPboardType);
-    if (qType == &quot;text/uri-list&quot;)
-        // special case because UTI doesn't work with Cocoa's URL type
-        return String(NSURLPboardType); // note special case in getData to read NSFilenamesType
</del><ins>+    // Ignore any trailing charset - strings are already UTF-16, and the charset issue has already been dealt with.
+    if (lowercasedType == &quot;text/plain&quot; || lowercasedType.startsWith(&quot;text/plain;&quot;))
+        return NSStringPboardType;
+    if (lowercasedType == &quot;text/uri-list&quot;) {
+        // Special case because UTI doesn't work with Cocoa's URL type.
+        return NSURLPboardType;
+    }
</ins><span class="cx"> 
</span><del>-    // Blacklist types that might contain subframe information
-    if (qType == &quot;text/rtf&quot; || qType == &quot;public.rtf&quot; || qType == &quot;com.apple.traditional-mac-plain-text&quot;)
</del><ins>+    // Blacklist types that might contain subframe information.
+    if (lowercasedType == &quot;text/rtf&quot; || lowercasedType == &quot;public.rtf&quot; || lowercasedType == &quot;com.apple.traditional-mac-plain-text&quot;)
</ins><span class="cx">         return String();
</span><span class="cx"> 
</span><del>-    // Try UTI now
-    String mimeType = qType;
-    if (RetainPtr&lt;CFStringRef&gt; utiType = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType.createCFString().get(), NULL))) {
-        RetainPtr&lt;CFStringRef&gt; pbType = adoptCF(UTTypeCopyPreferredTagWithClass(utiType.get(), kUTTagClassNSPboardType));
-        if (pbType)
</del><ins>+    if (auto utiType = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, lowercasedType.createCFString().get(), NULL))) {
+        if (auto pbType = adoptCF(UTTypeCopyPreferredTagWithClass(utiType.get(), kUTTagClassNSPboardType)))
</ins><span class="cx">             return pbType.get();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // No mapping, just pass the whole string though
</span><del>-    return qType;
</del><ins>+    return lowercasedType;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Pasteboard::clear(const String&amp; type)
</span></span></pre>
</div>
</div>

</body>
</html>