<!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 <achristensen@webkit.org>
+
+ 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 <andersca@apple.com>
</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 << 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& rel, const TextEncoding&, CharBuffer& ouput);
-static String substituteBackslashes(const String&);
-
-static inline bool isSchemeFirstChar(char c) { return characterClassTable[static_cast<unsigned char>(c)] & SchemeFirstChar; }
</del><span class="cx"> static inline bool isSchemeFirstChar(UChar c) { return c <= 0xff && (characterClassTable[c] & SchemeFirstChar); }
</span><del>-static inline bool isSchemeChar(char c) { return characterClassTable[static_cast<unsigned char>(c)] & SchemeChar; }
</del><span class="cx"> static inline bool isSchemeChar(UChar c) { return c <= 0xff && (characterClassTable[c] & SchemeChar); }
</span><del>-static inline bool isUserInfoChar(unsigned char c) { return characterClassTable[c] & UserInfoChar; }
-static inline bool isHostnameChar(unsigned char c) { return characterClassTable[c] & HostnameChar; }
-static inline bool isIPv6Char(unsigned char c) { return characterClassTable[c] & IPv6Char; }
-static inline bool isPathSegmentEndChar(char c) { return characterClassTable[static_cast<unsigned char>(c)] & PathSegmentEndChar; }
-static inline bool isPathSegmentEndChar(UChar c) { return c <= 0xff && (characterClassTable[c] & PathSegmentEndChar); }
</del><span class="cx"> static inline bool isBadChar(unsigned char c) { return characterClassTable[c] & BadChar; }
</span><span class="cx"> static inline bool isTabNewline(UChar c) { return c <= 0xff && (characterClassTable[c] & 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& base, const char* rel, size_t len, CharBuffer& 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<unsigned>::max();
-static unsigned findFirstOf(StringView string, unsigned startPosition, const char* target)
-{
- unsigned length = string.length();
- for (unsigned i = startPosition; i < length; ++i) {
- for (unsigned j = 0; target[j]; ++j) {
- if (string[i] == target[j])
- return i;
- }
- }
- return notFoundUnsigned;
-}
-
-static inline void checkEncodedString(const String& url)
-{
- ASSERT_UNUSED(url, url.containsOnlyASCII());
- ASSERT_UNUSED(url, url.isEmpty() || isSchemeFirstChar(url[0]));
-}
-
</del><span class="cx"> inline bool URL::protocolIs(const String& 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& 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& base, const String& 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& base, const String& relative, const TextEncoding& 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 <= ' ';
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void URL::init(const URL& base, const String& relative, const TextEncoding& 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 && !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('\\') && !(protocolIsJavaScript(rel) || protocolIs(rel, "data")))
- 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 "leftmost, longest"
- // 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] != '/' && equalIgnoringASCIICase(base.protocol(), StringView(reinterpret_cast<LChar*>(str), p - str)) && base.isHierarchical())
- str = p + 1;
- else
- absolute = true;
- }
- }
-
- CharBuffer parseBuffer;
-
- if (absolute) {
- parse(str, &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(), &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(), &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(), &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(), &relative);
- } else {
- // abs-path
- appendASCII(base.m_string.left(base.m_portEnd), str, len, parseBuffer);
- parse(parseBuffer.data(), &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 < 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 > baseStringStart && baseStringEnd[-1] != '/')
- baseStringEnd--;
-
- if (baseStringEnd == baseStringStart) {
- // no path in base, add a path separator if necessary
- if (base.m_schemeEnd + 1 != base.m_pathEnd && *str && *str != '?' && *str != '#')
- *bufferPos++ = '/';
- } else {
- bufferPos += copyPathRemovingDots(bufferPos, baseStringStart, 0, baseStringEnd - baseStringStart);
- }
-
- const char* relStringStart = str;
- const char* relStringPos = relStringStart;
-
- while (*relStringPos && *relStringPos != '?' && *relStringPos != '#') {
- if (relStringPos[0] == '.' && bufferPos[-1] == '/') {
- if (isPathSegmentEndChar(relStringPos[1])) {
- // skip over "." segment
- relStringPos += 1;
- if (relStringPos[0] == '/')
- relStringPos++;
- continue;
- } else if (relStringPos[1] == '.' && isPathSegmentEndChar(relStringPos[2])) {
- // skip over ".." segment and rewind the last segment
- // the RFC leaves it up to the app to decide what to do with excess
- // ".." segments - we choose to drop them since some web content
- // relies on this.
- relStringPos += 2;
- if (relStringPos[0] == '/')
- relStringPos++;
- if (bufferPos > bufferPathStart + 1)
- bufferPos--;
- while (bufferPos > bufferPathStart + 1 && 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 <= bufferSize);
- strncpy(bufferPos, relStringPos, remainingBufferSize);
- bufferPos[remainingBufferSize - 1] = '\0';
-
- parse(parseBuffer.data(), &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, ":", m_string));
- *this = parser.result();
- } else
- parse(newProtocol + ':' + m_string);
</del><ins>+ URLParser parser(makeString(newProtocol, ":", 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("//");
</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 ? ":" : ""), String::number(i), m_string.substring(m_portEnd)));
- *this = parser.result();
- } else
- parse(m_string.left(portStart) + (colonNeeded ? ":" : "") + String::number(i) + m_string.substring(m_portEnd));
</del><ins>+ URLParser parser(makeString(m_string.left(portStart), (colonNeeded ? ":" : ""), 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& 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& 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 && 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 && end != m_hostEnd && 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 && 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 && end != m_hostEnd && 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) + "#" + 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] != '?') && !query.isNull()) {
</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"> } 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 = "/" + 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& 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*& buffer, const char* strStart, size_t length)
-{
- char* p = buffer;
-
- const char* str = strStart;
- const char* strEnd = strStart + length;
- while (str < strEnd) {
- unsigned char c = *str++;
- if (isBadChar(c)) {
- if (c == '%' || c == '?')
- *p++ = c;
- else if (c != 0x09 && c != 0x0a && c != 0x0d)
- appendEscapedChar(p, c);
- } else
- *p++ = c;
- }
-
- buffer = p;
-}
-
-static void escapeAndAppendNonHierarchicalPart(char*& buffer, const char* strStart, size_t length)
-{
- char* p = buffer;
-
- const char* str = strStart;
- const char* strEnd = strStart + length;
- while (str < 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 < 0x20 || c >= 127) {
- appendEscapedChar(p, c);
- continue;
- }
- *p++ = c;
- }
-
- buffer = p;
-}
-
-// copy a path, accounting for "." and ".." 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 < baseStringEnd) {
- if (baseStringPos[0] == '.' && dst[-1] == '/') {
- if (baseStringPos[1] == '/' || baseStringPos + 1 == baseStringEnd) {
- // skip over "." segment
- baseStringPos += 2;
- continue;
- } else if (baseStringPos[1] == '.' && (baseStringPos[2] == '/' ||
- baseStringPos + 2 == baseStringEnd)) {
- // skip over ".." segment and rewind the last segment
- // the RFC leaves it up to the app to decide what to do with excess
- // ".." segments - we choose to drop them since some web content
- // relies on this.
- baseStringPos += 3;
- if (dst > bufferPathStart + 1)
- dst--;
- while (dst > bufferPathStart && 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<const unsigned char*>(str);
- if (!*p)
- return false;
- unsigned char pc = *p;
- while (unsigned char c = *++p) {
- if (c == '.' && (pc == '/' || pc == '.'))
- return true;
- pc = c;
- }
- return false;
-}
-
-void URL::parse(const String& 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(), &string);
-}
-
-static inline bool cannotBeABaseURL(const URL& 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("ftp") || url.protocolIs("file") || url.protocolIs("gopher") || url.protocolIs("http") || url.protocolIs("https") || url.protocolIs("ws") || url.protocolIs("wss"))
- 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(":");
- unsigned start = hostStart();
- if (start < m_hostEnd) {
- urlBuilder.appendLiteral("//");
- if (hasUsername()) {
- urlBuilder.append(m_string, m_userStart, m_userEnd - m_userStart);
- unsigned passwordStart = m_userEnd + 1;
- if (hasPassword()) {
- urlBuilder.appendLiteral(":");
- urlBuilder.append(m_string, passwordStart, m_passwordEnd - passwordStart);
- }
- urlBuilder.appendLiteral("@");
- }
- // 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(":");
- urlBuilder.appendNumber(port().value());
- }
- } else if (protocolIs("file"))
- urlBuilder.appendLiteral("//");
- if (WebCore::cannotBeABaseURL(*this))
- urlBuilder.append(m_string, m_portEnd, m_pathEnd - m_portEnd);
- else {
- urlBuilder.appendLiteral("/");
- if (m_pathEnd > m_portEnd) {
- unsigned pathStart = m_portEnd + 1;
- urlBuilder.append(m_string, pathStart, m_pathEnd - pathStart);
- }
- }
- if (hasQuery()) {
- urlBuilder.appendLiteral("?");
- urlBuilder.append(m_string, m_pathEnd + 1, m_queryEnd - (m_pathEnd + 1));
- }
- if (!omitFragment && hasFragment()) {
- urlBuilder.appendLiteral("#");
- 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 && 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) && 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) && equal(port, portLength, httpPort);
- case 5:
- return equal(scheme, httpsScheme) && equal(port, portLength, httpsPort);
- case 6:
- return equal(scheme, gopherScheme) && equal(port, portLength, gopherPort);
- }
- return false;
-}
-
-static inline bool hostPortIsEmptyButCredentialsArePresent(unsigned hostStart, unsigned portEnd, char userinfoEndChar)
-{
- return userinfoEndChar == '@' && 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 && url[schemeEnd + 2] == '/';
-
- bool isFile = schemeEnd == 4
- && isASCIIAlphaCaselessEqual(url[0], 'f')
- && isASCIIAlphaCaselessEqual(url[1], 'i')
- && isASCIIAlphaCaselessEqual(url[2], 'l')
- && isASCIIAlphaCaselessEqual(url[3], 'e');
-
- m_protocolIsInHTTPFamily = isASCIIAlphaCaselessEqual(url[0], 'h')
- && isASCIIAlphaCaselessEqual(url[1], 't')
- && isASCIIAlphaCaselessEqual(url[2], 't')
- && isASCIIAlphaCaselessEqual(url[3], 'p')
- && (url[4] == ':' || (isASCIIAlphaCaselessEqual(url[4], 's') && url[5] == ':'));
-
- if ((hierarchical && 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] == ':' && 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 && !m_protocolIsInHTTPFamily && !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] && url[pathEnd] != '?' && url[pathEnd] != '#')
- pathEnd++;
-
- unsigned queryStart = pathEnd;
- unsigned queryEnd = queryStart;
- if (url[queryStart] == '?') {
- while (url[queryEnd] && 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<unsigned, RecordOverflow> 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<char, 4096> 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 < schemeEndPtr)
- *p++ = toASCIILower(*strPtr++);
- } else {
- while (strPtr < schemeEndPtr)
- *p++ = *strPtr++;
- }
-#else
- while (strPtr < schemeEndPtr)
- *p++ = toASCIILower(*strPtr++);
-#endif
- m_schemeEnd = p - buffer.data();
-
- bool hostIsLocalHost = portEnd - userStart == 9
- && isASCIIAlphaCaselessEqual(url[userStart], 'l')
- && isASCIIAlphaCaselessEqual(url[userStart+1], 'o')
- && isASCIIAlphaCaselessEqual(url[userStart+2], 'c')
- && isASCIIAlphaCaselessEqual(url[userStart+3], 'a')
- && isASCIIAlphaCaselessEqual(url[userStart+4], 'l')
- && isASCIIAlphaCaselessEqual(url[userStart+5], 'h')
- && isASCIIAlphaCaselessEqual(url[userStart+6], 'o')
- && isASCIIAlphaCaselessEqual(url[userStart+7], 's')
- && isASCIIAlphaCaselessEqual(url[userStart+8], 't');
-
- // File URLs need a host part unless it is just file:// or file://localhost
- bool degenerateFilePath = pathStart == pathEnd && (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 ":" after scheme
- *p++ = ':';
-
- // if we have at least one authority part or a file URL - add "//" 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 < 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 < passwordEndPtr) {
- char c = *strPtr++;
- ASSERT(isUserInfoChar(c));
- *p++ = c;
- }
- }
- m_passwordEnd = p - buffer.data();
-
- // If we had any user info, add "@"
- if (static_cast<unsigned>(p - buffer.data()) != m_userStart)
- *p++ = '@';
-
- // copy in the host, except in the case of a file URL with authority="localhost"
- if (!(isFile && hostIsLocalHost && !haveNonHostAuthorityPart)) {
- strPtr = url + hostStart;
- const char* hostEndPtr = url + hostEnd;
- if (isCanonicalHostnameLowercaseForScheme(buffer.data(), m_schemeEnd)) {
- while (strPtr < hostEndPtr) {
- char c = toASCIILower(*strPtr++);
- ASSERT(isHostnameChar(c) || c == '[' || c == ']' || c == ':');
- *p++ = c;
- }
- } else {
- while (strPtr < 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 && !isDefaultPortForScheme(portStr, portLength, buffer.data(), m_schemeEnd))
- || (hostStart == hostEnd && hostEnd != portStart)) {
- *p++ = ':';
- const char* portEndPtr = url + portEnd;
- while (portStr < 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) && 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 > 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() <= static_cast<int>(buffer.size()));
- ASSERT(buffer.size() > 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 && equal(originalString->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& a, const URL& 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<const LChar*>(protocol), strlen(protocol)));
- unsigned length = stringURL.length();
- for (unsigned i = 0; i < length; ++i) {
- if (!protocol[i])
- return stringURL[i] == ':';
- if (!isASCIIAlphaCaselessEqual(stringURL[i], protocol[i]))
- return false;
- }
- return false;
-}
-
-static void findHostnamesInMailToURL(StringView string, Vector<std::pair<unsigned, unsigned>>& nameRanges)
-{
- // In a mailto: URL, host names come after a '@' character and end with a '>' 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, "\"@?");
- 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, ">,?");
- 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 == '"');
- while (1) {
- unsigned escapedCharacterOrStringEnd = findFirstOf(string, p, "\"\\");
- 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 == '"')
- break;
-
- // Skip escaped character.
- ASSERT(c == '\\');
- if (p == string.length())
- return;
-
- ++p;
- }
- }
- }
-}
-
-static bool findHostnameInHierarchicalURL(StringView string, unsigned& startOffset, unsigned& endOffset)
-{
- // Find the host name in a hierarchical URL.
- // It comes after a "://" 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 ":" or a path segment ending character.
- // If there is a "@" character, the host part is just the part after the "@".
- unsigned separator = findFirstOf(string, 0, ":");
- if (separator == notFoundUnsigned || separator + 2 >= 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 < 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 < hostnameEnd; ++i) {
- UChar c = string[i];
- if (c == ':' || (isPathSegmentEndChar(c) && c != 0)) {
- hostnameEnd = i;
- break;
- }
- }
-
- // Find "@" for the start of the host name.
- unsigned userInfoTerminator = findFirstOf(string, authorityStart, "@");
- unsigned hostnameStart;
- if (userInfoTerminator == notFoundUnsigned || userInfoTerminator > 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& buffer)
-{
- buffer.clear();
-
- if (protocolIs(string, "mailto")) {
- Vector<std::pair<unsigned, unsigned>> hostnameRanges;
- findHostnamesInMailToURL(string, hostnameRanges);
- unsigned n = hostnameRanges.size();
- unsigned p = 0;
- for (unsigned i = 0; i < n; ++i) {
- const std::pair<unsigned, unsigned>& 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& rel, const TextEncoding& encoding, CharBuffer& 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 && encoding.isValid() && !protocolIs(rel, "mailto") && !protocolIs(rel, "data") && !protocolIsJavaScript(rel)) {
- // Find the first instance of either # or ?, keep pathEnd at -1 otherwise.
- pathEnd = findFirstOf(StringView(s.data(), s.size()), 0, "#?");
- }
-
- 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& string)
-{
- size_t questionPos = string.find('?');
- size_t hashPos = string.find('#');
- unsigned pathEnd;
-
- if (hashPos != notFound && (questionPos == notFound || questionPos > 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("URLParser Differs: Input <%s> Base <%s> Encoding <%s>", input.utf8().data(), base.string().utf8().data(), encoding.name());
- else
- WTFLogAlways("URLParser Same: Input <%s> Base <%s> Encoding <%s>", 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<typename CharacterType>
</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&, const URL&);
</span><span class="cx"> WEBCORE_EXPORT static bool internalValuesConsistent(const URL&);
</span><del>-
- WEBCORE_EXPORT static bool enabled();
- WEBCORE_EXPORT static void setEnabled(bool);
</del><span class="cx">
</span><span class="cx"> typedef Vector<WTF::KeyValuePair<String, String>> 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<CFURLRef>(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<gchar> 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 <achristensen@webkit.org>
+
+ 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 <wenson_hsieh@apple.com>
</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&& 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 << shouldSuppressMemoryPressureHandler;
</span><span class="cx"> encoder << shouldUseTestingNetworkSession;
</span><del>- encoder << urlParserEnabled;
</del><span class="cx"> encoder << loadThrottleLatency;
</span><span class="cx"> encoder << 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<String> 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 "config.h"
-#import "WebKit2Initialize.h"
-
-#import <WebCore/RuntimeApplicationChecks.h>
-#import <WebCore/URLParser.h>
-
-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(&initOnce, ^ {
- NSString *key = @"URLParserEnabled";
- 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 << shouldSuppressMemoryPressureHandler;
</span><span class="cx"> encoder << shouldUseFontSmoothing;
</span><span class="cx"> encoder << resourceLoadStatisticsEnabled;
</span><del>- encoder << urlParserEnabled;
</del><span class="cx"> encoder << fontWhitelist;
</span><span class="cx"> encoder << iconDatabaseEnabled;
</span><span class="cx"> encoder << 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 "config.h"
-#include "WebKit2Initialize.h"
-
-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 "config.h"
-#include "WebKit2Initialize.h"
-
-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 = "<group>"; };
</span><span class="cx">                 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PendingDownload.h; path = NetworkProcess/Downloads/PendingDownload.h; sourceTree = "<group>"; };
</span><span class="cx">                 5C7706731D111D8B0012700F /* WebSocketProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSocketProvider.cpp; path = Network/WebSocketProvider.cpp; sourceTree = "<group>"; };
</span><del>-                5C79439A1D762CDF003102D4 /* WebKit2InitializeCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKit2InitializeCocoa.mm; sourceTree = "<group>"; };
</del><span class="cx">                 5C7C88DC1D0F41A0009D2F6D /* WebSocketProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSocketProvider.h; path = Network/WebSocketProvider.h; sourceTree = "<group>"; };
</span><span class="cx">                 5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PendingDownload.cpp; path = NetworkProcess/Downloads/PendingDownload.cpp; sourceTree = "<group>"; };
</span><span class="cx">                 5C9E567F1DF7930900C9EE33 /* WebsitePolicies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsitePolicies.h; sourceTree = "<group>"; };
</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&& 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 <achristensen@webkit.org>
+
+ 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 <wenson_hsieh@apple.com>
</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& urlString, const ExpectedParts& 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& urlString, const String& baseURLString, const ExpectedParts& 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& urlString, const ExpectedParts& partsNew, const ExpectedParts& 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& urlString, const String& baseURLString, const ExpectedParts& partsNew, const ExpectedParts& 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>