From 435ab60e790307c0f2772113d346bdda5b9d2c5b Mon Sep 17 00:00:00 2001 From: nowrep Date: Fri, 13 Jul 2012 14:12:48 +0200 Subject: [PATCH] AdBlock: Fixed $subdocument matching. - also improved a little blocked element's placoholders hiding --- src/lib/adblock/adblockrule.cpp | 2 +- src/lib/webview/webpage.cpp | 19 +++++++++++-------- tests/adblock.html | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/lib/adblock/adblockrule.cpp b/src/lib/adblock/adblockrule.cpp index 12eb1e77b..2eee7ece6 100644 --- a/src/lib/adblock/adblockrule.cpp +++ b/src/lib/adblock/adblockrule.cpp @@ -336,7 +336,7 @@ bool AdBlockRule::matchSubdocument(const QNetworkRequest &request) const return false; } - bool match = originatingFrame == page->mainFrame(); + bool match = !(originatingFrame == page->mainFrame()); return m_subdocumentException ? !match : match; } diff --git a/src/lib/webview/webpage.cpp b/src/lib/webview/webpage.cpp index 8eef418bd..eab76d1d3 100644 --- a/src/lib/webview/webpage.cpp +++ b/src/lib/webview/webpage.cpp @@ -516,9 +516,7 @@ void WebPage::addAdBlockRule(const AdBlockRule* rule, const QUrl &url) void WebPage::cleanBlockedObjects() { AdBlockManager* manager = AdBlockManager::instance(); - const QString &urlScheme = url().scheme(); - - if (!manager->isEnabled() || !manager->canRunOnScheme(urlScheme)) { + if (!manager->isEnabled()) { return; } @@ -530,12 +528,17 @@ void WebPage::cleanBlockedObjects() continue; } + QString urlEnd; + int pos = urlString.lastIndexOf('/'); - if (pos < 0 || urlString.endsWith('/')) { - continue; + if (pos > 8) { + urlEnd = urlString.mid(pos + 1); + } + + if (urlString.endsWith('/')) { + urlEnd = urlString.left(urlString.size() - 1); } - QString urlEnd = urlString.mid(pos + 1); QString selector("img[src$=\"" + urlEnd + "\"], iframe[src$=\"" + urlEnd + "\"]," "embed[src$=\"" + urlEnd + "\"]"); QWebElementCollection elements = docElement.findAll(selector); @@ -544,8 +547,8 @@ void WebPage::cleanBlockedObjects() QString src = element.attribute("src"); src.remove("../"); - if (urlString.endsWith(src)) { - element.setStyleProperty("visibility", "hidden"); + if (urlString.contains(src)) { + element.setStyleProperty("display", "none"); } } } diff --git a/tests/adblock.html b/tests/adblock.html index 06efee8c3..3529314c6 100644 --- a/tests/adblock.html +++ b/tests/adblock.html @@ -1,6 +1,7 @@ AdBlock Tests &A +

AdBlock Tests

@@ -15,5 +16,23 @@ Blocking element with ##div.test-qz-ad rule. If you see this text, the rule does not works! +

Subdocument rules

+Blocking iframe with ||linux.org.ru^$subdocument rule. + + +

XMLHttpRequest rules

+Blocking ajax with adblock.html$xmlhttprequest rule. +
Blocked
+ +