Add configure feature for QUrl::topLevelDomain

Change-Id: I237af8c60a9572c707e7004c9a284dd6cd3306ce
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
This commit is contained in:
Lars Knoll 2016-08-26 13:39:14 +02:00
parent 5574a814ff
commit 369857d294
7 changed files with 29 additions and 1 deletions

View File

@ -576,6 +576,12 @@
"purpose": "Provides support for command line parsing.",
"section": "Utilities",
"output": [ "publicFeature" ]
},
"topleveldomain": {
"label": "QUrl::topLevelDomain()",
"description": "Provides support for extracting the top level domain from URLs.",
"section": "Utilities",
"output": [ "publicFeature" ]
}
},

View File

@ -74,6 +74,7 @@
#define QT_NO_SYSTEMLOCALE
#define QT_NO_THREAD
#define QT_FEATURE_timezone -1
#define QT_FEATURE_topleveldomain -1
#define QT_NO_TRANSLATION
#define QT_FEATURE_translation -1
#define QT_NO_GEOM_VARIANT

View File

@ -37,6 +37,10 @@
**
****************************************************************************/
#include <qglobal.h>
#if QT_CONFIG(topleveldomain)
#include "qplatformdefs.h"
#include "qurl.h"
#include "private/qurltlds_p.h"
@ -125,3 +129,5 @@ Q_CORE_EXPORT bool qIsEffectiveTLD(const QStringRef &domain)
}
QT_END_NAMESPACE
#endif

View File

@ -55,6 +55,8 @@
#include "QtCore/qurl.h"
#include "QtCore/qstring.h"
QT_REQUIRE_CONFIG(topleveldomain);
QT_BEGIN_NAMESPACE
Q_CORE_EXPORT QString qTopLevelDomain(const QString &domain);

View File

@ -3117,6 +3117,7 @@ bool QUrl::hasFragment() const
return d->hasFragment();
}
#if QT_CONFIG(topleveldomain)
/*!
\since 4.8
@ -3151,6 +3152,7 @@ QString QUrl::topLevelDomain(ComponentFormattingOptions options) const
}
return tld;
}
#endif
/*!
Returns the result of the merge of this URL with \a relative. This

View File

@ -235,7 +235,9 @@ public:
void setHost(const QString &host, ParsingMode mode = DecodedMode);
QString host(ComponentFormattingOptions = FullyDecoded) const;
#if QT_CONFIG(topleveldomain)
QString topLevelDomain(ComponentFormattingOptions options = FullyDecoded) const;
#endif
void setPort(int port);
int port(int defaultPort = -1) const;

View File

@ -335,11 +335,20 @@ bool QNetworkCookieJar::validateCookie(const QNetworkCookie &cookie, const QUrl
if (!isParentDomain(domain, host) && !isParentDomain(host, domain))
return false; // not accepted
if (domain.startsWith(QLatin1Char('.')))
domain = domain.mid(1);
#if QT_CONFIG(topleveldomain)
// the check for effective TLDs makes the "embedded dot" rule from RFC 2109 section 4.3.2
// redundant; the "leading dot" rule has been relaxed anyway, see QNetworkCookie::normalize()
// we remove the leading dot for this check if it's present
if (qIsEffectiveTLD(domain.startsWith('.') ? domain.remove(0, 1) : domain))
if (qIsEffectiveTLD(domain))
return false; // not accepted
#else
// provide minimal checking by not accepting cookies on real TLDs
if (!domain.contains(QLatin1Char('.')))
return false;
#endif
return true;
}