[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [rekonq] src: AdBlock Improvement
From:       Andrea Diamantini <adjam7 () gmail ! com>
Date:       2013-02-24 17:26:07
Message-ID: 20130224172607.EA2F3A6091 () git ! kde ! org
[Download RAW message or body]

Git commit 90eab081fa7f46961cd1597a7cb98c1dc32bd0b8 by Andrea Diamantini.
Committed on 24/02/2013 at 18:25.
Pushed by adjam into branch 'master'.

AdBlock Improvement

Hiding rules support (at least the easy ones, the most ones, against
hiding id && classes)
> D

To test it, take a look (in example) at the url:
http://simple-adblock.com/faq/testing-your-adblocker/

M  +52   -1    src/adblock/adblockmanager.cpp
M  +5    -1    src/adblock/adblockmanager.h
M  +3    -3    src/webtab/networkaccessmanager.cpp
M  +2    -2    src/webtab/networkaccessmanager.h
M  +5    -2    src/webtab/webpage.cpp

http://commits.kde.org/rekonq/90eab081fa7f46961cd1597a7cb98c1dc32bd0b8

diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp
index 62f8930..51000a3 100644
--- a/src/adblock/adblockmanager.cpp
+++ b/src/adblock/adblockmanager.cpp
@@ -34,6 +34,8 @@
 // Local Includes
 #include "adblocksettingwidget.h"
 
+#include "webpage.h"
+
 // KDE Includes
 #include <KIO/FileCopyJob>
 #include <KStandardDirs>
@@ -115,6 +117,7 @@ void AdBlockManager::loadSettings()
 
     _whiteList.clear();
     _blackList.clear();
+
     _hideList.clear();
 
     KConfigGroup settingsGroup(_adblockConfig, "Settings");
@@ -224,7 +227,7 @@ void AdBlockManager::loadRuleString(const QString &stringRule)
         const QString filter = stringRule.mid(2);
         if (filter.isEmpty())
             return;
-
+        
         _hideList << filter;
         return;
     }
@@ -389,3 +392,51 @@ bool AdBlockManager::isAdblockEnabledForHost(const QString \
&host)  {
     return ! _hostWhiteList.match(host);
 }
+
+
+void AdBlockManager::applyHidingRules(QWebFrame *frame)
+{
+    if (!frame)
+        return;
+
+    if (!_isAdblockEnabled)
+        return;
+
+    connect(frame, SIGNAL(loadFinished(bool)), this, SLOT(applyHidingRules(bool)));
+}
+
+
+void AdBlockManager::applyHidingRules(bool ok)
+{
+    if (!ok)
+        return;
+    
+    QWebFrame *frame = qobject_cast<QWebFrame *>(sender());
+    if (!frame)
+        return;
+
+    WebPage *page = qobject_cast<WebPage *>(frame->page());
+    if (!page)
+        return;
+    
+    QString mainPageHost = page->loadingUrl().host();
+    QStringList hosts = ReKonfig::whiteReferer();
+    if (hosts.contains(mainPageHost))
+        return;
+    
+    QWebElement document = frame->documentElement();
+
+    // HIDE RULES
+    Q_FOREACH(const QString & filter, _hideList)
+    {
+        QWebElementCollection elements = document.findAll(filter);
+
+        Q_FOREACH(QWebElement el, elements)
+        {
+            if (el.isNull())
+                continue;
+            kDebug() << "Hide element: " << el.localName();
+            el.removeFromDocument();
+        }
+    }
+}
diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h
index 7f044f3..3d329ad 100644
--- a/src/adblock/adblockmanager.h
+++ b/src/adblock/adblockmanager.h
@@ -139,7 +139,7 @@
 
 // Forward Includes
 class QNetworkRequest;
-class WebPage;
+class QWebFrame;
 
 // Definitions
 typedef QList<AdBlockRule> AdBlockRuleList;
@@ -186,6 +186,9 @@ private Q_SLOTS:
 
     void slotFinished(KJob *);
 
+    void applyHidingRules(QWebFrame *);
+    void applyHidingRules(bool);
+    
 Q_SIGNALS:
     void reloadCurrentPage();
 
@@ -197,6 +200,7 @@ private:
     AdBlockHostMatcher _hostWhiteList;
     AdBlockRuleList _blackList;
     AdBlockRuleList _whiteList;
+    
     QStringList _hideList;
 
     KSharedConfig::Ptr _adblockConfig;
diff --git a/src/webtab/networkaccessmanager.cpp \
b/src/webtab/networkaccessmanager.cpp index 95bfa47..8e1394c 100644
--- a/src/webtab/networkaccessmanager.cpp
+++ b/src/webtab/networkaccessmanager.cpp
@@ -149,7 +149,7 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, \
const QNetworkR  if (frame)
     {
         if (!m_blockedRequests.contains(frame))
-            connect(frame, SIGNAL(loadFinished(bool)), this, \
SLOT(slotFinished(bool))); +            connect(frame, SIGNAL(loadFinished(bool)), \
this, SLOT(applyHidingBlockedElements(bool)));  m_blockedRequests.insert(frame, \
req.url());  }
 
@@ -157,7 +157,7 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, \
const QNetworkR  }
 
 
-void NetworkAccessManager::slotFinished(bool ok)
+void NetworkAccessManager::applyHidingBlockedElements(bool ok)
 {
     if (!ok)
         return;
@@ -181,5 +181,5 @@ void NetworkAccessManager::slotFinished(bool ok)
         collection += frame->parentFrame()->findAllElements(HIDABLE_ELEMENTS);
 
     Q_FOREACH(const QUrl & url, urls)
-    hideBlockedElements(url, collection);
+        hideBlockedElements(url, collection);
 }
diff --git a/src/webtab/networkaccessmanager.h b/src/webtab/networkaccessmanager.h
index d839bdd..3bf45e1 100644
--- a/src/webtab/networkaccessmanager.h
+++ b/src/webtab/networkaccessmanager.h
@@ -53,8 +53,8 @@ protected:
     virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const \
QNetworkRequest &request, QIODevice *outgoingData = 0);  
 private Q_SLOTS:
-    void slotFinished(bool);
-
+    void applyHidingBlockedElements(bool);
+    
 private:
     QMultiHash<QWebFrame*, QUrl> m_blockedRequests;
     QByteArray _acceptLanguage;
diff --git a/src/webtab/webpage.cpp b/src/webtab/webpage.cpp
index 958dc5c..b61f66c 100644
--- a/src/webtab/webpage.cpp
+++ b/src/webtab/webpage.cpp
@@ -38,6 +38,7 @@
 #include "rekonq.h"
 
 // Local Includes
+#include "adblockmanager.h"
 #include "downloadmanager.h"
 #include "historymanager.h"
 #include "iconmanager.h"
@@ -175,6 +176,8 @@ WebPage::WebPage(QWidget *parent, bool isPrivateBrowsing)
     connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
     connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
 
+    connect(this, SIGNAL(frameCreated(QWebFrame *)), AdBlockManager::self(), \
SLOT(applyHidingRules(QWebFrame *))); +    
     // protocol handler signals
     connect(&_protHandler, SIGNAL(downloadUrl(KUrl)), this, \
SLOT(downloadUrl(KUrl)));  }
@@ -292,7 +295,7 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const \
QNetworkRequest &r  if \
(!settings()->testAttribute(QWebSettings::PrivateBrowsingEnabled))  {
         // Get the SSL information sent, if any...
-        KIO::AccessManager *manager = \
qobject_cast<KIO::AccessManager*>(networkAccessManager()); +        \
NetworkAccessManager *manager = qobject_cast<NetworkAccessManager \
*>(networkAccessManager());  KIO::MetaData metaData = manager->requestMetaData();
         if (metaData.contains(QL1S("ssl_in_use")))
         {
@@ -502,7 +505,7 @@ void WebPage::loadStarted()
 
     int value = val.toInt();
     if (value != 10)
-        mainFrame()->setZoomFactor(QVariant(value).toReal() / 10);  // Don't allox \
max +1 values +        mainFrame()->setZoomFactor(QVariant(value).toReal() / 10);  // \
Don't allox max +1 values      }
 
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic