mirror of
https://invent.kde.org/network/falkon.git
synced 2024-11-11 09:32:12 +01:00
AdBlockSubscription: Don't allocate search tree on heap.
This commit is contained in:
parent
c07e9cff3c
commit
511ef3c346
|
@ -25,6 +25,17 @@ AdBlockSearchTree::AdBlockSearchTree()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AdBlockSearchTree::~AdBlockSearchTree()
|
||||||
|
{
|
||||||
|
deleteNode(m_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdBlockSearchTree::clear()
|
||||||
|
{
|
||||||
|
deleteNode(m_root);
|
||||||
|
m_root = new Node;
|
||||||
|
}
|
||||||
|
|
||||||
bool AdBlockSearchTree::add(const AdBlockRule* rule)
|
bool AdBlockSearchTree::add(const AdBlockRule* rule)
|
||||||
{
|
{
|
||||||
if (rule->m_type != AdBlockRule::StringContainsMatchRule) {
|
if (rule->m_type != AdBlockRule::StringContainsMatchRule) {
|
||||||
|
@ -58,7 +69,7 @@ bool AdBlockSearchTree::add(const AdBlockRule* rule)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const AdBlockRule* AdBlockSearchTree::find(const QNetworkRequest &request, const QString &domain, const QString &string)
|
const AdBlockRule* AdBlockSearchTree::find(const QNetworkRequest &request, const QString &domain, const QString &string) const
|
||||||
{
|
{
|
||||||
int len = string.size();
|
int len = string.size();
|
||||||
|
|
||||||
|
@ -76,7 +87,7 @@ const AdBlockRule* AdBlockSearchTree::find(const QNetworkRequest &request, const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const AdBlockRule* AdBlockSearchTree::prefixSearch(const QNetworkRequest &request, const QString &domain, const QString &urlString, const QString &string)
|
const AdBlockRule* AdBlockSearchTree::prefixSearch(const QNetworkRequest &request, const QString &domain, const QString &urlString, const QString &string) const
|
||||||
{
|
{
|
||||||
int len = string.size();
|
int len = string.size();
|
||||||
|
|
||||||
|
@ -127,8 +138,3 @@ void AdBlockSearchTree::deleteNode(AdBlockSearchTree::Node* node)
|
||||||
|
|
||||||
delete node;
|
delete node;
|
||||||
}
|
}
|
||||||
|
|
||||||
AdBlockSearchTree::~AdBlockSearchTree()
|
|
||||||
{
|
|
||||||
deleteNode(m_root);
|
|
||||||
}
|
|
||||||
|
|
|
@ -33,8 +33,10 @@ public:
|
||||||
explicit AdBlockSearchTree();
|
explicit AdBlockSearchTree();
|
||||||
~AdBlockSearchTree();
|
~AdBlockSearchTree();
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
bool add(const AdBlockRule* rule);
|
bool add(const AdBlockRule* rule);
|
||||||
const AdBlockRule* find(const QNetworkRequest &request, const QString &domain, const QString &string);
|
const AdBlockRule* find(const QNetworkRequest &request, const QString &domain, const QString &string) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Node {
|
struct Node {
|
||||||
|
@ -46,7 +48,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
const AdBlockRule* prefixSearch(const QNetworkRequest &request, const QString &domain,
|
const AdBlockRule* prefixSearch(const QNetworkRequest &request, const QString &domain,
|
||||||
const QString &urlString, const QString &string);
|
const QString &urlString, const QString &string) const;
|
||||||
|
|
||||||
void deleteNode(Node* node);
|
void deleteNode(Node* node);
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,6 @@
|
||||||
AdBlockSubscription::AdBlockSubscription(const QString &title, QObject* parent)
|
AdBlockSubscription::AdBlockSubscription(const QString &title, QObject* parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_reply(0)
|
, m_reply(0)
|
||||||
, m_networkBlockTree(0)
|
|
||||||
, m_networkExceptionTree(0)
|
|
||||||
, m_title(title)
|
, m_title(title)
|
||||||
, m_updated(false)
|
, m_updated(false)
|
||||||
{
|
{
|
||||||
|
@ -203,11 +201,11 @@ void AdBlockSubscription::saveDownloadedData(const QByteArray &data)
|
||||||
|
|
||||||
const AdBlockRule* AdBlockSubscription::match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const
|
const AdBlockRule* AdBlockSubscription::match(const QNetworkRequest &request, const QString &urlDomain, const QString &urlString) const
|
||||||
{
|
{
|
||||||
if (m_networkExceptionTree->find(request, urlDomain, urlString)) {
|
if (m_networkExceptionTree.find(request, urlDomain, urlString)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (const AdBlockRule* rule = m_networkBlockTree->find(request, urlDomain, urlString)) {
|
if (const AdBlockRule* rule = m_networkBlockTree.find(request, urlDomain, urlString)) {
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,19 +375,15 @@ const AdBlockRule* AdBlockSubscription::replaceRule(AdBlockRule* rule, int offse
|
||||||
|
|
||||||
void AdBlockSubscription::populateCache()
|
void AdBlockSubscription::populateCache()
|
||||||
{
|
{
|
||||||
|
m_networkExceptionTree.clear();
|
||||||
m_networkExceptionRules.clear();
|
m_networkExceptionRules.clear();
|
||||||
|
m_networkBlockTree.clear();
|
||||||
m_networkBlockRules.clear();
|
m_networkBlockRules.clear();
|
||||||
m_domainRestrictedCssRules.clear();
|
m_domainRestrictedCssRules.clear();
|
||||||
m_elementHidingRules.clear();
|
m_elementHidingRules.clear();
|
||||||
m_documentRules.clear();
|
m_documentRules.clear();
|
||||||
m_elemhideRules.clear();
|
m_elemhideRules.clear();
|
||||||
|
|
||||||
delete m_networkBlockTree;
|
|
||||||
delete m_networkExceptionTree;
|
|
||||||
|
|
||||||
m_networkBlockTree = new AdBlockSearchTree;
|
|
||||||
m_networkExceptionTree = new AdBlockSearchTree;
|
|
||||||
|
|
||||||
// Apparently, excessive amount of selectors for one CSS rule is not what WebKit likes.
|
// Apparently, excessive amount of selectors for one CSS rule is not what WebKit likes.
|
||||||
// (In my testings, 4931 is the number that makes it crash)
|
// (In my testings, 4931 is the number that makes it crash)
|
||||||
// So let's split it by 1000 selectors...
|
// So let's split it by 1000 selectors...
|
||||||
|
@ -423,12 +417,12 @@ void AdBlockSubscription::populateCache()
|
||||||
m_elemhideRules.append(rule);
|
m_elemhideRules.append(rule);
|
||||||
}
|
}
|
||||||
else if (rule->isException()) {
|
else if (rule->isException()) {
|
||||||
if (!m_networkExceptionTree->add(rule)) {
|
if (!m_networkExceptionTree.add(rule)) {
|
||||||
m_networkExceptionRules.append(rule);
|
m_networkExceptionRules.append(rule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!m_networkBlockTree->add(rule)) {
|
if (!m_networkBlockTree.add(rule)) {
|
||||||
m_networkBlockRules.append(rule);
|
m_networkBlockRules.append(rule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -443,8 +437,6 @@ void AdBlockSubscription::populateCache()
|
||||||
AdBlockSubscription::~AdBlockSubscription()
|
AdBlockSubscription::~AdBlockSubscription()
|
||||||
{
|
{
|
||||||
qDeleteAll(m_rules);
|
qDeleteAll(m_rules);
|
||||||
delete m_networkBlockTree;
|
|
||||||
delete m_networkExceptionTree;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AdBlockCustomList
|
// AdBlockCustomList
|
||||||
|
|
|
@ -51,12 +51,12 @@
|
||||||
|
|
||||||
#include "qz_namespace.h"
|
#include "qz_namespace.h"
|
||||||
#include "adblockrule.h"
|
#include "adblockrule.h"
|
||||||
|
#include "adblocksearchtree.h"
|
||||||
|
|
||||||
class QNetworkRequest;
|
class QNetworkRequest;
|
||||||
class QNetworkReply;
|
class QNetworkReply;
|
||||||
class QUrl;
|
class QUrl;
|
||||||
|
|
||||||
class AdBlockSearchTree;
|
|
||||||
class FollowRedirectReply;
|
class FollowRedirectReply;
|
||||||
|
|
||||||
class QT_QUPZILLA_EXPORT AdBlockSubscription : public QObject
|
class QT_QUPZILLA_EXPORT AdBlockSubscription : public QObject
|
||||||
|
@ -124,8 +124,8 @@ protected:
|
||||||
QVector<const AdBlockRule*> m_documentRules;
|
QVector<const AdBlockRule*> m_documentRules;
|
||||||
QVector<const AdBlockRule*> m_elemhideRules;
|
QVector<const AdBlockRule*> m_elemhideRules;
|
||||||
|
|
||||||
AdBlockSearchTree* m_networkBlockTree;
|
AdBlockSearchTree m_networkBlockTree;
|
||||||
AdBlockSearchTree* m_networkExceptionTree;
|
AdBlockSearchTree m_networkExceptionTree;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_title;
|
QString m_title;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user