NetworkUrlInterceptor: Add proper locking

remotes/origin/Falkon/3.0
David Rosca 8 years ago
parent 394221c5c0
commit 9c17277dd5
  1. 37
      src/lib/network/networkurlinterceptor.cpp
  2. 8
      src/lib/network/networkurlinterceptor.h
  3. 6
      src/lib/network/schemehandlers/falkonschemehandler.cpp
  4. 4
      src/lib/network/urlinterceptor.h
  5. 22
      src/lib/other/useragentmanager.cpp
  6. 4
      src/lib/other/useragentmanager.h
  7. 4
      src/lib/preferences/useragentdialog.cpp

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2015-2017 David Rosca <nowrep@gmail.com>
* Copyright (C) 2015-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -29,10 +29,34 @@ NetworkUrlInterceptor::NetworkUrlInterceptor(QObject *parent)
void NetworkUrlInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info)
{
if (m_sendDNT)
m_mutex.lock();
if (m_sendDNT) {
info.setHttpHeader(QByteArrayLiteral("DNT"), QByteArrayLiteral("1"));
}
const QString host = info.firstPartyUrl().host();
if (m_usePerDomainUserAgent) {
QString userAgent;
if (m_userAgentsList.contains(host)) {
userAgent = m_userAgentsList.value(host);
} else {
QHashIterator<QString, QString> i(m_userAgentsList);
while (i.hasNext()) {
i.next();
if (host.endsWith(i.key())) {
userAgent = i.value();
break;
}
}
}
if (!userAgent.isEmpty()) {
info.setHttpHeader(QByteArrayLiteral("User-Agent"), userAgent.toUtf8());
}
}
info.setHttpHeader(QByteArrayLiteral("User-Agent"), mApp->userAgentManager()->userAgentForUrl(info.firstPartyUrl()).toUtf8());
m_mutex.unlock();
foreach (UrlInterceptor *interceptor, m_interceptors) {
interceptor->interceptRequest(info);
@ -52,8 +76,15 @@ void NetworkUrlInterceptor::removeUrlInterceptor(UrlInterceptor *interceptor)
void NetworkUrlInterceptor::loadSettings()
{
m_mutex.lock();
Settings settings;
settings.beginGroup("Web-Browser-Settings");
m_sendDNT = settings.value("DoNotTrack", false).toBool();
settings.endGroup();
m_usePerDomainUserAgent = mApp->userAgentManager()->usePerDomainUserAgents();
m_userAgentsList = mApp->userAgentManager()->perDomainUserAgentsList();
m_mutex.unlock();
}

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2015 David Rosca <nowrep@gmail.com>
* Copyright (C) 2015-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -19,6 +19,7 @@
#ifndef NETWORKURLINTERCEPTOR_H
#define NETWORKURLINTERCEPTOR_H
#include <QMutex>
#include <QWebEngineUrlRequestInterceptor>
#include "qzcommon.h"
@ -38,8 +39,11 @@ public:
void loadSettings();
private:
QMutex m_mutex;
QList<UrlInterceptor*> m_interceptors;
bool m_sendDNT;
bool m_sendDNT = false;
bool m_usePerDomainUserAgent = false;
QHash<QString, QString> m_userAgentsList;
};
#endif // NETWORKURLINTERCEPTOR_H

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2017 David Rosca <nowrep@gmail.com>
* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,12 +26,12 @@
#include "settings.h"
#include "datapaths.h"
#include "iconprovider.h"
#include "useragentmanager.h"
#include "sessionmanager.h"
#include <QTimer>
#include <QSettings>
#include <QUrlQuery>
#include <QWebEngineProfile>
#include <QWebEngineUrlRequestJob>
static QString authorString(const char* name, const QString &mail)
@ -409,7 +409,7 @@ QString FalkonSchemeReply::configPage()
}
QString page = cPage;
page.replace(QLatin1String("%USER-AGENT%"), mApp->userAgentManager()->userAgentForUrl(QUrl()));
page.replace(QLatin1String("%USER-AGENT%"), mApp->webProfile()->httpUserAgent());
QString pluginsString;
const QList<Plugins::Plugin> &availablePlugins = mApp->plugins()->getAvailablePlugins();

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2015 David Rosca <nowrep@gmail.com>
* Copyright (C) 2015-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,6 +26,8 @@ class UrlInterceptor : public QObject
{
public:
explicit UrlInterceptor(QObject *parent = Q_NULLPTR) : QObject(parent) { }
// Runs on IO thread!
virtual void interceptRequest(QWebEngineUrlRequestInfo &info) = 0;
};

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2017 David Rosca <nowrep@gmail.com>
* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -56,26 +56,6 @@ void UserAgentManager::loadSettings()
QWebEngineProfile::defaultProfile()->setHttpUserAgent(userAgent);
}
QString UserAgentManager::userAgentForUrl(const QUrl &url) const
{
const QString host = url.host();
if (m_usePerDomainUserAgent) {
if (m_userAgentsList.contains(host)) {
return m_userAgentsList.value(host);
}
QHashIterator<QString, QString> i(m_userAgentsList);
while (i.hasNext()) {
i.next();
if (host.endsWith(i.key())) {
return i.value();
}
}
}
return QWebEngineProfile::defaultProfile()->httpUserAgent();
}
QString UserAgentManager::globalUserAgent() const
{
return m_globalUserAgent;

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2015 David Rosca <nowrep@gmail.com>
* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -34,8 +34,6 @@ public:
void loadSettings();
QString userAgentForUrl(const QUrl &url) const;
QString globalUserAgent() const;
QString defaultUserAgent() const;

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2017 David Rosca <nowrep@gmail.com>
* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -21,6 +21,7 @@
#include "qztools.h"
#include "mainapplication.h"
#include "settings.h"
#include "networkmanager.h"
#include <QFormLayout>
#include <QLineEdit>
@ -177,6 +178,7 @@ void UserAgentDialog::accept()
settings.endGroup();
m_manager->loadSettings();
mApp->networkManager()->loadSettings();
close();
}

Loading…
Cancel
Save