summaryrefslogtreecommitdiff
path: root/src/adblock/adblockmanager.h
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2012-07-30 19:02:15 +0200
committerAndrea Diamantini <adjam7@gmail.com>2012-12-10 02:48:04 +0100
commit1949d41ac6fbd92f248a995a25aa4c91aced2ae8 (patch)
tree41ac0217ac4d8d32b15bb30c18ab22ce6730ee89 /src/adblock/adblockmanager.h
parentSession Manager (diff)
downloadrekonq-1949d41ac6fbd92f248a995a25aa4c91aced2ae8.tar.xz
Restored Adblock moving hiding logic to the one used in kwebkitpart
This will let everyone to save time reinventing the wheel and let us remove webpage from adblockmanager code, but just manage it via (Q)NAM.
Diffstat (limited to 'src/adblock/adblockmanager.h')
-rw-r--r--src/adblock/adblockmanager.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h
new file mode 100644
index 00000000..1946d4ad
--- /dev/null
+++ b/src/adblock/adblockmanager.h
@@ -0,0 +1,210 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010-2012 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+
+#ifndef ADBLOCK_MANAGER_H
+#define ADBLOCK_MANAGER_H
+
+
+// NOTE: AdBlockPlus Filters (fast) summary
+//
+// ### Basic Filter rules
+//
+// RULE = http://example.com/ads/*
+// this should block every link containing all things from that link
+//
+// ### Exception rules (@@)
+//
+// RULE = @@advice*
+//
+// this will save every site, also that matched by other rules, cointaining words
+// that starts with "advice". Wildcards && regular expression allowed here.
+//
+// ### Beginning/end matching rules (||)
+//
+// RULE=||http://badsite.com
+//
+// will stop all links starting with http://badsite.com
+//
+// RULE=*swf||
+//
+// will stop all links to direct flash contents
+//
+// ### Comments (!)
+//
+// RULE=!azz..
+//
+// Every rule starting with a ! is commented out and should not be checked
+//
+// ### Filter Options
+//
+// There are 3 kind of filter options:
+//
+// --- ### TYPE OPTIONS
+//
+// You can also specify a number of options to modify the behavior of a filter.
+// You list these options separated with commas after a dollar sign ($) at the end of the filter
+//
+// RULE=*/ads/*$element,match-case
+//
+// where $element can be one of the following:
+// $script external scripts loaded via HTML script tag
+// $image regular images, typically loaded via HTML img tag
+// $background background images, often specified via CSS
+// $stylesheet external CSS stylesheet files
+// $object content handled by browser plugins, e.g. Flash or Java
+// $xbl XBL bindings (typically loaded by -moz-binding CSS property) Firefox 3 or higher required
+// $ping link pings Firefox 3 or higher required
+// $xmlhttprequest requests started by the XMLHttpRequest object Firefox 3 or higher required
+// $object-subrequest requests started plugins like Flash Firefox 3 or higher required
+// $dtd DTD files loaded by XML documents Firefox 3 or higher required
+// $subdocument embedded pages, usually included via HTML frames
+// $document the page itself (only exception rules can be applied to the page)
+// $other types of requests not covered in the list above
+//
+//
+// --- ### INVERSE TYPE OPTIONS
+//
+// Inverse type options are allowed through the ~ sign, for example:
+//
+// RULE=*/ads/*~$script,match-case
+//
+//
+// --- ### THIRD-PARTY OPTIONS
+//
+// If "third-party" option is specified, filter is applied just to requests coming from a different
+// origin than the currently viewed page.
+// In the same way, the "~third-party" option restricts the filter to the requests coming from the
+// same origin as the currently viewed page.
+//
+//
+// ### Regular expressions
+//
+// They usually allow to check for (a lot of) sites, using just one rule, but be careful:
+// BASIC FILTERS ARE PROCESSED FASTER THAN REGULAR EXPRESSIONS
+// (That's true at least in ABP! In rekonq, I don't know...)
+//
+//
+// ### ELEMENT HIDING (##)
+//
+// This is quite different from usual adblock (but, for me, more powerful!). Sometimes you will find advertisements
+// that can’t be blocked because they are embedded as text in the web page itself.
+// All you can do there is HIDE the element :)
+//
+// RULE=##div.advise
+//
+// The previous rule will hide every div whose class is named "advise". Usual CSS selectors apply here :)
+//
+// END NOTE ----------------------------------------------------------------------------------------------------------
+
+
+// Rekonq Includes
+#include "rekonq_defines.h"
+
+// Local Includes
+#include "adblockhostmatcher.h"
+#include "adblockrule.h"
+
+// KDE Includes
+#include <KIO/Job>
+#include <KSharedConfig>
+
+// Qt Includes
+#include <QObject>
+#include <QStringList>
+#include <QByteArray>
+
+// Forward Includes
+class QNetworkRequest;
+class WebPage;
+
+// Definitions
+typedef QList<AdBlockRule> AdBlockRuleList;
+
+
+class REKONQ_TESTS_EXPORT AdBlockManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Entry point.
+ * Access to AdBlockManager class by using
+ * AdBlockManager::self()->thePublicMethodYouNeed()
+ */
+ static AdBlockManager *self();
+
+ ~AdBlockManager();
+
+ bool isEnabled();
+ bool isHidingElements();
+
+ bool blockRequest(const QNetworkRequest &request);
+
+ void addCustomRule(const QString &, bool reloadPage = true);
+ void clearElementsLists();
+
+private:
+ AdBlockManager(QObject *parent = 0);
+
+ void updateSubscription(int);
+ bool subscriptionFileExists(int);
+
+ // load a file rule, given a path
+ void loadRules(const QString &rulesFilePath);
+
+ // load a single rule
+ void loadRuleString(const QString &stringRule);
+
+private Q_SLOTS:
+ void loadSettings();
+ void showSettings();
+ void showBlockedItemDialog();
+
+ void slotFinished(KJob *);
+
+Q_SIGNALS:
+ void reloadCurrentPage();
+
+private:
+ bool _isAdblockEnabled;
+ bool _isHideAdsEnabled;
+
+ AdBlockHostMatcher _hostBlackList;
+ AdBlockHostMatcher _hostWhiteList;
+ AdBlockRuleList _blackList;
+ AdBlockRuleList _whiteList;
+ QStringList _hideList;
+
+ QStringList _blockedElements;
+ int _hidedElements;
+
+ KSharedConfig::Ptr _adblockConfig;
+
+ static QWeakPointer<AdBlockManager> s_adBlockManager;
+};
+
+#endif