[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.1/kdelibs/khtml
From: Maks Orlovich <maksim () kde ! org>
Date: 2008-08-26 3:38:54
Message-ID: 1219721934.121249.30294.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 852593 by orlovich:
Backport ad filtering improvements ---
mostly huge (~7.6x) performance improvements thanks to vtokarev's ultra-cool RK \
implementation, some compatibility improvements (e.g. understanding @@ whitelist \
directives) and a bit of refactoring so we don't clutter khtml_settings.cc with \
computer science.
M +1 -0 CMakeLists.txt
A khtml_filter.cpp trunk/KDE/kdelibs/khtml/khtml_filter.cpp#852301 \
[License: LGPL (v2+)] A khtml_filter_p.h \
trunk/KDE/kdelibs/khtml/khtml_filter_p.h#852301 [License: LGPL (v2+)] M +15 -41 \
khtml_settings.cc
--- branches/KDE/4.1/kdelibs/khtml/CMakeLists.txt #852592:852593
@@ -289,6 +289,7 @@
khtml_run.cpp
khtml_global.cpp
khtml_settings.cc
+ khtml_filter.cpp
khtml_events.cpp
khtml_ext.cpp
khtml_pagecache.cpp
--- branches/KDE/4.1/kdelibs/khtml/khtml_settings.cc #852592:852593
@@ -28,6 +28,7 @@
#include <QtCore/QRegExp>
#include <QtGui/QFontDatabase>
#include <kmessagebox.h>
+#include <khtml_filter_p.h>
/**
* @internal
@@ -107,7 +108,8 @@
QStringList fonts;
QStringList defaultFonts;
- QVector<QRegExp> adFilters;
+ khtml::FilterSet adBlackList;
+ khtml::FilterSet adWhiteList;
QList< QPair< QString, QChar > > m_fallbackAccessKeysAssignments;
};
@@ -324,40 +326,22 @@
d->m_adFilterEnabled = cgFilter.readEntry("Enabled", false);
d->m_hideAdsEnabled = cgFilter.readEntry("Shrink", false);
- d->adFilters.clear();
+ d->adBlackList.clear();
+ d->adWhiteList.clear();
QMap<QString,QString> entryMap = cgFilter.entryMap();
QMap<QString,QString>::ConstIterator it;
- d->adFilters.reserve(entryMap.count());
for( it = entryMap.constBegin(); it != entryMap.constEnd(); ++it )
{
QString name = it.key();
QString url = it.value();
- if (url.startsWith("!"))
- continue;
-
if (name.startsWith("Filter"))
{
- if (url.length()>2 && url[0]=='/' && url[url.length()-1] == '/')
- {
- QString inside = url.mid(1, url.length()-2);
- QRegExp rx(inside);
- d->adFilters.append(rx);
- }
+ if (url.startsWith(QLatin1String("@@")))
+ d->adWhiteList.addFilter(url);
else
- {
- QRegExp rx;
- int left,right;
-
- for (right=url.length(); right>0 && url[right-1]=='*' ; --right);
- for (left=0; left<right && url[left]=='*' ; ++left);
-
- rx.setPatternSyntax(QRegExp::Wildcard);
- rx.setPattern(url.mid(left,right-left));
-
- d->adFilters.append(rx);
- }
+ d->adBlackList.addFilter(url);
}
}
}
@@ -738,16 +722,8 @@
{
if (!url.startsWith("data:"))
{
- QVector<QRegExp>::const_iterator it(d->adFilters.constBegin());
- QVector<QRegExp>::const_iterator end(d->adFilters.constEnd());
- for (; it != end; ++it)
- {
- if ((*it).indexIn(url) != -1)
- {
- kDebug( 6080 ) << "Filtered: " << url;
- return true;
- }
- }
+ // Check the blacklist, and only if that matches, the whitelist
+ return d->adBlackList.isUrlMatched(url) && \
!d->adWhiteList.isUrlMatched(url); }
}
return false;
@@ -758,6 +734,9 @@
KConfigGroup config = KSharedConfig::openConfig( "khtmlrc", KConfig::NoGlobals \
)->group( "Filter Settings" );
QRegExp rx;
+
+ // Try compiling to avoid invalid stuff. Only support the basic syntax here...
+ // ### refactor somewhat
if (url.length()>2 && url[0]=='/' && url[url.length()-1] == '/')
{
QString inside = url.mid(1, url.length()-2);
@@ -765,13 +744,8 @@
}
else
{
- int left,right;
-
rx.setPatternSyntax(QRegExp::Wildcard);
- for (right=url.length(); right>0 && url[right-1]=='*' ; --right);
- for (left=0; left<right && url[left]=='*' ; ++left);
-
- rx.setPattern(url.mid(left,right-left));
+ rx.setPattern(url);
}
if (rx.isValid())
@@ -782,7 +756,7 @@
config.writeEntry("Count",last+1);
config.sync();
- d->adFilters.append(rx);
+ d->adBlackList.addFilter(url);
}
else
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic