157 lines
5.0 KiB
Diff
157 lines
5.0 KiB
Diff
|
Index: khtml/khtml_settings.h
|
||
|
===================================================================
|
||
|
--- khtml/khtml_settings.h (revision 1027233)
|
||
|
+++ khtml/khtml_settings.h (revision 1027234)
|
||
|
@@ -186,7 +186,23 @@
|
||
|
bool isPluginsEnabled( const QString& hostname = QString() ) const;
|
||
|
|
||
|
// AdBlocK Filtering
|
||
|
+
|
||
|
+ /** tests whether @p url is filtered.
|
||
|
+ * @param url the URL to test.
|
||
|
+ * @return @c true if the URL is blacklisted and is not whitelisted.
|
||
|
+ */
|
||
|
bool isAdFiltered( const QString &url ) const;
|
||
|
+
|
||
|
+ /** identify the filter which matches @p url.
|
||
|
+ * @param url the URL to test.
|
||
|
+ * @param isWhiteListed if not @c NULL, set to @c true if the URL matched
|
||
|
+ * a whitelist filter; set to @c false if it matched a blacklist filter.
|
||
|
+ * @return the filter string that matched,
|
||
|
+ * or @c QString() if no filter matched.
|
||
|
+ * @since 4.4
|
||
|
+ */
|
||
|
+ QString adFilteredBy( const QString &url, bool *isWhiteListed = 0 ) const;
|
||
|
+
|
||
|
bool isAdFilterEnabled() const;
|
||
|
bool isHideAdsEnabled() const;
|
||
|
void addAdFilter( const QString &url );
|
||
|
Index: khtml/khtml_filter_p.h
|
||
|
===================================================================
|
||
|
--- khtml/khtml_filter_p.h (revision 1027233)
|
||
|
+++ khtml/khtml_filter_p.h (revision 1027234)
|
||
|
@@ -35,8 +35,9 @@
|
||
|
// add filter to matching set
|
||
|
void addString(const QString& pattern);
|
||
|
|
||
|
- // check if string match at least one string from matching set
|
||
|
- bool isMatched(const QString& str) const;
|
||
|
+ // check if string matches at least one string from matching set,
|
||
|
+ // optionally return the matching string or filter
|
||
|
+ bool isMatched(const QString& str, QString *by = 0) const;
|
||
|
|
||
|
// add filter to matching set with wildcards (*,?) in it
|
||
|
void addWildedString(const QString& prefix, const QRegExp& rx);
|
||
|
@@ -60,9 +61,10 @@
|
||
|
// Parses and registers a filter. This will also strip @@ for exclusion rules, skip comments, etc.
|
||
|
// The user does have to split black and white lists into separate sets, however
|
||
|
void addFilter(const QString& filter);
|
||
|
-
|
||
|
+
|
||
|
bool isUrlMatched(const QString& url);
|
||
|
-
|
||
|
+ QString urlMatchedBy(const QString& url);
|
||
|
+
|
||
|
void clear();
|
||
|
|
||
|
private:
|
||
|
Index: khtml/khtml_settings.cpp
|
||
|
===================================================================
|
||
|
--- khtml/khtml_settings.cpp (revision 1027233)
|
||
|
+++ khtml/khtml_settings.cpp (revision 1027234)
|
||
|
@@ -743,6 +743,27 @@
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
+QString KHTMLSettings::adFilteredBy( const QString &url, bool *isWhiteListed ) const
|
||
|
+{
|
||
|
+ QString m = d->adWhiteList.urlMatchedBy(url);
|
||
|
+ if (!m.isEmpty())
|
||
|
+ {
|
||
|
+ if (isWhiteListed != 0)
|
||
|
+ *isWhiteListed = true;
|
||
|
+ return (m);
|
||
|
+ }
|
||
|
+
|
||
|
+ m = d->adBlackList.urlMatchedBy(url);
|
||
|
+ if (!m.isEmpty())
|
||
|
+ {
|
||
|
+ if (isWhiteListed != 0)
|
||
|
+ *isWhiteListed = false;
|
||
|
+ return (m);
|
||
|
+ }
|
||
|
+
|
||
|
+ return (QString());
|
||
|
+}
|
||
|
+
|
||
|
void KHTMLSettings::addAdFilter( const QString &url )
|
||
|
{
|
||
|
KConfigGroup config = KSharedConfig::openConfig( "khtmlrc", KConfig::NoGlobals )->group( "Filter Settings" );
|
||
|
Index: khtml/khtml_filter.cpp
|
||
|
===================================================================
|
||
|
--- khtml/khtml_filter.cpp (revision 1027233)
|
||
|
+++ khtml/khtml_filter.cpp (revision 1027234)
|
||
|
@@ -133,6 +133,25 @@
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
+QString FilterSet::urlMatchedBy(const QString& url)
|
||
|
+{
|
||
|
+ QString by;
|
||
|
+
|
||
|
+ if (stringFiltersMatcher.isMatched(url, &by))
|
||
|
+ return by;
|
||
|
+
|
||
|
+ for (int c = 0; c < reFilters.size(); ++c)
|
||
|
+ {
|
||
|
+ if (url.contains(reFilters[c]))
|
||
|
+ {
|
||
|
+ by = reFilters[c].pattern();
|
||
|
+ break;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ return by;
|
||
|
+}
|
||
|
+
|
||
|
void FilterSet::clear()
|
||
|
{
|
||
|
reFilters.clear();
|
||
|
@@ -196,12 +215,15 @@
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-bool StringsMatcher::isMatched(const QString& str) const
|
||
|
+bool StringsMatcher::isMatched(const QString& str, QString *by) const
|
||
|
{
|
||
|
// check short strings first
|
||
|
for (int i = 0; i < shortStringFilters.size(); ++i) {
|
||
|
if (str.contains(shortStringFilters[i]))
|
||
|
+ {
|
||
|
+ if (by != 0) *by = shortStringFilters[i];
|
||
|
return true;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
int len = str.length();
|
||
|
@@ -235,13 +257,19 @@
|
||
|
if (index >= 0) {
|
||
|
int flen = stringFilters[index].length();
|
||
|
if (k - flen + 1 >= 0 && stringFilters[index] == str.midRef(k - flen + 1 , flen))
|
||
|
+ {
|
||
|
+ if (by != 0) *by = stringFilters[index];
|
||
|
return true;
|
||
|
+ }
|
||
|
} else {
|
||
|
index = -index - 1;
|
||
|
int flen = rePrefixes[index].length();
|
||
|
if (k - 8 + flen < len && rePrefixes[index] == str.midRef(k - 7, flen) &&
|
||
|
str.indexOf(reFilters[index], k - 7 + flen) == k - 7 + flen)
|
||
|
+ {
|
||
|
+ if (by != 0) *by = rePrefixes[index]+reFilters[index].pattern();
|
||
|
return true;
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
}
|