1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/* ============================================================
*
* This file is a part of the rekonq project
*
* Copyright (C) 2010-2011 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
//
// 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 are allowed through the ~ sign, for example:
//
// RULE=*/ads/*~$script,match-case
//
// ### 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 (In ADP! 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>
// Qt Includes
#include <QObject>
#include <QNetworkReply>
#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:
AdBlockManager(QObject *parent = 0);
~AdBlockManager();
QNetworkReply *block(const QNetworkRequest &request, WebPage *page);
void applyHidingRules(WebPage *page);
void addSubscription(const QString &title, const QString &location);
public slots:
void loadSettings(bool checkUpdateDate = true);
private:
void updateNextSubscription();
void saveRules(const QStringList &);
void loadRules(const QStringList &);
private slots:
void slotResult(KJob *);
void subscriptionData(KIO::Job*, const QByteArray&);
private:
bool _isAdblockEnabled;
bool _isHideAdsEnabled;
AdBlockHostMatcher _hostBlackList;
AdBlockHostMatcher _hostWhiteList;
AdBlockRuleList _blackList;
AdBlockRuleList _whiteList;
QStringList _hideList;
int _index;
QByteArray _buffer;
};
#endif
|