ThirdPartyCookiesQt.cpp [plain text]
#include "config.h"
#include "ThirdPartyCookiesQt.h"
#include "Cookie.h"
#include "CookieJar.h"
#include "Document.h"
#include "NetworkingContext.h"
#include <QList>
#include <QNetworkAccessManager>
#include <QNetworkCookieJar>
namespace WebCore {
#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
inline void removeTopLevelDomain(QString* domain, const QString& topLevelDomain)
{
domain->remove(domain->length() - topLevelDomain.length(), topLevelDomain.length());
domain->prepend(QLatin1Char('.'));
}
static bool urlsShareSameDomain(const QUrl& url, const QUrl& firstPartyUrl)
{
QString firstPartyTLD = firstPartyUrl.topLevelDomain();
QString requestTLD = url.topLevelDomain();
if (firstPartyTLD != requestTLD)
return false;
QString firstPartyDomain = QString(firstPartyUrl.host().toLower());
QString requestDomain = QString(url.host().toLower());
removeTopLevelDomain(&firstPartyDomain, firstPartyTLD);
removeTopLevelDomain(&requestDomain, requestTLD);
if (firstPartyDomain.section(QLatin1Char('.'), -1) == requestDomain.section(QLatin1Char('.'), -1))
return true;
return false;
}
#endif
bool thirdPartyCookiePolicyPermits(NetworkingContext* context, const QUrl& url, const QUrl& firstPartyUrl)
{
#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
if (!context)
return true;
if (!context->networkAccessManager())
return true;
QNetworkCookieJar* jar = context->networkAccessManager()->cookieJar();
if (!jar)
return true;
if (firstPartyUrl.isEmpty())
return true;
if (urlsShareSameDomain(url, firstPartyUrl))
return true;
return context->thirdPartyCookiePolicyPermission(url);
#else
return true;
#endif
}
}