Add configure feature for QUrl::topLevelDomain
Change-Id: I237af8c60a9572c707e7004c9a284dd6cd3306ce Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
This commit is contained in:
parent
5574a814ff
commit
369857d294
@ -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" ]
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user