<!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>[212508] trunk</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Remove old URL parser
https://bugs.webkit.org/show_bug.cgi?id=168483

Reviewed by Tim Horton.

Source/WebCore:

* platform/URL.cpp:
(WebCore::isSchemeFirstChar):
(WebCore::isSchemeChar):
(WebCore::URL::URL):
(WebCore::URL::setProtocol):
(WebCore::URL::setHost):
(WebCore::URL::removePort):
(WebCore::URL::setPort):
(WebCore::URL::setHostAndPort):
(WebCore::URL::setUser):
(WebCore::URL::setPass):
(WebCore::URL::setFragmentIdentifier):
(WebCore::URL::setQuery):
(WebCore::URL::setPath):
(WebCore::URL::serialize):
(WebCore::isUserInfoChar): Deleted.
(WebCore::isHostnameChar): Deleted.
(WebCore::isIPv6Char): Deleted.
(WebCore::isPathSegmentEndChar): Deleted.
(WebCore::appendASCII): Deleted.
(WebCore::findFirstOf): Deleted.
(WebCore::checkEncodedString): Deleted.
(WebCore::URL::init): Deleted.
(WebCore::appendEscapingBadChars): Deleted.
(WebCore::escapeAndAppendNonHierarchicalPart): Deleted.
(WebCore::copyPathRemovingDots): Deleted.
(WebCore::hasSlashDotOrDotDot): Deleted.
(WebCore::URL::parse): Deleted.
(WebCore::cannotBeABaseURL): Deleted.
(WebCore::isDefaultPortForScheme): Deleted.
(WebCore::hostPortIsEmptyButCredentialsArePresent): Deleted.
(WebCore::isNonFileHierarchicalScheme): Deleted.
(WebCore::isCanonicalHostnameLowercaseForScheme): Deleted.
(WebCore::findHostnamesInMailToURL): Deleted.
(WebCore::findHostnameInHierarchicalURL): Deleted.
(WebCore::encodeHostnames): Deleted.
(WebCore::encodeRelativeString): Deleted.
(WebCore::substituteBackslashes): Deleted.
* platform/URLParser.cpp:
(WebCore::URLParser::URLParser):
(WebCore::URLParser::setEnabled): Deleted.
(WebCore::URLParser::enabled): Deleted.
* platform/URLParser.h:
* platform/cf/URLCF.cpp:
(WebCore::URL::URL):
* platform/mac/URLMac.mm:
(WebCore::URL::URL):

Source/WebKit2:

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::initializeNetworkProcess):
* NetworkProcess/NetworkProcessCreationParameters.cpp:
(WebKit::NetworkProcessCreationParameters::encode):
(WebKit::NetworkProcessCreationParameters::decode):
* NetworkProcess/NetworkProcessCreationParameters.h:
* PlatformEfl.cmake:
* PlatformGTK.cmake:
* PlatformMac.cmake:
* Shared/Cocoa/WebKit2InitializeCocoa.mm: Removed.
* Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
(WebKit::XPCServiceInitializer):
* Shared/WebKit2Initialize.cpp:
(WebKit::InitializeWebKit2):
* Shared/WebKit2Initialize.h:
(): Deleted.
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* Shared/efl/WebKit2InitializeEFL.cpp: Removed.
* Shared/gtk/WebKit2InitializeGTK.cpp: Removed.
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess):
(WebKit::WebProcessPool::createNewWebProcess):
* WebKit2.xcodeproj/project.pbxproj:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):

Tools:

* TestWebKitAPI/Tests/WebCore/URLParser.cpp:
(TestWebKitAPI::checkURL):
(TestWebKitAPI::checkRelativeURL):
(TestWebKitAPI::checkURLDifferences):
(TestWebKitAPI::checkRelativeURLDifferences):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformURLcpp">trunk/Source/WebCore/platform/URL.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformURLParsercpp">trunk/Source/WebCore/platform/URLParser.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformURLParserh">trunk/Source/WebCore/platform/URLParser.h</a></li>
<li><a href="#trunkSourceWebCoreplatformcfURLCFcpp">trunk/Source/WebCore/platform/cf/URLCF.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmacURLMacmm">trunk/Source/WebCore/platform/mac/URLMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformsoupURLSoupcpp">trunk/Source/WebCore/platform/soup/URLSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcessCreationParameterscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcessCreationParametersh">trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.h</a></li>
<li><a href="#trunkSourceWebKit2PlatformEflcmake">trunk/Source/WebKit2/PlatformEfl.cmake</a></li>
<li><a href="#trunkSourceWebKit2PlatformGTKcmake">trunk/Source/WebKit2/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebKit2PlatformMaccmake">trunk/Source/WebKit2/PlatformMac.cmake</a></li>
<li><a href="#trunkSourceWebKit2SharedEntryPointUtilitiesmacXPCServiceXPCServiceEntryPointh">trunk/Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebKit2Initializecpp">trunk/Source/WebKit2/Shared/WebKit2Initialize.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebKit2Initializeh">trunk/Source/WebKit2/Shared/WebKit2Initialize.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebProcessCreationParameterscpp">trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebProcessCreationParametersh">trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessPoolcpp">trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebProcesscpp">trunk/Source/WebKit2/WebProcess/WebProcess.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebCoreURLParsercpp">trunk/Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2SharedCocoaWebKit2InitializeCocoamm">trunk/Source/WebKit2/Shared/Cocoa/WebKit2InitializeCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedeflWebKit2InitializeEFLcpp">trunk/Source/WebKit2/Shared/efl/WebKit2InitializeEFL.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedgtkWebKit2InitializeGTKcpp">trunk/Source/WebKit2/Shared/gtk/WebKit2InitializeGTK.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/ChangeLog        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,3 +1,58 @@
</span><ins>+2017-02-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Remove old URL parser
+        https://bugs.webkit.org/show_bug.cgi?id=168483
+
+        Reviewed by Tim Horton.
+
+        * platform/URL.cpp:
+        (WebCore::isSchemeFirstChar):
+        (WebCore::isSchemeChar):
+        (WebCore::URL::URL):
+        (WebCore::URL::setProtocol):
+        (WebCore::URL::setHost):
+        (WebCore::URL::removePort):
+        (WebCore::URL::setPort):
+        (WebCore::URL::setHostAndPort):
+        (WebCore::URL::setUser):
+        (WebCore::URL::setPass):
+        (WebCore::URL::setFragmentIdentifier):
+        (WebCore::URL::setQuery):
+        (WebCore::URL::setPath):
+        (WebCore::URL::serialize):
+        (WebCore::isUserInfoChar): Deleted.
+        (WebCore::isHostnameChar): Deleted.
+        (WebCore::isIPv6Char): Deleted.
+        (WebCore::isPathSegmentEndChar): Deleted.
+        (WebCore::appendASCII): Deleted.
+        (WebCore::findFirstOf): Deleted.
+        (WebCore::checkEncodedString): Deleted.
+        (WebCore::URL::init): Deleted.
+        (WebCore::appendEscapingBadChars): Deleted.
+        (WebCore::escapeAndAppendNonHierarchicalPart): Deleted.
+        (WebCore::copyPathRemovingDots): Deleted.
+        (WebCore::hasSlashDotOrDotDot): Deleted.
+        (WebCore::URL::parse): Deleted.
+        (WebCore::cannotBeABaseURL): Deleted.
+        (WebCore::isDefaultPortForScheme): Deleted.
+        (WebCore::hostPortIsEmptyButCredentialsArePresent): Deleted.
+        (WebCore::isNonFileHierarchicalScheme): Deleted.
+        (WebCore::isCanonicalHostnameLowercaseForScheme): Deleted.
+        (WebCore::findHostnamesInMailToURL): Deleted.
+        (WebCore::findHostnameInHierarchicalURL): Deleted.
+        (WebCore::encodeHostnames): Deleted.
+        (WebCore::encodeRelativeString): Deleted.
+        (WebCore::substituteBackslashes): Deleted.
+        * platform/URLParser.cpp:
+        (WebCore::URLParser::URLParser):
+        (WebCore::URLParser::setEnabled): Deleted.
+        (WebCore::URLParser::enabled): Deleted.
+        * platform/URLParser.h:
+        * platform/cf/URLCF.cpp:
+        (WebCore::URL::URL):
+        * platform/mac/URLMac.mm:
+        (WebCore::URL::URL):
+
</ins><span class="cx"> 2017-02-16  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Build fixes.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformURLcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/URL.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/URL.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/URL.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -55,18 +55,6 @@
</span><span class="cx"> 
</span><span class="cx"> static const unsigned invalidPortNumber = 0xFFFF;
</span><span class="cx"> 
</span><del>-static const char wsScheme[] = {'w', 's'};
-static const char ftpScheme[] = {'f', 't', 'p'};
-static const char ftpPort[] = {'2', '1'};
-static const char wssScheme[] = {'w', 's', 's'};
-static const char fileScheme[] = {'f', 'i', 'l', 'e'};
-static const char httpScheme[] = {'h', 't', 't', 'p'};
-static const char httpPort[] = {'8', '0'};
-static const char httpsScheme[] = {'h', 't', 't', 'p', 's'};
-static const char httpsPort[] = {'4', '4', '3'};
-static const char gopherScheme[] = {'g', 'o', 'p', 'h', 'e', 'r'};
-static const char gopherPort[] = {'7', '0'};
-
</del><span class="cx"> enum URLCharacterClasses {
</span><span class="cx">     // alpha 
</span><span class="cx">     SchemeFirstChar = 1 &lt;&lt; 0,
</span><span class="lines">@@ -328,19 +316,8 @@
</span><span class="cx">     /* 252 */ PercentEncodeSimple, /* 253 */ PercentEncodeSimple, /* 254 */ PercentEncodeSimple, /* 255 */ PercentEncodeSimple
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static unsigned copyPathRemovingDots(char* dst, const char* src, unsigned srcStart, unsigned srcEnd);
-static bool encodeRelativeString(const String&amp; rel, const TextEncoding&amp;, CharBuffer&amp; ouput);
-static String substituteBackslashes(const String&amp;);
-
-static inline bool isSchemeFirstChar(char c) { return characterClassTable[static_cast&lt;unsigned char&gt;(c)] &amp; SchemeFirstChar; }
</del><span class="cx"> static inline bool isSchemeFirstChar(UChar c) { return c &lt;= 0xff &amp;&amp; (characterClassTable[c] &amp; SchemeFirstChar); }
</span><del>-static inline bool isSchemeChar(char c) { return characterClassTable[static_cast&lt;unsigned char&gt;(c)] &amp; SchemeChar; }
</del><span class="cx"> static inline bool isSchemeChar(UChar c) { return c &lt;= 0xff &amp;&amp; (characterClassTable[c] &amp; SchemeChar); }
</span><del>-static inline bool isUserInfoChar(unsigned char c) { return characterClassTable[c] &amp; UserInfoChar; }
-static inline bool isHostnameChar(unsigned char c) { return characterClassTable[c] &amp; HostnameChar; }
-static inline bool isIPv6Char(unsigned char c) { return characterClassTable[c] &amp; IPv6Char; }
-static inline bool isPathSegmentEndChar(char c) { return characterClassTable[static_cast&lt;unsigned char&gt;(c)] &amp; PathSegmentEndChar; }
-static inline bool isPathSegmentEndChar(UChar c) { return c &lt;= 0xff &amp;&amp; (characterClassTable[c] &amp; PathSegmentEndChar); }
</del><span class="cx"> static inline bool isBadChar(unsigned char c) { return characterClassTable[c] &amp; BadChar; }
</span><span class="cx"> static inline bool isTabNewline(UChar c) { return c &lt;= 0xff &amp;&amp; (characterClassTable[c] &amp; TabNewline); }
</span><span class="cx"> 
</span><span class="lines">@@ -364,37 +341,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void appendASCII(const String&amp; base, const char* rel, size_t len, CharBuffer&amp; buffer)
-{
-    buffer.resize(base.length() + len + 1);
-    copyASCII(base, buffer.data());
-    memcpy(buffer.data() + base.length(), rel, len);
-    buffer[buffer.size() - 1] = '\0';
-}
-
-// FIXME: Move to WTFString.h eventually.
-// Returns the index of the first index in string |s| of any of the characters
-// in |toFind|. |toFind| should be a null-terminated string, all characters up
-// to the null will be searched. Returns int if not found.
-const unsigned notFoundUnsigned = std::numeric_limits&lt;unsigned&gt;::max();
-static unsigned findFirstOf(StringView string, unsigned startPosition, const char* target)
-{
-    unsigned length = string.length();
-    for (unsigned i = startPosition; i &lt; length; ++i) {
-        for (unsigned j = 0; target[j]; ++j) {
-            if (string[i] == target[j])
-                return i;
-        }
-    }
-    return notFoundUnsigned;
-}
-
-static inline void checkEncodedString(const String&amp; url)
-{
-    ASSERT_UNUSED(url, url.containsOnlyASCII());
-    ASSERT_UNUSED(url, url.isEmpty() || isSchemeFirstChar(url[0]));
-}
-
</del><span class="cx"> inline bool URL::protocolIs(const String&amp; string, const char* protocol)
</span><span class="cx"> {
</span><span class="cx">     return WebCore::protocolIs(string, protocol);
</span><span class="lines">@@ -419,26 +365,21 @@
</span><span class="cx"> 
</span><span class="cx"> URL::URL(ParsedURLStringTag, const String&amp; url)
</span><span class="cx"> {
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(url);
-        *this = parser.result();
-    } else
-        parse(url);
</del><ins>+    URLParser parser(url);
+    *this = parser.result();
+
</ins><span class="cx"> #if OS(WINDOWS)
</span><del>-        // FIXME(148598): Work around Windows local file handling bug in CFNetwork
-        ASSERT(isLocalFile() || url == m_string);
</del><ins>+    // FIXME(148598): Work around Windows local file handling bug in CFNetwork
+    ASSERT(isLocalFile() || url == m_string);
</ins><span class="cx"> #else
</span><del>-        ASSERT(url == m_string);
</del><ins>+    ASSERT(url == m_string);
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> URL::URL(const URL&amp; base, const String&amp; relative)
</span><span class="cx"> {
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(relative, base);
-        *this = parser.result();
-    } else
-        init(base, relative, UTF8Encoding());
</del><ins>+    URLParser parser(relative, base);
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> URL::URL(const URL&amp; base, const String&amp; relative, const TextEncoding&amp; encoding)
</span><span class="lines">@@ -447,12 +388,8 @@
</span><span class="cx">     // we do when submitting a form. A form with GET method
</span><span class="cx">     // has its contents added to a URL as query params and it makes sense
</span><span class="cx">     // to be consistent.
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(relative, base, encoding.encodingForFormSubmission());
-        *this = parser.result();
-    } else {
-        init(base, relative, encoding.encodingForFormSubmission());
-    }
</del><ins>+    URLParser parser(relative, base, encoding.encodingForFormSubmission());
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static bool shouldTrimFromURL(UChar c)
</span><span class="lines">@@ -463,202 +400,6 @@
</span><span class="cx">     return c &lt;= ' ';
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void URL::init(const URL&amp; base, const String&amp; relative, const TextEncoding&amp; encoding)
-{
-    if (URLParser::enabled())
-        ASSERT_NOT_REACHED();
-
-    // Allow resolutions with a null or empty base URL, but not with any other invalid one.
-    // FIXME: Is this a good rule?
-    if (!base.m_isValid &amp;&amp; !base.isEmpty()) {
-        m_string = relative;
-        invalidate();
-        return;
-    }
-
-    // Get rid of leading and trailing whitespace and control characters.
-    String rel = relative.stripWhiteSpace(shouldTrimFromURL);
-
-    // Get rid of any tabs and newlines.
-    rel = rel.removeCharacters(isTabNewline);
-
-    // For compatibility with Win IE, treat backslashes as if they were slashes,
-    // as long as we're not dealing with javascript: or data: URLs.
-    if (rel.contains('\\') &amp;&amp; !(protocolIsJavaScript(rel) || protocolIs(rel, &quot;data&quot;)))
-        rel = substituteBackslashes(rel);
-
-    bool allASCII = rel.containsOnlyASCII();
-    CharBuffer strBuffer;
-    char* str;
-    size_t len;
-    if (allASCII) {
-        len = rel.length();
-        strBuffer.resize(len + 1);
-        copyASCII(rel, strBuffer.data());
-        strBuffer[len] = 0;
-        str = strBuffer.data();
-    } else {
-        if (!encodeRelativeString(rel, encoding, strBuffer)) {
-            m_string = blankURL();
-            invalidate();
-            return;
-        }
-
-        str = strBuffer.data();
-        len = strlen(str);
-    }
-
-    // According to the RFC, the reference should be interpreted as an
-    // absolute URI if possible, using the &quot;leftmost, longest&quot;
-    // algorithm. If the URI reference is absolute it will have a
-    // scheme, meaning that it will have a colon before the first
-    // non-scheme element.
-    bool absolute = false;
-    char* p = str;
-    if (isSchemeFirstChar(*p)) {
-        ++p;
-        while (isSchemeChar(*p)) {
-            ++p;
-        }
-        if (*p == ':') {
-            if (p[1] != '/' &amp;&amp; equalIgnoringASCIICase(base.protocol(), StringView(reinterpret_cast&lt;LChar*&gt;(str), p - str)) &amp;&amp; base.isHierarchical())
-                str = p + 1;
-            else
-                absolute = true;
-        }
-    }
-
-    CharBuffer parseBuffer;
-
-    if (absolute) {
-        parse(str, &amp;relative);
-    } else {
-        // If the base is empty or opaque (e.g. data: or javascript:), then the URL is invalid
-        // unless the relative URL is a single fragment.
-        if (!base.isHierarchical()) {
-            if (str[0] == '#') {
-                appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
-                parse(parseBuffer.data(), &amp;relative);
-            } else {
-                m_string = relative;
-                invalidate();
-            }
-            return;
-        }
-
-        switch (str[0]) {
-        case '\0':
-            // The reference is empty, so this is a reference to the same document with any fragment identifier removed.
-            *this = base;
-            removeFragmentIdentifier();
-            break;
-        case '#': {
-            // must be fragment-only reference
-            appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
-            parse(parseBuffer.data(), &amp;relative);
-            break;
-        }
-        case '?': {
-            // query-only reference, special case needed for non-URL results
-            appendASCII(base.m_string.left(base.m_pathEnd), str, len, parseBuffer);
-            parse(parseBuffer.data(), &amp;relative);
-            break;
-        }
-        case '/':
-            // must be net-path or absolute-path reference
-            if (str[1] == '/') {
-                // net-path
-                appendASCII(base.m_string.left(base.m_schemeEnd + 1), str, len, parseBuffer);
-                parse(parseBuffer.data(), &amp;relative);
-            } else {
-                // abs-path
-                appendASCII(base.m_string.left(base.m_portEnd), str, len, parseBuffer);
-                parse(parseBuffer.data(), &amp;relative);
-            }
-            break;
-        default:
-            {
-                // must be relative-path reference
-
-                // Base part plus relative part plus one possible slash added in between plus terminating \0 byte.
-                const size_t bufferSize = base.m_pathEnd + 1 + len + 1;
-                parseBuffer.resize(bufferSize);
-
-                char* bufferPos = parseBuffer.data();
-                char* bufferStart = bufferPos;
-
-                // first copy everything before the path from the base
-                CharBuffer baseStringBuffer(base.m_string.length());
-                copyASCII(base.m_string, baseStringBuffer.data());
-                const char* baseString = baseStringBuffer.data();
-                const char* baseStringStart = baseString;
-                const char* pathStart = baseStringStart + base.m_portEnd;
-                while (baseStringStart &lt; pathStart)
-                    *bufferPos++ = *baseStringStart++;
-                char* bufferPathStart = bufferPos;
-
-                // now copy the base path
-                const char* baseStringEnd = baseString + base.m_pathEnd;
-
-                // go back to the last slash
-                while (baseStringEnd &gt; baseStringStart &amp;&amp; baseStringEnd[-1] != '/')
-                    baseStringEnd--;
-
-                if (baseStringEnd == baseStringStart) {
-                    // no path in base, add a path separator if necessary
-                    if (base.m_schemeEnd + 1 != base.m_pathEnd &amp;&amp; *str &amp;&amp; *str != '?' &amp;&amp; *str != '#')
-                        *bufferPos++ = '/';
-                } else {
-                    bufferPos += copyPathRemovingDots(bufferPos, baseStringStart, 0, baseStringEnd - baseStringStart);
-                }
-
-                const char* relStringStart = str;
-                const char* relStringPos = relStringStart;
-
-                while (*relStringPos &amp;&amp; *relStringPos != '?' &amp;&amp; *relStringPos != '#') {
-                    if (relStringPos[0] == '.' &amp;&amp; bufferPos[-1] == '/') {
-                        if (isPathSegmentEndChar(relStringPos[1])) {
-                            // skip over &quot;.&quot; segment
-                            relStringPos += 1;
-                            if (relStringPos[0] == '/')
-                                relStringPos++;
-                            continue;
-                        } else if (relStringPos[1] == '.' &amp;&amp; isPathSegmentEndChar(relStringPos[2])) {
-                            // skip over &quot;..&quot; segment and rewind the last segment
-                            // the RFC leaves it up to the app to decide what to do with excess
-                            // &quot;..&quot; segments - we choose to drop them since some web content
-                            // relies on this.
-                            relStringPos += 2;
-                            if (relStringPos[0] == '/')
-                                relStringPos++;
-                            if (bufferPos &gt; bufferPathStart + 1)
-                                bufferPos--;
-                            while (bufferPos &gt; bufferPathStart + 1  &amp;&amp; bufferPos[-1] != '/')
-                                bufferPos--;
-                            continue;
-                        }
-                    }
-
-                    *bufferPos = *relStringPos;
-                    relStringPos++;
-                    bufferPos++;
-                }
-
-                // all done with the path work, now copy any remainder
-                // of the relative reference; this will also add a null terminator
-                const size_t currentOffset = bufferPos - bufferStart;
-                auto remainingBufferSize = bufferSize - currentOffset;
-                ASSERT(currentOffset + strlen(relStringPos) + 1 &lt;= bufferSize);
-                strncpy(bufferPos, relStringPos, remainingBufferSize);
-                bufferPos[remainingBufferSize - 1] = '\0';
-
-                parse(parseBuffer.data(), &amp;relative);
-                break;
-            }
-        }
-    }
-}
-
</del><span class="cx"> URL URL::isolatedCopy() const
</span><span class="cx"> {
</span><span class="cx">     URL result = *this;
</span><span class="lines">@@ -899,20 +640,13 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     if (!m_isValid) {
</span><del>-        if (URLParser::enabled()) {
-            URLParser parser(makeString(newProtocol, &quot;:&quot;, m_string));
-            *this = parser.result();
-        } else
-            parse(newProtocol + ':' + m_string);
</del><ins>+        URLParser parser(makeString(newProtocol, &quot;:&quot;, m_string));
+        *this = parser.result();
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(makeString(newProtocol, m_string.substring(m_schemeEnd)));
-        *this = parser.result();
-    } else
-        parse(newProtocol + m_string.substring(m_schemeEnd));
-
</del><ins>+    URLParser parser(makeString(newProtocol, m_string.substring(m_schemeEnd)));
+    *this = parser.result();
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -978,12 +712,9 @@
</span><span class="cx">         builder.appendLiteral(&quot;//&quot;);
</span><span class="cx">     builder.append(StringView(encodedHostName.data(), encodedHostName.size()));
</span><span class="cx">     builder.append(m_string.substring(m_hostEnd));
</span><del>-    
-    if (URLParser::enabled()) {
-        URLParser parser(builder.toString());
-        *this = parser.result();
-    } else
-        parse(builder.toString());
</del><ins>+
+    URLParser parser(builder.toString());
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void URL::removePort()
</span><span class="lines">@@ -990,11 +721,8 @@
</span><span class="cx"> {
</span><span class="cx">     if (m_hostEnd == m_portEnd)
</span><span class="cx">         return;
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(m_string.left(m_hostEnd) + m_string.substring(m_portEnd));
-        *this = parser.result();
-    } else
-        parse(m_string.left(m_hostEnd) + m_string.substring(m_portEnd));
</del><ins>+    URLParser parser(m_string.left(m_hostEnd) + m_string.substring(m_portEnd));
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void URL::setPort(unsigned short i)
</span><span class="lines">@@ -1005,11 +733,8 @@
</span><span class="cx">     bool colonNeeded = m_portEnd == m_hostEnd;
</span><span class="cx">     unsigned portStart = (colonNeeded ? m_hostEnd : m_hostEnd + 1);
</span><span class="cx"> 
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(makeString(m_string.left(portStart), (colonNeeded ? &quot;:&quot; : &quot;&quot;), String::number(i), m_string.substring(m_portEnd)));
-        *this = parser.result();
-    } else
-        parse(m_string.left(portStart) + (colonNeeded ? &quot;:&quot; : &quot;&quot;) + String::number(i) + m_string.substring(m_portEnd));
</del><ins>+    URLParser parser(makeString(m_string.left(portStart), (colonNeeded ? &quot;:&quot; : &quot;&quot;), String::number(i), m_string.substring(m_portEnd)));
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void URL::setHostAndPort(const String&amp; hostAndPort)
</span><span class="lines">@@ -1050,11 +775,8 @@
</span><span class="cx">     }
</span><span class="cx">     builder.append(m_string.substring(m_portEnd));
</span><span class="cx"> 
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(builder.toString());
-        *this = parser.result();
-    } else
-        parse(builder.toString());
</del><ins>+    URLParser parser(builder.toString());
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void URL::setUser(const String&amp; user)
</span><span class="lines">@@ -1073,11 +795,8 @@
</span><span class="cx">         // Add '@' if we didn't have one before.
</span><span class="cx">         if (end == m_hostEnd || (end == m_passwordEnd &amp;&amp; m_string[end] != '@'))
</span><span class="cx">             u.append('@');
</span><del>-        if (URLParser::enabled()) {
-            URLParser parser(makeString(m_string.left(m_userStart), u, m_string.substring(end)));
-            *this = parser.result();
-        } else
-            parse(m_string.left(m_userStart) + u + m_string.substring(end));
</del><ins>+        URLParser parser(makeString(m_string.left(m_userStart), u, m_string.substring(end)));
+        *this = parser.result();
</ins><span class="cx">     } else {
</span><span class="cx">         // Remove '@' if we now have neither user nor password.
</span><span class="cx">         if (m_userEnd == m_passwordEnd &amp;&amp; end != m_hostEnd &amp;&amp; m_string[end] == '@')
</span><span class="lines">@@ -1084,11 +803,8 @@
</span><span class="cx">             end += 1;
</span><span class="cx">         // We don't want to parse in the extremely common case where we are not going to make a change.
</span><span class="cx">         if (m_userStart != end) {
</span><del>-            if (URLParser::enabled()) {
-                URLParser parser(makeString(m_string.left(m_userStart), m_string.substring(end)));
-                *this = parser.result();
-            } else
-                parse(m_string.left(m_userStart) + m_string.substring(end));
</del><ins>+            URLParser parser(makeString(m_string.left(m_userStart), m_string.substring(end)));
+            *this = parser.result();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1106,11 +822,8 @@
</span><span class="cx">         // Eat the existing '@' since we are going to add our own.
</span><span class="cx">         if (end != m_hostEnd &amp;&amp; m_string[end] == '@')
</span><span class="cx">             end += 1;
</span><del>-        if (URLParser::enabled()) {
-            URLParser parser(makeString(m_string.left(m_userEnd), p, m_string.substring(end)));
-            *this = parser.result();
-        } else
-            parse(m_string.left(m_userEnd) + p + m_string.substring(end));
</del><ins>+        URLParser parser(makeString(m_string.left(m_userEnd), p, m_string.substring(end)));
+        *this = parser.result();
</ins><span class="cx">     } else {
</span><span class="cx">         // Remove '@' if we now have neither user nor password.
</span><span class="cx">         if (m_userStart == m_userEnd &amp;&amp; end != m_hostEnd &amp;&amp; m_string[end] == '@')
</span><span class="lines">@@ -1117,11 +830,8 @@
</span><span class="cx">             end += 1;
</span><span class="cx">         // We don't want to parse in the extremely common case where we are not going to make a change.
</span><span class="cx">         if (m_userEnd != end) {
</span><del>-            if (URLParser::enabled()) {
-                URLParser parser(makeString(m_string.left(m_userEnd), m_string.substring(end)));
-                *this = parser.result();
-            } else
-                parse(m_string.left(m_userEnd) + m_string.substring(end));
</del><ins>+            URLParser parser(makeString(m_string.left(m_userEnd), m_string.substring(end)));
+            *this = parser.result();
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1133,10 +843,7 @@
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Optimize the case where the identifier already happens to be equal to what was passed?
</span><span class="cx">     // FIXME: Is it correct to do this without encoding and escaping non-ASCII characters?
</span><del>-    if (URLParser::enabled())
-        *this = URLParser { makeString(StringView { m_string }.substring(0, m_queryEnd), '#', identifier) }.result();
-    else
-        parse(m_string.left(m_queryEnd) + &quot;#&quot; + identifier);
</del><ins>+    *this = URLParser { makeString(StringView { m_string }.substring(0, m_queryEnd), '#', identifier) }.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void URL::removeFragmentIdentifier()
</span><span class="lines">@@ -1161,17 +868,11 @@
</span><span class="cx">     // access to the document in this function.
</span><span class="cx">     // https://webkit.org/b/161176
</span><span class="cx">     if ((query.isEmpty() || query[0] != '?') &amp;&amp; !query.isNull()) {
</span><del>-        if (URLParser::enabled()) {
-            URLParser parser(makeString(m_string.left(m_pathEnd), &quot;?&quot;, query, m_string.substring(m_queryEnd)));
-            *this = parser.result();
-        } else
-            parse(m_string.left(m_pathEnd) + &quot;?&quot; + query + m_string.substring(m_queryEnd));
</del><ins>+        URLParser parser(makeString(m_string.left(m_pathEnd), &quot;?&quot;, query, m_string.substring(m_queryEnd)));
+        *this = parser.result();
</ins><span class="cx">     } else {
</span><del>-        if (URLParser::enabled()) {
-            URLParser parser(makeString(m_string.left(m_pathEnd), query, m_string.substring(m_queryEnd)));
-            *this = parser.result();
-        } else
-            parse(m_string.left(m_pathEnd) + query + m_string.substring(m_queryEnd));
</del><ins>+        URLParser parser(makeString(m_string.left(m_pathEnd), query, m_string.substring(m_queryEnd)));
+        *this = parser.result();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> }
</span><span class="lines">@@ -1187,11 +888,8 @@
</span><span class="cx">     if (path.isEmpty() || path[0] != '/')
</span><span class="cx">         path = &quot;/&quot; + path;
</span><span class="cx"> 
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(makeString(m_string.left(m_portEnd), encodeWithURLEscapeSequences(path), m_string.substring(m_pathEnd)));
-        *this = parser.result();
-    } else
-        parse(m_string.left(m_portEnd) + encodeWithURLEscapeSequences(path) + m_string.substring(m_pathEnd));
</del><ins>+    URLParser parser(makeString(m_string.left(m_portEnd), encodeWithURLEscapeSequences(path), m_string.substring(m_pathEnd)));
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> String decodeURLEscapeSequences(const String&amp; string)
</span><span class="lines">@@ -1211,190 +909,11 @@
</span><span class="cx">     placeByteAsHex(c, buffer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void appendEscapingBadChars(char*&amp; buffer, const char* strStart, size_t length)
-{
-    char* p = buffer;
-
-    const char* str = strStart;
-    const char* strEnd = strStart + length;
-    while (str &lt; strEnd) {
-        unsigned char c = *str++;
-        if (isBadChar(c)) {
-            if (c == '%' || c == '?')
-                *p++ = c;
-            else if (c != 0x09 &amp;&amp; c != 0x0a &amp;&amp; c != 0x0d)
-                appendEscapedChar(p, c);
-        } else
-            *p++ = c;
-    }
-
-    buffer = p;
-}
-
-static void escapeAndAppendNonHierarchicalPart(char*&amp; buffer, const char* strStart, size_t length)
-{
-    char* p = buffer;
-
-    const char* str = strStart;
-    const char* strEnd = strStart + length;
-    while (str &lt; strEnd) {
-        unsigned char c = *str++;
-        // Strip CR, LF and Tab from fragments, per:
-        // https://bugs.webkit.org/show_bug.cgi?id=8770
-        if (c == 0x09 || c == 0x0a || c == 0x0d)
-            continue;
-
-        // Chrome and IE allow non-ascii characters in fragments, however doing
-        // so would hit an ASSERT in checkEncodedString, so for now we don't.
-        if (c &lt; 0x20 || c &gt;= 127) {
-            appendEscapedChar(p, c);
-            continue;
-        }
-        *p++ = c;
-    }
-
-    buffer = p;
-}
-
-// copy a path, accounting for &quot;.&quot; and &quot;..&quot; segments
-static unsigned copyPathRemovingDots(char* dst, const char* src, unsigned srcStart, unsigned srcEnd)
-{
-    char* bufferPathStart = dst;
-
-    // empty path is a special case, and need not have a leading slash
-    if (srcStart != srcEnd) {
-        const char* baseStringStart = src + srcStart;
-        const char* baseStringEnd = src + srcEnd;
-        const char* baseStringPos = baseStringStart;
-
-        // this code is unprepared for paths that do not begin with a
-        // slash and we should always have one in the source string
-        ASSERT(baseStringPos[0] == '/');
-
-        // copy the leading slash into the destination
-        *dst = *baseStringPos;
-        baseStringPos++;
-        dst++;
-
-        while (baseStringPos &lt; baseStringEnd) {
-            if (baseStringPos[0] == '.' &amp;&amp; dst[-1] == '/') {
-                if (baseStringPos[1] == '/' || baseStringPos + 1 == baseStringEnd) {
-                    // skip over &quot;.&quot; segment
-                    baseStringPos += 2;
-                    continue;
-                } else if (baseStringPos[1] == '.' &amp;&amp; (baseStringPos[2] == '/' ||
-                                       baseStringPos + 2 == baseStringEnd)) {
-                    // skip over &quot;..&quot; segment and rewind the last segment
-                    // the RFC leaves it up to the app to decide what to do with excess
-                    // &quot;..&quot; segments - we choose to drop them since some web content
-                    // relies on this.
-                    baseStringPos += 3;
-                    if (dst &gt; bufferPathStart + 1)
-                        dst--;
-                    while (dst &gt; bufferPathStart &amp;&amp; dst[-1] != '/')
-                        dst--;
-                    continue;
-                }
-            }
-
-            *dst = *baseStringPos;
-            baseStringPos++;
-            dst++;
-        }
-    }
-    *dst = '\0';
-    return dst - bufferPathStart;
-}
-
-static inline bool hasSlashDotOrDotDot(const char* str)
-{
-    const unsigned char* p = reinterpret_cast&lt;const unsigned char*&gt;(str);
-    if (!*p)
-        return false;
-    unsigned char pc = *p;
-    while (unsigned char c = *++p) {
-        if (c == '.' &amp;&amp; (pc == '/' || pc == '.'))
-            return true;
-        pc = c;
-    }
-    return false;
-}
-
-void URL::parse(const String&amp; string)
-{
-    if (URLParser::enabled())
-        ASSERT_NOT_REACHED();
-    checkEncodedString(string);
-
-    CharBuffer buffer(string.length() + 1);
-    copyASCII(string, buffer.data());
-    buffer[string.length()] = '\0';
-    parse(buffer.data(), &amp;string);
-}
-
-static inline bool cannotBeABaseURL(const URL&amp; url)
-{
-    // FIXME: Support https://url.spec.whatwg.org/#url-cannot-be-a-base-url-flag properly
-    // According spec, this should be computed at parsing time.
-    // For the moment, we just check whether the scheme is special or not.
-    if (url.protocolIs(&quot;ftp&quot;) || url.protocolIs(&quot;file&quot;) || url.protocolIs(&quot;gopher&quot;) || url.protocolIs(&quot;http&quot;) || url.protocolIs(&quot;https&quot;) || url.protocolIs(&quot;ws&quot;) || url.protocolIs(&quot;wss&quot;))
-        return false;
-    return true;
-}
-
-// Implementation of https://url.spec.whatwg.org/#url-serializing
</del><span class="cx"> String URL::serialize(bool omitFragment) const
</span><span class="cx"> {
</span><del>-    if (URLParser::enabled()) {
-        if (omitFragment)
-            return m_string.left(m_queryEnd);
-        return m_string;
-    }
-
-    if (isNull())
-        return String();
-
-    StringBuilder urlBuilder;
-    urlBuilder.append(m_string, 0, m_schemeEnd);
-    urlBuilder.appendLiteral(&quot;:&quot;);
-    unsigned start = hostStart();
-    if (start &lt; m_hostEnd) {
-        urlBuilder.appendLiteral(&quot;//&quot;);
-        if (hasUsername()) {
-            urlBuilder.append(m_string, m_userStart, m_userEnd - m_userStart);
-            unsigned passwordStart = m_userEnd + 1;
-            if (hasPassword()) {
-                urlBuilder.appendLiteral(&quot;:&quot;);
-                urlBuilder.append(m_string, passwordStart, m_passwordEnd - passwordStart);
-            }
-            urlBuilder.appendLiteral(&quot;@&quot;);
-        }
-        // FIXME: Serialize host according https://url.spec.whatwg.org/#concept-host-serializer for IPv4 and IPv6 addresses.
-        urlBuilder.append(m_string, start, m_hostEnd - start);
-        if (port()) {
-            urlBuilder.appendLiteral(&quot;:&quot;);
-            urlBuilder.appendNumber(port().value());
-        }
-    } else if (protocolIs(&quot;file&quot;))
-        urlBuilder.appendLiteral(&quot;//&quot;);
-    if (WebCore::cannotBeABaseURL(*this))
-        urlBuilder.append(m_string, m_portEnd, m_pathEnd - m_portEnd);
-    else {
-        urlBuilder.appendLiteral(&quot;/&quot;);
-        if (m_pathEnd &gt; m_portEnd) {
-            unsigned pathStart = m_portEnd + 1;
-            urlBuilder.append(m_string, pathStart, m_pathEnd - pathStart);
-        }
-    }
-    if (hasQuery()) {
-        urlBuilder.appendLiteral(&quot;?&quot;);
-        urlBuilder.append(m_string, m_pathEnd + 1, m_queryEnd - (m_pathEnd + 1));
-    }
-    if (!omitFragment &amp;&amp; hasFragment()) {
-        urlBuilder.appendLiteral(&quot;#&quot;);
-        urlBuilder.append(m_string, m_queryEnd + 1, m_fragmentEnd - (m_queryEnd + 1));
-    }
-    return urlBuilder.toString();
</del><ins>+    if (omitFragment)
+        return m_string.left(m_queryEnd);
+    return m_string;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="lines">@@ -1433,440 +952,6 @@
</span><span class="cx">     return lengthA == lengthB &amp;&amp; equal(stringA, stringB);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// List of default schemes is taken from google-url:
-// http://code.google.com/p/google-url/source/browse/trunk/src/url_canon_stdurl.cc#120
-static inline bool isDefaultPortForScheme(const char* port, size_t portLength, const char* scheme, size_t schemeLength)
-{
-    // This switch is theoretically a performance optimization.  It came over when
-    // the code was moved from google-url, but may be removed later.
-    switch (schemeLength) {
-    case 2:
-        return equal(scheme, wsScheme) &amp;&amp; equal(port, portLength, httpPort);
-    case 3:
-        if (equal(scheme, ftpScheme))
-            return equal(port, portLength, ftpPort);
-        if (equal(scheme, wssScheme))
-            return equal(port, portLength, httpsPort);
-        break;
-    case 4:
-        return equal(scheme, httpScheme) &amp;&amp; equal(port, portLength, httpPort);
-    case 5:
-        return equal(scheme, httpsScheme) &amp;&amp; equal(port, portLength, httpsPort);
-    case 6:
-        return equal(scheme, gopherScheme) &amp;&amp; equal(port, portLength, gopherPort);
-    }
-    return false;
-}
-
-static inline bool hostPortIsEmptyButCredentialsArePresent(unsigned hostStart, unsigned portEnd, char userinfoEndChar)
-{
-    return userinfoEndChar == '@' &amp;&amp; hostStart == portEnd;
-}
-
-static bool isNonFileHierarchicalScheme(const char* scheme, size_t schemeLength)
-{
-    switch (schemeLength) {
-    case 2:
-        return equal(scheme, wsScheme);
-    case 3:
-        return equal(scheme, ftpScheme) || equal(scheme, wssScheme);
-    case 4:
-        return equal(scheme, httpScheme);
-    case 5:
-        return equal(scheme, httpsScheme);
-    case 6:
-        return equal(scheme, gopherScheme);
-    }
-    return false;
-}
-
-static bool isCanonicalHostnameLowercaseForScheme(const char* scheme, size_t schemeLength)
-{
-    switch (schemeLength) {
-    case 2:
-        return equal(scheme, wsScheme);
-    case 3:
-        return equal(scheme, ftpScheme) || equal(scheme, wssScheme);
-    case 4:
-        return equal(scheme, httpScheme) || equal(scheme, fileScheme);
-    case 5:
-        return equal(scheme, httpsScheme);
-    case 6:
-        return equal(scheme, gopherScheme);
-    }
-    return false;
-}
-
-void URL::parse(const char* url, const String* originalString)
-{
-    if (URLParser::enabled())
-        ASSERT_NOT_REACHED();
-    if (!url || url[0] == '\0') {
-        // valid URL must be non-empty
-        m_string = originalString ? *originalString : url;
-        invalidate();
-        return;
-    }
-
-    if (!isSchemeFirstChar(url[0])) {
-        // scheme must start with an alphabetic character
-        m_string = originalString ? *originalString : url;
-        invalidate();
-        return;
-    }
-
-    unsigned schemeEnd = 0;
-    while (isSchemeChar(url[schemeEnd]))
-        schemeEnd++;
-
-    if (url[schemeEnd] != ':') {
-        m_string = originalString ? *originalString : url;
-        invalidate();
-        return;
-    }
-
-    unsigned userStart = schemeEnd + 1;
-    unsigned userEnd;
-    unsigned passwordStart;
-    unsigned passwordEnd;
-    unsigned hostStart;
-    unsigned hostEnd;
-    unsigned portStart;
-    unsigned portEnd;
-
-    bool hierarchical = url[schemeEnd + 1] == '/';
-    bool hasSecondSlash = hierarchical &amp;&amp; url[schemeEnd + 2] == '/';
-
-    bool isFile = schemeEnd == 4
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[0], 'f')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[1], 'i')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[2], 'l')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[3], 'e');
-
-    m_protocolIsInHTTPFamily = isASCIIAlphaCaselessEqual(url[0], 'h')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[1], 't')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[2], 't')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[3], 'p')
-        &amp;&amp; (url[4] == ':' || (isASCIIAlphaCaselessEqual(url[4], 's') &amp;&amp; url[5] == ':'));
-
-    if ((hierarchical &amp;&amp; hasSecondSlash) || isNonFileHierarchicalScheme(url, schemeEnd)) {
-        // The part after the scheme is either a net_path or an abs_path whose first path segment is empty.
-        // Attempt to find an authority.
-        // FIXME: Authority characters may be scanned twice, and it would be nice to be faster.
-
-        if (hierarchical) {
-            userStart++;
-            if (hasSecondSlash) {
-                userStart++;
-                if (isNonFileHierarchicalScheme(url, schemeEnd)) {
-                    while (url[userStart] == '/')
-                        userStart++;
-                }
-            }
-        }
-
-        userEnd = userStart;
-
-        unsigned colonPos = 0;
-        while (isUserInfoChar(url[userEnd])) {
-            if (url[userEnd] == ':' &amp;&amp; colonPos == 0)
-                colonPos = userEnd;
-            userEnd++;
-        }
-
-        if (url[userEnd] == '@') {
-            // actual end of the userinfo, start on the host
-            if (colonPos != 0) {
-                passwordEnd = userEnd;
-                userEnd = colonPos;
-                passwordStart = colonPos + 1;
-            } else
-                passwordStart = passwordEnd = userEnd;
-
-            hostStart = passwordEnd + 1;
-        } else if (url[userEnd] == '[' || isPathSegmentEndChar(url[userEnd])) {
-            // hit the end of the authority, must have been no user
-            // or looks like an IPv6 hostname
-            // either way, try to parse it as a hostname
-            userEnd = userStart;
-            passwordStart = passwordEnd = userEnd;
-            hostStart = userStart;
-        } else {
-            // invalid character
-            m_string = originalString ? *originalString : url;
-            invalidate();
-            return;
-        }
-
-        hostEnd = hostStart;
-
-        // IPV6 IP address
-        if (url[hostEnd] == '[') {
-            hostEnd++;
-            while (isIPv6Char(url[hostEnd]))
-                hostEnd++;
-            if (url[hostEnd] == ']')
-                hostEnd++;
-            else {
-                // invalid character
-                m_string = originalString ? *originalString : url;
-                invalidate();
-                return;
-            }
-        } else {
-            while (isHostnameChar(url[hostEnd]))
-                hostEnd++;
-        }
-        
-        if (url[hostEnd] == ':') {
-            portStart = portEnd = hostEnd + 1;

-            // possible start of port
-            portEnd = portStart;
-            while (isASCIIDigit(url[portEnd]))
-                portEnd++;
-        } else
-            portStart = portEnd = hostEnd;
-
-        if (!isPathSegmentEndChar(url[portEnd])) {
-            // invalid character
-            m_string = originalString ? *originalString : url;
-            invalidate();
-            return;
-        }
-
-        if (hostPortIsEmptyButCredentialsArePresent(hostStart, portEnd, url[passwordEnd])) {
-            m_string = originalString ? *originalString : url;
-            invalidate();
-            return;
-        }
-
-        if (userStart == portEnd &amp;&amp; !m_protocolIsInHTTPFamily &amp;&amp; !isFile) {
-            // No authority found, which means that this is not a net_path, but rather an abs_path whose first two
-            // path segments are empty. For file, http and https only, an empty authority is allowed.
-            userStart -= 2;
-            userEnd = userStart;
-            passwordStart = userEnd;
-            passwordEnd = passwordStart;
-            hostStart = passwordEnd;
-            hostEnd = hostStart;
-            portStart = hostEnd;
-            portEnd = hostEnd;
-        }
-    } else {
-        // the part after the scheme must be an opaque_part or an abs_path
-        userEnd = userStart;
-        passwordStart = passwordEnd = userEnd;
-        hostStart = hostEnd = passwordEnd;
-        portStart = portEnd = hostEnd;
-    }
-
-    unsigned pathStart = portEnd;
-    unsigned pathEnd = pathStart;
-    while (url[pathEnd] &amp;&amp; url[pathEnd] != '?' &amp;&amp; url[pathEnd] != '#')
-        pathEnd++;
-
-    unsigned queryStart = pathEnd;
-    unsigned queryEnd = queryStart;
-    if (url[queryStart] == '?') {
-        while (url[queryEnd] &amp;&amp; url[queryEnd] != '#')
-            queryEnd++;
-    }
-
-    unsigned fragmentStart = queryEnd;
-    unsigned fragmentEnd = fragmentStart;
-    if (url[fragmentStart] == '#') {
-        fragmentStart++;
-        fragmentEnd = fragmentStart;
-        while (url[fragmentEnd])
-            fragmentEnd++;
-    }
-
-    // assemble it all, remembering the real ranges
-    Checked&lt;unsigned, RecordOverflow&gt; bufferLength = fragmentEnd;
-    bufferLength *= 3;
-
-    // The magic number 10 comes from the worst-case addition of characters for password start,
-    // user info, and colon for port number, colon after scheme, plus inserting missing slashes
-    // after protocol, slash for empty path, and possible end-of-query '#' character. This
-    // yields a max of nine additional characters, plus a null.
-    bufferLength += 10;
-
-    if (bufferLength.hasOverflowed()) {
-        m_string = originalString ? *originalString : url;
-        invalidate();
-        return;
-    }
-
-    Vector&lt;char, 4096&gt; buffer(bufferLength.unsafeGet());
-
-    char* p = buffer.data();
-    const char* strPtr = url;
-
-    // copy in the scheme
-    const char* schemeEndPtr = url + schemeEnd;
-#if PLATFORM(IOS)
-    if (shouldCanonicalizeScheme || m_protocolIsInHTTPFamily) {
-        while (strPtr &lt; schemeEndPtr)
-            *p++ = toASCIILower(*strPtr++);
-    } else {
-        while (strPtr &lt; schemeEndPtr)
-            *p++ = *strPtr++;
-    }
-#else
-    while (strPtr &lt; schemeEndPtr)
-        *p++ = toASCIILower(*strPtr++);
-#endif
-    m_schemeEnd = p - buffer.data();
-
-    bool hostIsLocalHost = portEnd - userStart == 9
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart], 'l')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+1], 'o')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+2], 'c')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+3], 'a')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+4], 'l')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+5], 'h')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+6], 'o')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+7], 's')
-        &amp;&amp; isASCIIAlphaCaselessEqual(url[userStart+8], 't');
-
-    // File URLs need a host part unless it is just file:// or file://localhost
-    bool degenerateFilePath = pathStart == pathEnd &amp;&amp; (hostStart == hostEnd || hostIsLocalHost);
-
-    // We drop empty credentials, but keep a colon in an empty host/port pair.
-    // Removing hostname completely would change the structure of the URL on re-parsing.
-    bool haveNonHostAuthorityPart = userStart != userEnd || passwordStart != passwordEnd || hostEnd != portEnd;
-
-    // add &quot;:&quot; after scheme
-    *p++ = ':';
-
-    // if we have at least one authority part or a file URL - add &quot;//&quot; and authority
-    if (isFile ? !degenerateFilePath : (haveNonHostAuthorityPart || hostStart != hostEnd)) {
-        *p++ = '/';
-        *p++ = '/';
-
-        m_userStart = p - buffer.data();
-
-        // copy in the user
-        strPtr = url + userStart;
-        const char* userEndPtr = url + userEnd;
-        while (strPtr &lt; userEndPtr) {
-            char c = *strPtr++;
-            ASSERT(isUserInfoChar(c));
-            *p++ = c;
-        }
-        m_userEnd = p - buffer.data();
-
-        // copy in the password
-        if (passwordEnd != passwordStart) {
-            *p++ = ':';
-            strPtr = url + passwordStart;
-            const char* passwordEndPtr = url + passwordEnd;
-            while (strPtr &lt; passwordEndPtr) {
-                char c = *strPtr++;
-                ASSERT(isUserInfoChar(c));
-                *p++ = c;
-            }
-        }
-        m_passwordEnd = p - buffer.data();
-
-        // If we had any user info, add &quot;@&quot;
-        if (static_cast&lt;unsigned&gt;(p - buffer.data()) != m_userStart)
-            *p++ = '@';
-
-        // copy in the host, except in the case of a file URL with authority=&quot;localhost&quot;
-        if (!(isFile &amp;&amp; hostIsLocalHost &amp;&amp; !haveNonHostAuthorityPart)) {
-            strPtr = url + hostStart;
-            const char* hostEndPtr = url + hostEnd;
-            if (isCanonicalHostnameLowercaseForScheme(buffer.data(), m_schemeEnd)) {
-                while (strPtr &lt; hostEndPtr) {
-                    char c = toASCIILower(*strPtr++);
-                    ASSERT(isHostnameChar(c) || c == '[' || c == ']' || c == ':');
-                    *p++ = c;
-                }
-            } else {
-                while (strPtr &lt; hostEndPtr) {
-                    char c = *strPtr++;
-                    ASSERT(isHostnameChar(c) || c == '[' || c == ']' || c == ':');
-                    *p++ = c;
-                }
-            }
-        }
-        m_hostEnd = p - buffer.data();
-
-        // Copy in the port if the URL has one (and it's not default). Also, copy it if there was no hostname, so that there is still something in authority component.
-        if (hostEnd != portStart) {
-            const char* portStr = url + portStart;
-            size_t portLength = portEnd - portStart;
-            if ((portLength &amp;&amp; !isDefaultPortForScheme(portStr, portLength, buffer.data(), m_schemeEnd))
-                || (hostStart == hostEnd &amp;&amp; hostEnd != portStart)) {
-                *p++ = ':';
-                const char* portEndPtr = url + portEnd;
-                while (portStr &lt; portEndPtr)
-                    *p++ = *portStr++;
-            }
-        }
-        m_portEnd = p - buffer.data();
-    } else {
-        if (isFile) {
-            ASSERT(degenerateFilePath);
-            *p++ = '/';
-            *p++ = '/';
-        }
-        m_userStart = m_userEnd = m_passwordEnd = m_hostEnd = m_portEnd = p - buffer.data();
-    }
-
-    // For canonicalization, ensure we have a '/' for no path.
-    // Do this only for URL with protocol file, http or https.
-    if ((m_protocolIsInHTTPFamily || isFile) &amp;&amp; pathEnd == pathStart)
-        *p++ = '/';
-
-    // add path, escaping bad characters
-    if (!hierarchical)
-        escapeAndAppendNonHierarchicalPart(p, url + pathStart, pathEnd - pathStart);
-    else if (!hasSlashDotOrDotDot(url))
-        appendEscapingBadChars(p, url + pathStart, pathEnd - pathStart);
-    else {
-        CharBuffer pathBuffer(pathEnd - pathStart + 1);
-        unsigned length = copyPathRemovingDots(pathBuffer.data(), url, pathStart, pathEnd);
-        appendEscapingBadChars(p, pathBuffer.data(), length);
-    }
-
-    m_pathEnd = p - buffer.data();
-
-    // Find the position after the last slash in the path, or
-    // the position before the path if there are no slashes in it.
-    unsigned i;
-    for (i = m_pathEnd; i &gt; m_portEnd; --i) {
-        if (buffer[i - 1] == '/')
-            break;
-    }
-    m_pathAfterLastSlash = i;
-
-    // add query, escaping bad characters
-    appendEscapingBadChars(p, url + queryStart, queryEnd - queryStart);
-    m_queryEnd = p - buffer.data();
-
-    // add fragment, escaping bad characters
-    if (fragmentEnd != queryEnd) {
-        *p++ = '#';
-        escapeAndAppendNonHierarchicalPart(p, url + fragmentStart, fragmentEnd - fragmentStart);
-    }
-    m_fragmentEnd = p - buffer.data();
-
-    ASSERT(p - buffer.data() &lt;= static_cast&lt;int&gt;(buffer.size()));
-    ASSERT(buffer.size() &gt; 0);
-
-    // If we didn't end up actually changing the original string and
-    // it was already in a String, reuse it to avoid extra allocation.
-    if (originalString &amp;&amp; equal(originalString-&gt;impl(), buffer.data(), m_fragmentEnd))
-        m_string = *originalString;
-    else
-        m_string = String(buffer.data(), m_fragmentEnd);
-
-    m_isValid = true;
-}
-
</del><span class="cx"> bool equalIgnoringFragmentIdentifier(const URL&amp; a, const URL&amp; b)
</span><span class="cx"> {
</span><span class="cx">     if (a.m_queryEnd != b.m_queryEnd)
</span><span class="lines">@@ -1969,215 +1054,6 @@
</span><span class="cx">     return String(buffer.data(), p - buffer.data());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool protocolIs(StringView stringURL, const char* protocol)
-{
-    assertProtocolIsGood(StringView(reinterpret_cast&lt;const LChar*&gt;(protocol), strlen(protocol)));
-    unsigned length = stringURL.length();
-    for (unsigned i = 0; i &lt; length; ++i) {
-        if (!protocol[i])
-            return stringURL[i] == ':';
-        if (!isASCIIAlphaCaselessEqual(stringURL[i], protocol[i]))
-            return false;
-    }
-    return false;
-}
-
-static void findHostnamesInMailToURL(StringView string, Vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt;&amp; nameRanges)
-{
-    // In a mailto: URL, host names come after a '@' character and end with a '&gt;' or ',' or '?' or end of string character.
-    // Skip quoted strings so that characters in them don't confuse us.
-    // When we find a '?' character, we are past the part of the URL that contains host names.
-
-    nameRanges.clear();
-
-    unsigned p = 0;
-    while (1) {
-        // Find start of host name or of quoted string.
-        unsigned hostnameOrStringStart = findFirstOf(string, p, &quot;\&quot;@?&quot;);
-        if (hostnameOrStringStart == notFoundUnsigned)
-            return;
-        UChar c = string[hostnameOrStringStart];
-        p = hostnameOrStringStart + 1;
-
-        if (c == '?')
-            return;
-
-        if (c == '@') {
-            // Find end of host name.
-            unsigned hostnameStart = p;
-            unsigned hostnameEnd = findFirstOf(string, p, &quot;&gt;,?&quot;);
-            bool done;
-            if (hostnameEnd == notFoundUnsigned) {
-                hostnameEnd = string.length();
-                done = true;
-            } else {
-                p = hostnameEnd;
-                done = false;
-            }
-
-            nameRanges.append(std::make_pair(hostnameStart, hostnameEnd));
-
-            if (done)
-                return;
-        } else {
-            // Skip quoted string.
-            ASSERT(c == '&quot;');
-            while (1) {
-                unsigned escapedCharacterOrStringEnd = findFirstOf(string, p, &quot;\&quot;\\&quot;);
-                if (escapedCharacterOrStringEnd == notFoundUnsigned)
-                    return;
-
-                c = string[escapedCharacterOrStringEnd];
-                p = escapedCharacterOrStringEnd + 1;
-
-                // If we are the end of the string, then break from the string loop back to the host name loop.
-                if (c == '&quot;')
-                    break;
-
-                // Skip escaped character.
-                ASSERT(c == '\\');
-                if (p == string.length())
-                    return;
-
-                ++p;
-            }
-        }
-    }
-}
-
-static bool findHostnameInHierarchicalURL(StringView string, unsigned&amp; startOffset, unsigned&amp; endOffset)
-{
-    // Find the host name in a hierarchical URL.
-    // It comes after a &quot;://&quot; sequence, with scheme characters preceding, and
-    // this should be the first colon in the string.
-    // It ends with the end of the string or a &quot;:&quot; or a path segment ending character.
-    // If there is a &quot;@&quot; character, the host part is just the part after the &quot;@&quot;.
-    unsigned separator = findFirstOf(string, 0, &quot;:&quot;);
-    if (separator == notFoundUnsigned || separator + 2 &gt;= string.length() || string[separator + 1] != '/' || string[separator + 2] != '/')
-        return false;
-
-    // Check that all characters before the :// are valid scheme characters.
-    if (!isSchemeFirstChar(string[0]))
-        return false;
-    for (unsigned i = 1; i &lt; separator; ++i) {
-        if (!isSchemeChar(string[i]))
-            return false;
-    }
-
-    // Start after the separator.
-    unsigned authorityStart = separator + 3;
-
-    // Find terminating character.
-    unsigned hostnameEnd = string.length();
-    for (unsigned i = authorityStart; i &lt; hostnameEnd; ++i) {
-        UChar c = string[i];
-        if (c == ':' || (isPathSegmentEndChar(c) &amp;&amp; c != 0)) {
-            hostnameEnd = i;
-            break;
-        }
-    }
-
-    // Find &quot;@&quot; for the start of the host name.
-    unsigned userInfoTerminator = findFirstOf(string, authorityStart, &quot;@&quot;);
-    unsigned hostnameStart;
-    if (userInfoTerminator == notFoundUnsigned || userInfoTerminator &gt; hostnameEnd)
-        hostnameStart = authorityStart;
-    else
-        hostnameStart = userInfoTerminator + 1;
-
-    startOffset = hostnameStart;
-    endOffset = hostnameEnd;
-    return true;
-}
-
-// Converts all hostnames found in the given input to punycode, preserving the
-// rest of the URL unchanged. The output will NOT be null-terminated.
-// Return value of false means error in encoding.
-static bool encodeHostnames(StringView string, UCharBuffer&amp; buffer)
-{
-    buffer.clear();
-
-    if (protocolIs(string, &quot;mailto&quot;)) {
-        Vector&lt;std::pair&lt;unsigned, unsigned&gt;&gt; hostnameRanges;
-        findHostnamesInMailToURL(string, hostnameRanges);
-        unsigned n = hostnameRanges.size();
-        unsigned p = 0;
-        for (unsigned i = 0; i &lt; n; ++i) {
-            const std::pair&lt;unsigned, unsigned&gt;&amp; r = hostnameRanges[i];
-            append(buffer, string.substring(p, r.first - p));
-            if (!appendEncodedHostname(buffer, string.substring(r.first, r.second - r.first)))
-                return false;
-            p = r.second;
-        }
-        // This will copy either everything after the last hostname, or the
-        // whole thing if there is no hostname.
-        append(buffer, string.substring(p));
-    } else {
-        unsigned hostStart, hostEnd;
-        if (findHostnameInHierarchicalURL(string, hostStart, hostEnd)) {
-            append(buffer, string.substring(0, hostStart)); // Before hostname.
-            if (!appendEncodedHostname(buffer, string.substring(hostStart, hostEnd - hostStart)))
-                return false;
-            append(buffer, string.substring(hostEnd)); // After hostname.
-        } else {
-            // No hostname to encode, return the input.
-            append(buffer, string);
-        }
-    }
-
-    return true;
-}
-
-// Return value of false means error in encoding.
-static bool encodeRelativeString(const String&amp; rel, const TextEncoding&amp; encoding, CharBuffer&amp; output)
-{
-    UCharBuffer s;
-    if (!encodeHostnames(rel, s))
-        return false;
-
-    TextEncoding pathEncoding(UTF8Encoding()); // Path is always encoded as UTF-8; other parts may depend on the scheme.
-
-    unsigned pathEnd = notFoundUnsigned;
-    if (encoding != pathEncoding &amp;&amp; encoding.isValid() &amp;&amp; !protocolIs(rel, &quot;mailto&quot;) &amp;&amp; !protocolIs(rel, &quot;data&quot;) &amp;&amp; !protocolIsJavaScript(rel)) {
-        // Find the first instance of either # or ?, keep pathEnd at -1 otherwise.
-        pathEnd = findFirstOf(StringView(s.data(), s.size()), 0, &quot;#?&quot;);
-    }
-
-    if (pathEnd == notFoundUnsigned) {
-        CString decoded = pathEncoding.encode(StringView(s.data(), s.size()), URLEncodedEntitiesForUnencodables);
-        output.resize(decoded.length());
-        memcpy(output.data(), decoded.data(), decoded.length());
-    } else {
-        CString pathDecoded = pathEncoding.encode(StringView(s.data(), pathEnd), URLEncodedEntitiesForUnencodables);
-        // Unencodable characters in URLs are represented by converting
-        // them to XML entities and escaping non-alphanumeric characters.
-        CString otherDecoded = encoding.encode(StringView(s.data() + pathEnd, s.size() - pathEnd), URLEncodedEntitiesForUnencodables);
-
-        output.resize(pathDecoded.length() + otherDecoded.length());
-        memcpy(output.data(), pathDecoded.data(), pathDecoded.length());
-        memcpy(output.data() + pathDecoded.length(), otherDecoded.data(), otherDecoded.length());
-    }
-    output.append('\0'); // null-terminate the output.
-
-    return true;
-}
-
-static String substituteBackslashes(const String&amp; string)
-{
-    size_t questionPos = string.find('?');
-    size_t hashPos = string.find('#');
-    unsigned pathEnd;
-
-    if (hashPos != notFound &amp;&amp; (questionPos == notFound || questionPos &gt; hashPos))
-        pathEnd = hashPos;
-    else if (questionPos != notFound)
-        pathEnd = questionPos;
-    else
-        pathEnd = string.length();
-
-    return string.left(pathEnd).replace('\\','/') + string.substring(pathEnd);
-}
-
</del><span class="cx"> bool URL::isHierarchical() const
</span><span class="cx"> {
</span><span class="cx">     if (!m_isValid)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformURLParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/URLParser.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/URLParser.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/URLParser.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1117,17 +1117,6 @@
</span><span class="cx">             ASSERT(allValuesEqual(parser.result(), m_url));
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-
-#if COMPARE_URLPARSERS
-    ASSERT(URLParser::enabled());
-    URLParser::setEnabled(false);
-    URL parsedWithOldParser = URL(base, input, encoding);
-    if (parsedWithOldParser != m_url)
-        WTFLogAlways(&quot;URLParser Differs: Input &lt;%s&gt; Base &lt;%s&gt; Encoding &lt;%s&gt;&quot;, input.utf8().data(), base.string().utf8().data(), encoding.name());
-    else
-        WTFLogAlways(&quot;URLParser Same: Input &lt;%s&gt; Base &lt;%s&gt; Encoding &lt;%s&gt;&quot;, input.utf8().data(), base.string().utf8().data(), encoding.name());
-    URLParser::setEnabled(true);
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename CharacterType&gt;
</span><span class="lines">@@ -2870,16 +2859,4 @@
</span><span class="cx">     // It should be able to be deduced from m_isValid and m_string.length() to save memory.
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool urlParserEnabled = true;
-
-void URLParser::setEnabled(bool enabled)
-{
-    urlParserEnabled = enabled;
-}
-
-bool URLParser::enabled()
-{
-    return urlParserEnabled;
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformURLParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/URLParser.h (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/URLParser.h        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/URLParser.h        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -43,9 +43,6 @@
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT static bool allValuesEqual(const URL&amp;, const URL&amp;);
</span><span class="cx">     WEBCORE_EXPORT static bool internalValuesConsistent(const URL&amp;);
</span><del>-
-    WEBCORE_EXPORT static bool enabled();
-    WEBCORE_EXPORT static void setEnabled(bool);
</del><span class="cx">     
</span><span class="cx">     typedef Vector&lt;WTF::KeyValuePair&lt;String, String&gt;&gt; URLEncodedForm;
</span><span class="cx">     WEBCORE_EXPORT static URLEncodedForm parseURLEncodedForm(StringView);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcfURLCFcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cf/URLCF.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cf/URLCF.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/cf/URLCF.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -47,11 +47,8 @@
</span><span class="cx">     // FIXME: Why is it OK to ignore base URL here?
</span><span class="cx">     CString urlBytes;
</span><span class="cx">     getURLBytes(url, urlBytes);
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(urlBytes.data());
-        *this = parser.result();
-    } else
-        parse(urlBytes.data());
</del><ins>+    URLParser parser(urlBytes.data());
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if !USE(FOUNDATION)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacURLMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/URLMac.mm (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/URLMac.mm        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/mac/URLMac.mm        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -43,11 +43,8 @@
</span><span class="cx">     // FIXME: Why is it OK to ignore base URL here?
</span><span class="cx">     CString urlBytes;
</span><span class="cx">     getURLBytes(reinterpret_cast&lt;CFURLRef&gt;(url), urlBytes);
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(urlBytes.data());
-        *this = parser.result();
-    } else
-        parse(urlBytes.data());
</del><ins>+    URLParser parser(urlBytes.data());
+    *this = parser.result();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> URL::operator NSURL *() const
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformsoupURLSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/soup/URLSoup.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/soup/URLSoup.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebCore/platform/soup/URLSoup.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -43,11 +43,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     GUniquePtr&lt;gchar&gt; urlString(soup_uri_to_string(soupURI, FALSE));
</span><del>-    if (URLParser::enabled()) {
-        URLParser parser(String::fromUTF8(urlString.get()));
-        *this = parser.result();
-    } else
-        parse(String::fromUTF8(urlString.get()));
</del><ins>+    URLParser parser(String::fromUTF8(urlString.get()));
+    *this = parser.result();
</ins><span class="cx"> 
</span><span class="cx">     if (!isValid())
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/ChangeLog        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2017-02-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Remove old URL parser
+        https://bugs.webkit.org/show_bug.cgi?id=168483
+
+        Reviewed by Tim Horton.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::initializeNetworkProcess):
+        * NetworkProcess/NetworkProcessCreationParameters.cpp:
+        (WebKit::NetworkProcessCreationParameters::encode):
+        (WebKit::NetworkProcessCreationParameters::decode):
+        * NetworkProcess/NetworkProcessCreationParameters.h:
+        * PlatformEfl.cmake:
+        * PlatformGTK.cmake:
+        * PlatformMac.cmake:
+        * Shared/Cocoa/WebKit2InitializeCocoa.mm: Removed.
+        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
+        (WebKit::XPCServiceInitializer):
+        * Shared/WebKit2Initialize.cpp:
+        (WebKit::InitializeWebKit2):
+        * Shared/WebKit2Initialize.h:
+        (): Deleted.
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * Shared/efl/WebKit2InitializeEFL.cpp: Removed.
+        * Shared/gtk/WebKit2InitializeGTK.cpp: Removed.
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::ensureNetworkProcess):
+        (WebKit::WebProcessPool::createNewWebProcess):
+        * WebKit2.xcodeproj/project.pbxproj:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::initializeWebProcess):
+
</ins><span class="cx"> 2017-02-16  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] Add additional test infrastructure and unit tests for data interaction
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -201,8 +201,6 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkProcess::initializeNetworkProcess(NetworkProcessCreationParameters&amp;&amp; parameters)
</span><span class="cx"> {
</span><del>-    URLParser::setEnabled(parameters.urlParserEnabled);
-
</del><span class="cx">     platformInitializeNetworkProcess(parameters);
</span><span class="cx"> 
</span><span class="cx">     WTF::setCurrentThreadIsUserInitiated();
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcessCreationParameterscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -67,7 +67,6 @@
</span><span class="cx"> #endif
</span><span class="cx">     encoder &lt;&lt; shouldSuppressMemoryPressureHandler;
</span><span class="cx">     encoder &lt;&lt; shouldUseTestingNetworkSession;
</span><del>-    encoder &lt;&lt; urlParserEnabled;
</del><span class="cx">     encoder &lt;&lt; loadThrottleLatency;
</span><span class="cx">     encoder &lt;&lt; urlSchemesRegisteredForCustomProtocols;
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="lines">@@ -147,8 +146,6 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(result.shouldUseTestingNetworkSession))
</span><span class="cx">         return false;
</span><del>-    if (!decoder.decode(result.urlParserEnabled))
-        return false;
</del><span class="cx">     if (!decoder.decode(result.loadThrottleLatency))
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(result.urlSchemesRegisteredForCustomProtocols))
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcessCreationParametersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.h (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.h        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcessCreationParameters.h        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -73,7 +73,6 @@
</span><span class="cx"> #endif
</span><span class="cx">     bool shouldSuppressMemoryPressureHandler { false };
</span><span class="cx">     bool shouldUseTestingNetworkSession;
</span><del>-    bool urlParserEnabled { false };
</del><span class="cx">     std::chrono::milliseconds loadThrottleLatency { 0ms };
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; urlSchemesRegisteredForCustomProtocols;
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformEflcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformEfl.cmake (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformEfl.cmake        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/PlatformEfl.cmake        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -50,7 +50,6 @@
</span><span class="cx">     Shared/efl/NativeWebWheelEventEfl.cpp
</span><span class="cx">     Shared/efl/ProcessExecutablePathEfl.cpp
</span><span class="cx">     Shared/efl/WebEventFactory.cpp
</span><del>-    Shared/efl/WebKit2InitializeEFL.cpp
</del><span class="cx"> 
</span><span class="cx">     Shared/linux/WebMemorySamplerLinux.cpp
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformGTK.cmake (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformGTK.cmake        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/PlatformGTK.cmake        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -74,7 +74,6 @@
</span><span class="cx">     Shared/gtk/ProcessExecutablePathGtk.cpp
</span><span class="cx">     Shared/gtk/WebContextMenuItemGtk.cpp
</span><span class="cx">     Shared/gtk/WebEventFactory.cpp
</span><del>-    Shared/gtk/WebKit2InitializeGTK.cpp
</del><span class="cx">     Shared/gtk/WebSelectionData.cpp
</span><span class="cx"> 
</span><span class="cx">     Shared/linux/WebMemorySamplerLinux.cpp
</span><span class="lines">@@ -1116,7 +1115,6 @@
</span><span class="cx">         Shared/gtk/NativeWebWheelEventGtk.cpp
</span><span class="cx">         Shared/gtk/ProcessExecutablePathGtk.cpp
</span><span class="cx">         Shared/gtk/WebEventFactory.cpp
</span><del>-        Shared/gtk/WebKit2InitializeGTK.cpp
</del><span class="cx"> 
</span><span class="cx">         Shared/soup/WebCoreArgumentCodersSoup.cpp
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformMaccmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformMac.cmake (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformMac.cmake        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/PlatformMac.cmake        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -102,7 +102,6 @@
</span><span class="cx">     Shared/Cocoa/CompletionHandlerCallChecker.mm
</span><span class="cx">     Shared/Cocoa/DataDetectionResult.mm
</span><span class="cx">     Shared/Cocoa/LoadParametersCocoa.mm
</span><del>-    Shared/Cocoa/WebKit2InitializeCocoa.mm
</del><span class="cx">     Shared/Cocoa/WKNSArray.mm
</span><span class="cx">     Shared/Cocoa/WKNSData.mm
</span><span class="cx">     Shared/Cocoa/WKNSDictionary.mm
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCocoaWebKit2InitializeCocoamm"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/Cocoa/WebKit2InitializeCocoa.mm (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Cocoa/WebKit2InitializeCocoa.mm        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/Cocoa/WebKit2InitializeCocoa.mm        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,50 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import &quot;config.h&quot;
-#import &quot;WebKit2Initialize.h&quot;
-
-#import &lt;WebCore/RuntimeApplicationChecks.h&gt;
-#import &lt;WebCore/URLParser.h&gt;
-
-using namespace WebCore;
-
-namespace WebKit {
-
-void platformInitializeWebKit2(ProcessType processType)
-{
-    static dispatch_once_t initOnce;
-    
-    // We don't want to use NSUserDefaults in the child processes.
-    if (processType == UIProcess) {
-        dispatch_once(&amp;initOnce, ^ {
-            NSString *key = @&quot;URLParserEnabled&quot;;
-            if ([[NSUserDefaults standardUserDefaults] objectForKey:key])
-                URLParser::setEnabled([[NSUserDefaults standardUserDefaults] boolForKey:key]);
-        });
-    }
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebKit2SharedEntryPointUtilitiesmacXPCServiceXPCServiceEntryPointh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     // so ensure that we have an outstanding transaction here.
</span><span class="cx">     xpc_transaction_begin();
</span><span class="cx"> 
</span><del>-    InitializeWebKit2(ChildProcess);
</del><ins>+    InitializeWebKit2();
</ins><span class="cx"> 
</span><span class="cx">     if (!delegate.checkEntitlements())
</span><span class="cx">         exit(EXIT_FAILURE);
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebKit2Initializecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebKit2Initialize.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebKit2Initialize.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/WebKit2Initialize.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -41,12 +41,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-void InitializeWebKit2(ProcessType processType)
</del><ins>+void InitializeWebKit2()
</ins><span class="cx"> {
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     InitWebCoreSystemInterface();
</span><span class="cx"> #endif
</span><del>-    platformInitializeWebKit2(processType);
</del><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     InitWebCoreThreadSystemInterface();
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebKit2Initializeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebKit2Initialize.h (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebKit2Initialize.h        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/WebKit2Initialize.h        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -27,12 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-enum ProcessType {
-    ChildProcess,
-    UIProcess,
-};
</del><ins>+void InitializeWebKit2();
</ins><span class="cx"> 
</span><del>-void InitializeWebKit2(ProcessType = UIProcess);
-void platformInitializeWebKit2(ProcessType);
-
</del><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebProcessCreationParameterscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -84,7 +84,6 @@
</span><span class="cx">     encoder &lt;&lt; shouldSuppressMemoryPressureHandler;
</span><span class="cx">     encoder &lt;&lt; shouldUseFontSmoothing;
</span><span class="cx">     encoder &lt;&lt; resourceLoadStatisticsEnabled;
</span><del>-    encoder &lt;&lt; urlParserEnabled;
</del><span class="cx">     encoder &lt;&lt; fontWhitelist;
</span><span class="cx">     encoder &lt;&lt; iconDatabaseEnabled;
</span><span class="cx">     encoder &lt;&lt; terminationTimeout;
</span><span class="lines">@@ -219,8 +218,6 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(parameters.resourceLoadStatisticsEnabled))
</span><span class="cx">         return false;
</span><del>-    if (!decoder.decode(parameters.urlParserEnabled))
-        return false;
</del><span class="cx">     if (!decoder.decode(parameters.fontWhitelist))
</span><span class="cx">         return false;
</span><span class="cx">     if (!decoder.decode(parameters.iconDatabaseEnabled))
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebProcessCreationParametersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -113,7 +113,6 @@
</span><span class="cx">     bool shouldSuppressMemoryPressureHandler { false };
</span><span class="cx">     bool shouldUseFontSmoothing { true };
</span><span class="cx">     bool resourceLoadStatisticsEnabled { false };
</span><del>-    bool urlParserEnabled { false };
</del><span class="cx">     bool iconDatabaseEnabled { false };
</span><span class="cx">     bool fullKeyboardAccessEnabled { false };
</span><span class="cx">     bool memoryCacheDisabled { false };
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedeflWebKit2InitializeEFLcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/efl/WebKit2InitializeEFL.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/efl/WebKit2InitializeEFL.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/efl/WebKit2InitializeEFL.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,35 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include &quot;config.h&quot;
-#include &quot;WebKit2Initialize.h&quot;
-
-namespace WebKit {
-
-void platformInitializeWebKit2(ProcessType)
-{
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebKit2SharedgtkWebKit2InitializeGTKcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/gtk/WebKit2InitializeGTK.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/gtk/WebKit2InitializeGTK.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/Shared/gtk/WebKit2InitializeGTK.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,35 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include &quot;config.h&quot;
-#include &quot;WebKit2Initialize.h&quot;
-
-namespace WebKit {
-
-void platformInitializeWebKit2(ProcessType)
-{
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessPoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -381,8 +381,6 @@
</span><span class="cx"> 
</span><span class="cx">     parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession;
</span><span class="cx"> 
</span><del>-    parameters.urlParserEnabled = URLParser::enabled();
-    
</del><span class="cx">     // Add any platform specific parameters
</span><span class="cx">     platformInitializeNetworkProcess(parameters);
</span><span class="cx"> 
</span><span class="lines">@@ -549,8 +547,6 @@
</span><span class="cx"> 
</span><span class="cx">     WebProcessCreationParameters parameters;
</span><span class="cx"> 
</span><del>-    parameters.urlParserEnabled = URLParser::enabled();
-    
</del><span class="cx">     parameters.injectedBundlePath = m_resolvedPaths.injectedBundlePath;
</span><span class="cx">     if (!parameters.injectedBundlePath.isEmpty())
</span><span class="cx">         SandboxExtension::createHandleWithoutResolvingPath(parameters.injectedBundlePath, SandboxExtension::ReadOnly, parameters.injectedBundlePathExtensionHandle);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1130,7 +1130,6 @@
</span><span class="cx">                 5C20CBA01BB1ECD800895BB1 /* NetworkSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C20CB9E1BB0DD1800895BB1 /* NetworkSession.h */; };
</span><span class="cx">                 5C298DA01C3DF02100470AFE /* PendingDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */; };
</span><span class="cx">                 5C7706741D1138380012700F /* WebSocketProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C7706731D111D8B0012700F /* WebSocketProvider.cpp */; };
</span><del>-                5C79439B1D762D62003102D4 /* WebKit2InitializeCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */; };
</del><span class="cx">                 5C85C7881C3F23CE0061A4FA /* PendingDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */; };
</span><span class="cx">                 5C9E56821DF7F1AB00C9EE33 /* WKWebsitePolicies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C9E56801DF7F05500C9EE33 /* WKWebsitePolicies.cpp */; };
</span><span class="cx">                 5C9E56831DF7F1B300C9EE33 /* WKWebsitePolicies.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9E56811DF7F05500C9EE33 /* WKWebsitePolicies.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -3313,7 +3312,6 @@
</span><span class="cx">                 5C20CB9E1BB0DD1800895BB1 /* NetworkSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSession.h; path = NetworkProcess/NetworkSession.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PendingDownload.h; path = NetworkProcess/Downloads/PendingDownload.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C7706731D111D8B0012700F /* WebSocketProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketProvider.cpp; path = Network/WebSocketProvider.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKit2InitializeCocoa.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 5C7C88DC1D0F41A0009D2F6D /* WebSocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketProvider.h; path = Network/WebSocketProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PendingDownload.cpp; path = NetworkProcess/Downloads/PendingDownload.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsitePolicies.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -5536,7 +5534,6 @@
</span><span class="cx">                                 C55F916D1C595E440029E92D /* DataDetectionResult.mm */,
</span><span class="cx">                                 2D1087621D2C641B00B85F82 /* LoadParametersCocoa.mm */,
</span><span class="cx">                                 1AB1F78E1D1B34A6007C9BD1 /* WebCoreArgumentCodersCocoa.mm */,
</span><del>-                                5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */,
</del><span class="cx">                                 37C4C0921814B3AF003688B9 /* WKNSArray.h */,
</span><span class="cx">                                 37C4C0911814B3AF003688B9 /* WKNSArray.mm */,
</span><span class="cx">                                 373CEAD4185417AE008C363D /* WKNSData.h */,
</span><span class="lines">@@ -9908,7 +9905,6 @@
</span><span class="cx">                                 C0337DD3127A2A0E008FF4F4 /* WebKeyboardEvent.cpp in Sources */,
</span><span class="cx">                                 1A6280F31919982A006AD9F9 /* WebKit.m in Sources */,
</span><span class="cx">                                 BC9BA5041697C45300E44616 /* WebKit2Initialize.cpp in Sources */,
</span><del>-                                5C79439B1D762D62003102D4 /* WebKit2InitializeCocoa.mm in Sources */,
</del><span class="cx">                                 51FB08FF1639DE1A00EC324A /* WebLoaderStrategy.cpp in Sources */,
</span><span class="cx">                                 CD003A5219D49B5D005ABCE0 /* WebMediaKeyStorageManager.cpp in Sources */,
</span><span class="cx">                                 C98C48A51B6FD4C300145103 /* WebMediaSessionFocusManager.cpp in Sources */,
</span><span class="lines">@@ -9996,7 +9992,7 @@
</span><span class="cx">                                 3760881E150413E900FC82C7 /* WebRenderObject.cpp in Sources */,
</span><span class="cx">                                 510AFFB916542048001BA05E /* WebResourceLoader.cpp in Sources */,
</span><span class="cx">                                 51F060E11654318500F3281B /* WebResourceLoaderMessageReceiver.cpp in Sources */,
</span><del>-                                6BE969A21E43B8A4008B7483 /* WebResourceLoadStatisticsManager.cpp in Sources */,
</del><ins>+                                6BE969A21E43B8A4008B7483 /* WebResourceLoadStatisticsManager.cpp in Sources */,
</ins><span class="cx">                                 51F060E11654318500F3281C /* WebRTCSocketMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 51F060E11654318500F3282C /* WebRTCResolverMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 51F060E11654318500F3281D /* NetworkRTCSocketMessageReceiver.cpp in Sources */,
</span><span class="lines">@@ -10187,7 +10183,7 @@
</span><span class="cx">                                 37948408150C4B9700E52CE9 /* WKRenderLayer.cpp in Sources */,
</span><span class="cx">                                 37608822150414F700FC82C7 /* WKRenderObject.cpp in Sources */,
</span><span class="cx">                                 3336763A130C99DC006C9DE2 /* WKResourceCacheManager.cpp in Sources */,
</span><del>-                                6BE9699E1E43B41D008B7483 /* WKResourceLoadStatisticsManager.cpp in Sources */,
</del><ins>+                                6BE9699E1E43B41D008B7483 /* WKResourceLoadStatisticsManager.cpp in Sources */,
</ins><span class="cx">                                 1A7E377818E4A4FE003D0FFF /* WKScriptMessage.mm in Sources */,
</span><span class="cx">                                 0FCB4E5518BBE044000FCFC9 /* WKScrollView.mm in Sources */,
</span><span class="cx">                                 51CD1C661B34B9DC00142CA5 /* WKSecurityOrigin.mm in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -239,9 +239,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebProcess::initializeWebProcess(WebProcessCreationParameters&amp;&amp; parameters)
</span><del>-{
-    URLParser::setEnabled(parameters.urlParserEnabled);
-    
</del><ins>+{    
</ins><span class="cx">     ASSERT(m_pageMap.isEmpty());
</span><span class="cx"> 
</span><span class="cx"> #if OS(LINUX)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Tools/ChangeLog        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-02-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Remove old URL parser
+        https://bugs.webkit.org/show_bug.cgi?id=168483
+
+        Reviewed by Tim Horton.
+
+        * TestWebKitAPI/Tests/WebCore/URLParser.cpp:
+        (TestWebKitAPI::checkURL):
+        (TestWebKitAPI::checkRelativeURL):
+        (TestWebKitAPI::checkURLDifferences):
+        (TestWebKitAPI::checkRelativeURLDifferences):
+
</ins><span class="cx"> 2017-02-16  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] Add additional test infrastructure and unit tests for data interaction
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebCoreURLParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp (212507 => 212508)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp        2017-02-17 01:01:36 UTC (rev 212507)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp        2017-02-17 01:10:35 UTC (rev 212508)
</span><span class="lines">@@ -88,12 +88,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void checkURL(const String&amp; urlString, const ExpectedParts&amp; parts, TestTabs testTabs = TestTabs::Yes)
</span><span class="cx"> {
</span><del>-    bool wasEnabled = URLParser::enabled();
-    URLParser::setEnabled(true);
</del><span class="cx">     auto url = URL(URL(), urlString);
</span><del>-    URLParser::setEnabled(false);
-    auto oldURL = URL(URL(), urlString);
-    URLParser::setEnabled(wasEnabled);
</del><span class="cx">     
</span><span class="cx">     EXPECT_TRUE(eq(parts.protocol, url.protocol().toString()));
</span><span class="cx">     EXPECT_TRUE(eq(parts.user, url.user()));
</span><span class="lines">@@ -104,20 +99,8 @@
</span><span class="cx">     EXPECT_TRUE(eq(parts.query, url.query()));
</span><span class="cx">     EXPECT_TRUE(eq(parts.fragment, url.fragmentIdentifier()));
</span><span class="cx">     EXPECT_TRUE(eq(parts.string, url.string()));
</span><del>-    
-    EXPECT_TRUE(eq(parts.protocol, oldURL.protocol().toString()));
-    EXPECT_TRUE(eq(parts.user, oldURL.user()));
-    EXPECT_TRUE(eq(parts.password, oldURL.pass()));
-    EXPECT_TRUE(eq(parts.host, oldURL.host()));
-    EXPECT_EQ(parts.port, oldURL.port().value_or(0));
-    EXPECT_TRUE(eq(parts.path, oldURL.path()));
-    EXPECT_TRUE(eq(parts.query, oldURL.query()));
-    EXPECT_TRUE(eq(parts.fragment, oldURL.fragmentIdentifier()));
-    EXPECT_TRUE(eq(parts.string, oldURL.string()));
-    
-    EXPECT_TRUE(URLParser::allValuesEqual(url, oldURL));
</del><ins>+
</ins><span class="cx">     EXPECT_TRUE(URLParser::internalValuesConsistent(url));
</span><del>-    EXPECT_TRUE(URLParser::internalValuesConsistent(oldURL));
</del><span class="cx"> 
</span><span class="cx">     if (testTabs == TestTabs::No)
</span><span class="cx">         return;
</span><span class="lines">@@ -132,12 +115,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void checkRelativeURL(const String&amp; urlString, const String&amp; baseURLString, const ExpectedParts&amp; parts, TestTabs testTabs = TestTabs::Yes)
</span><span class="cx"> {
</span><del>-    bool wasEnabled = URLParser::enabled();
-    URLParser::setEnabled(true);
</del><span class="cx">     auto url = URL(URL(URL(), baseURLString), urlString);
</span><del>-    URLParser::setEnabled(false);
-    auto oldURL = URL(URL(URL(), baseURLString), urlString);
-    URLParser::setEnabled(wasEnabled);
</del><span class="cx">     
</span><span class="cx">     EXPECT_TRUE(eq(parts.protocol, url.protocol().toString()));
</span><span class="cx">     EXPECT_TRUE(eq(parts.user, url.user()));
</span><span class="lines">@@ -149,19 +127,7 @@
</span><span class="cx">     EXPECT_TRUE(eq(parts.fragment, url.fragmentIdentifier()));
</span><span class="cx">     EXPECT_TRUE(eq(parts.string, url.string()));
</span><span class="cx">     
</span><del>-    EXPECT_TRUE(eq(parts.protocol, oldURL.protocol().toString()));
-    EXPECT_TRUE(eq(parts.user, oldURL.user()));
-    EXPECT_TRUE(eq(parts.password, oldURL.pass()));
-    EXPECT_TRUE(eq(parts.host, oldURL.host()));
-    EXPECT_EQ(parts.port, oldURL.port().value_or(0));
-    EXPECT_TRUE(eq(parts.path, oldURL.path()));
-    EXPECT_TRUE(eq(parts.query, oldURL.query()));
-    EXPECT_TRUE(eq(parts.fragment, oldURL.fragmentIdentifier()));
-    EXPECT_TRUE(eq(parts.string, oldURL.string()));
-    
-    EXPECT_TRUE(URLParser::allValuesEqual(url, oldURL));
</del><span class="cx">     EXPECT_TRUE(URLParser::internalValuesConsistent(url));
</span><del>-    EXPECT_TRUE(URLParser::internalValuesConsistent(oldURL));
</del><span class="cx">     
</span><span class="cx">     if (testTabs == TestTabs::No)
</span><span class="cx">         return;
</span><span class="lines">@@ -177,12 +143,8 @@
</span><span class="cx"> 
</span><span class="cx"> static void checkURLDifferences(const String&amp; urlString, const ExpectedParts&amp; partsNew, const ExpectedParts&amp; partsOld, TestTabs testTabs = TestTabs::Yes)
</span><span class="cx"> {
</span><del>-    bool wasEnabled = URLParser::enabled();
-    URLParser::setEnabled(true);
</del><ins>+    UNUSED_PARAM(partsOld); // FIXME: Remove all the old expected parts.
</ins><span class="cx">     auto url = URL(URL(), urlString);
</span><del>-    URLParser::setEnabled(false);
-    auto oldURL = URL(URL(), urlString);
-    URLParser::setEnabled(wasEnabled);
</del><span class="cx">     
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.protocol, url.protocol().toString()));
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.user, url.user()));
</span><span class="lines">@@ -194,19 +156,7 @@
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.fragment, url.fragmentIdentifier()));
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.string, url.string()));
</span><span class="cx">     
</span><del>-    EXPECT_TRUE(eq(partsOld.protocol, oldURL.protocol().toString()));
-    EXPECT_TRUE(eq(partsOld.user, oldURL.user()));
-    EXPECT_TRUE(eq(partsOld.password, oldURL.pass()));
-    EXPECT_TRUE(eq(partsOld.host, oldURL.host()));
-    EXPECT_EQ(partsOld.port, oldURL.port().value_or(0));
-    EXPECT_TRUE(eq(partsOld.path, oldURL.path()));
-    EXPECT_TRUE(eq(partsOld.query, oldURL.query()));
-    EXPECT_TRUE(eq(partsOld.fragment, oldURL.fragmentIdentifier()));
-    EXPECT_TRUE(eq(partsOld.string, oldURL.string()));
-    
-    EXPECT_FALSE(URLParser::allValuesEqual(url, oldURL));
</del><span class="cx">     EXPECT_TRUE(URLParser::internalValuesConsistent(url));
</span><del>-    EXPECT_TRUE(URLParser::internalValuesConsistent(oldURL));
</del><span class="cx">     
</span><span class="cx">     if (testTabs == TestTabs::No)
</span><span class="cx">         return;
</span><span class="lines">@@ -222,12 +172,8 @@
</span><span class="cx"> 
</span><span class="cx"> static void checkRelativeURLDifferences(const String&amp; urlString, const String&amp; baseURLString, const ExpectedParts&amp; partsNew, const ExpectedParts&amp; partsOld, TestTabs testTabs = TestTabs::Yes)
</span><span class="cx"> {
</span><del>-    bool wasEnabled = URLParser::enabled();
-    URLParser::setEnabled(true);
</del><ins>+    UNUSED_PARAM(partsOld); // FIXME: Remove all the old expected parts.
</ins><span class="cx">     auto url = URL(URL(URL(), baseURLString), urlString);
</span><del>-    URLParser::setEnabled(false);
-    auto oldURL = URL(URL(URL(), baseURLString), urlString);
-    URLParser::setEnabled(wasEnabled);
</del><span class="cx">     
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.protocol, url.protocol().toString()));
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.user, url.user()));
</span><span class="lines">@@ -239,19 +185,7 @@
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.fragment, url.fragmentIdentifier()));
</span><span class="cx">     EXPECT_TRUE(eq(partsNew.string, url.string()));
</span><span class="cx">     
</span><del>-    EXPECT_TRUE(eq(partsOld.protocol, oldURL.protocol().toString()));
-    EXPECT_TRUE(eq(partsOld.user, oldURL.user()));
-    EXPECT_TRUE(eq(partsOld.password, oldURL.pass()));
-    EXPECT_TRUE(eq(partsOld.host, oldURL.host()));
-    EXPECT_EQ(partsOld.port, oldURL.port().value_or(0));
-    EXPECT_TRUE(eq(partsOld.path, oldURL.path()));
-    EXPECT_TRUE(eq(partsOld.query, oldURL.query()));
-    EXPECT_TRUE(eq(partsOld.fragment, oldURL.fragmentIdentifier()));
-    EXPECT_TRUE(eq(partsOld.string, oldURL.string()));
-    
-    EXPECT_FALSE(URLParser::allValuesEqual(url, oldURL));
</del><span class="cx">     EXPECT_TRUE(URLParser::internalValuesConsistent(url));
</span><del>-    EXPECT_TRUE(URLParser::internalValuesConsistent(oldURL));
</del><span class="cx">     
</span><span class="cx">     if (testTabs == TestTabs::No)
</span><span class="cx">         return;
</span></span></pre>
</div>
</div>

</body>
</html>