Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: include/AdblockPlus/FilterEngine.h

Issue 5728380594946048: Issue 116 - Document the libadblockplus API (Closed)
Patch Set: Document JsValue and FilterEngine Created Aug. 29, 2014, 1:18 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 13 matching lines...) Expand all
24 #include <vector> 24 #include <vector>
25 #include <AdblockPlus/JsEngine.h> 25 #include <AdblockPlus/JsEngine.h>
26 #include <AdblockPlus/JsValue.h> 26 #include <AdblockPlus/JsValue.h>
27 27
28 #include "tr1_memory.h" 28 #include "tr1_memory.h"
29 29
30 namespace AdblockPlus 30 namespace AdblockPlus
31 { 31 {
32 class FilterEngine; 32 class FilterEngine;
33 33
34 /**
35 * Wrapper for a filter object.
Wladimir Palant 2014/08/29 18:18:50 "Adblock Plus filter object"? Just to make it clea
Felix Dahlke 2014/09/01 17:00:15 Done.
36 */
34 class Filter : public JsValue, 37 class Filter : public JsValue,
35 public std::tr1::enable_shared_from_this<Filter> 38 public std::tr1::enable_shared_from_this<Filter>
36 { 39 {
37 public: 40 public:
41 /**
42 * Filter types, see https://adblockplus.org/en/filters.
43 */
38 enum Type {TYPE_BLOCKING, TYPE_EXCEPTION, 44 enum Type {TYPE_BLOCKING, TYPE_EXCEPTION,
39 TYPE_ELEMHIDE, TYPE_ELEMHIDE_EXCEPTION, 45 TYPE_ELEMHIDE, TYPE_ELEMHIDE_EXCEPTION,
40 TYPE_COMMENT, TYPE_INVALID}; 46 TYPE_COMMENT, TYPE_INVALID};
41 47
42 Type GetType(); 48 Type GetType();
Wladimir Palant 2014/08/29 18:18:50 I think this method should be documented ;)
Felix Dahlke 2014/09/01 17:00:15 Done.
49
50 /**
51 * Checks whether this filter has been added to its subscription.
52 * @return `true` if this filter has been added to its subscription.
Wladimir Palant 2014/08/29 18:18:50 No, "Checks whether this filter has been added to
Felix Dahlke 2014/09/01 17:00:15 Done, seems I misinterpreted FilterStorage.addFilt
53 */
43 bool IsListed(); 54 bool IsListed();
55
56 /**
57 * Adds this filter to its subscription.
Wladimir Palant 2014/08/29 18:18:50 No, "Adds this filter to user's custom filters."
Felix Dahlke 2014/09/01 17:00:15 Done.
58 */
44 void AddToList(); 59 void AddToList();
60
61 /**
62 * Removes this filter from its subscription.
Wladimir Palant 2014/08/29 18:18:50 No, "Removes this filter from user's custom filter
Felix Dahlke 2014/09/01 17:00:15 Done.
63 */
45 void RemoveFromList(); 64 void RemoveFromList();
65
46 bool operator==(const Filter& filter) const; 66 bool operator==(const Filter& filter) const;
47 67
48 Filter(JsValuePtr value); 68 Filter(JsValuePtr value);
Wladimir Palant 2014/08/29 18:18:50 Want to document this? "Creates a wrapper for a Ja
Felix Dahlke 2014/09/01 17:00:15 Done.
49 }; 69 };
50 70
71 /**
72 * Wrapper for a subscription object.
73 */
51 class Subscription : public JsValue, 74 class Subscription : public JsValue,
52 public std::tr1::enable_shared_from_this<Subscription> 75 public std::tr1::enable_shared_from_this<Subscription>
53 { 76 {
54 public: 77 public:
78 /**
79 * Checks if this subscription has been added to the known subscriptions.
80 * @return `true` if this subscription has been added to the known
81 * subscriptions.
Wladimir Palant 2014/08/29 18:18:50 What are "known subscriptions"? "Checks if the sub
Felix Dahlke 2014/09/01 17:00:15 Done.
82 */
55 bool IsListed(); 83 bool IsListed();
84
85 /**
86 * Adds this subscription to the known subscriptions.
Wladimir Palant 2014/08/29 18:18:50 "Adds this subscription to user's list of subscrip
Felix Dahlke 2014/09/01 17:00:15 Done.
87 */
56 void AddToList(); 88 void AddToList();
89
90 /**
91 * Removes this subscription from the known subscriptions.
Wladimir Palant 2014/08/29 18:18:50 "Removes this subscription from user's list of sub
Felix Dahlke 2014/09/01 17:00:15 Done.
92 */
57 void RemoveFromList(); 93 void RemoveFromList();
94
95 /**
96 * Updates this subscription, i.e.\ retrieves the latest version from the
Wladimir Palant 2014/08/29 18:18:50 "latest version" => "current filters"?
Felix Dahlke 2014/09/01 17:00:15 Done.
97 * subscription URL.
98 */
58 void UpdateFilters(); 99 void UpdateFilters();
100
101 /**
102 * Checks if this subscriptions is currently being updated.
103 * @return `true` if this subscriptions is currently being updated.
104 */
59 bool IsUpdating(); 105 bool IsUpdating();
106
60 bool operator==(const Subscription& subscription) const; 107 bool operator==(const Subscription& subscription) const;
61 108
62 Subscription(JsValuePtr value); 109 Subscription(JsValuePtr value);
Wladimir Palant 2014/08/29 18:18:50 Want to document this? "Creates a wrapper for a Ja
Felix Dahlke 2014/09/01 17:00:15 Done.
63 }; 110 };
64 111
112 /**
113 * Shared smart pointer to a `Filter` instance.
114 */
65 typedef std::tr1::shared_ptr<Filter> FilterPtr; 115 typedef std::tr1::shared_ptr<Filter> FilterPtr;
116
117 /**
118 * Shared smart pointer to a `Subscription` instance.
119 */
66 typedef std::tr1::shared_ptr<Subscription> SubscriptionPtr; 120 typedef std::tr1::shared_ptr<Subscription> SubscriptionPtr;
67 121
122 /**
123 * Main component of Libadblockplus.
124 * It handles:
125 * - Filter management and matching.
126 * - Subscription management and synchronization.
127 * - Update checks for the application.
128 */
68 class FilterEngine 129 class FilterEngine
69 { 130 {
70 public: 131 public:
132 /**
133 * Callback invoked when an update is available.
Wladimir Palant 2014/08/29 18:18:50 "Callback" => "Type of callback"? Want to note th
Felix Dahlke 2014/09/01 17:00:15 Done.
134 */
71 typedef std::tr1::function<void(const std::string&)> UpdaterCallback; 135 typedef std::tr1::function<void(const std::string&)> UpdaterCallback;
136
137 /**
138 * Callback invoked when the filters change.
Wladimir Palant 2014/08/29 18:18:50 "Callback" => "Type of callback"? Want to note th
Felix Dahlke 2014/09/01 17:00:15 Done.
139 */
72 typedef std::tr1::function<void(const std::string&, const JsValuePtr)> Filte rChangeCallback; 140 typedef std::tr1::function<void(const std::string&, const JsValuePtr)> Filte rChangeCallback;
73 141
74 explicit FilterEngine(JsEnginePtr jsEngine); 142 explicit FilterEngine(JsEnginePtr jsEngine);
75 JsEnginePtr GetJsEngine() const { return jsEngine; } 143 JsEnginePtr GetJsEngine() const { return jsEngine; }
Wladimir Palant 2014/08/29 18:18:50 I guess you plan to document these two functions l
Felix Dahlke 2014/09/01 17:00:15 Documented them now. They seemed rather obvious to
144
145 /**
146 * Checks if this is the first run of the application.
Wladimir Palant 2014/08/29 18:18:50 Want to note that this is determined by the presen
Felix Dahlke 2014/09/01 17:00:15 Libadblockplus does initialise filter lists intern
Wladimir Palant 2014/09/01 17:36:56 True, I forgot that this logic moved from the appl
147 * @return `true` if the application is running for the first time.
148 */
76 bool IsFirstRun() const; 149 bool IsFirstRun() const;
150
151 /**
152 * Retrieves a filter object from its text representation.
153 * @param text Text representation of the filter,
154 * see https://adblockplus.org/en/filters.
155 * @return New filter object if the filter wasn't known, otherwise the
156 * existing one.
Wladimir Palant 2014/08/29 18:18:50 This is pretty misleading. This function will alwa
Felix Dahlke 2014/09/01 17:00:15 Done.
157 */
77 FilterPtr GetFilter(const std::string& text); 158 FilterPtr GetFilter(const std::string& text);
159
160 /**
161 * Retrieves a subscription object for the supplied URL.
162 * @param url Subscription URL.
163 * @return New subscription object if the subscription wasn't known,
164 * otherwise the existing one.
Wladimir Palant 2014/08/29 18:18:50 Same as above, IMHO we should just say that a subs
Felix Dahlke 2014/09/01 17:00:15 Done.
165 */
78 SubscriptionPtr GetSubscription(const std::string& url); 166 SubscriptionPtr GetSubscription(const std::string& url);
167
168 /**
169 * Retrieves all known filters.
170 * @return List of known filters.
Wladimir Palant 2014/08/29 18:18:50 What are "known filters"? "Retrieves user's custom
Felix Dahlke 2014/09/01 17:00:15 Done.
171 */
79 std::vector<FilterPtr> GetListedFilters() const; 172 std::vector<FilterPtr> GetListedFilters() const;
173
174 /**
175 * Retrieves all known subscriptions.
176 * @return List of known subscriptions.
Wladimir Palant 2014/08/29 18:18:50 What are "known subscriptions"? "Retrieves user's
Felix Dahlke 2014/09/01 17:00:15 Done.
177 */
80 std::vector<SubscriptionPtr> GetListedSubscriptions() const; 178 std::vector<SubscriptionPtr> GetListedSubscriptions() const;
179
180 /**
181 * Retrieves all recommended subscriptions.
182 * This will parse all subscriptions listed in `subscriptions.xml`.
Wladimir Palant 2014/08/29 18:18:50 Why document implementation details? There is no s
Felix Dahlke 2014/09/01 17:00:15 Done.
183 * @return List of recommended subscriptions.
184 */
81 std::vector<SubscriptionPtr> FetchAvailableSubscriptions() const; 185 std::vector<SubscriptionPtr> FetchAvailableSubscriptions() const;
186
187 /**
188 * Checks if any active filter matches the supplied URL.
189 * @param url URL to match.
190 * @param contentType Content type of the requested resource, possible
191 * values are:
192 * - OTHER
193 * - SCRIPT
194 * - IMAGE
195 * - STYLESHEET
196 * - OBJECT
197 * - SUBDOCUMENT
198 * - DOCUMENT
199 * - XMLHTTPREQUEST
200 * - OBJECT_SUBREQUEST
201 * - FONT
202 * - MEDIA
203 * @param documentUrl URL of the document requesting the resource.
204 * Note that there will be more than one document if frames are
205 * involved, see
206 * Matches(const std::string&, const std::string&, const std::vector< std::string>&) const.
207 * @return Matching filter, or `null` if there was no match.
Wladimir Palant 2014/08/29 18:18:50 Strictly speaking, is it really null? It's an empt
Felix Dahlke 2014/09/01 17:00:15 Not strictly speaking, it's a shared_ptr instance
Wladimir Palant 2014/09/01 17:36:56 I am not really sure, that's why I asked. You don'
Felix Dahlke 2014/09/02 05:24:51 I do think so. Note that: 1. There is no "null" i
208 */
82 FilterPtr Matches(const std::string& url, 209 FilterPtr Matches(const std::string& url,
83 const std::string& contentType, 210 const std::string& contentType,
84 const std::string& documentUrl) const; 211 const std::string& documentUrl) const;
212
213 /**
214 * Checks if any active filter matches the supplied URL.
215 * @param url URL to match.
216 * @param contentType Content type of the requested resource, possible
217 * values are:
218 * - OTHER
219 * - SCRIPT
220 * - IMAGE
221 * - STYLESHEET
222 * - OBJECT
223 * - SUBDOCUMENT
224 * - DOCUMENT
225 * - XMLHTTPREQUEST
226 * - OBJECT_SUBREQUEST
227 * - FONT
228 * - MEDIA
229 * @param documentUrls Chain of documents requesting the resource.
Wladimir Palant 2014/08/29 18:18:50 In which order? "starting with the top-level frame
Felix Dahlke 2014/09/01 17:00:15 I've put it slightly differently - we actually sta
230 * This will typically be the frame structure. If the application is
231 * not capable of identifying the frame structure, e.g. because it is
232 * a proxy, it can be approximated using `ReferrerMapping`.
233 * @return Matching filter, or `null` if there was no match.
234 */
85 FilterPtr Matches(const std::string& url, 235 FilterPtr Matches(const std::string& url,
86 const std::string& contentType, 236 const std::string& contentType,
87 const std::vector<std::string>& documentUrls) const; 237 const std::vector<std::string>& documentUrls) const;
238
239 /**
240 * Retrieves CSS selectors for all active element hiding filters.
241 * @param domain Domain to retrieve CSS selectors for.
Wladimir Palant 2014/08/29 18:18:50 What is the relevance of the domain parameter? Thi
Felix Dahlke 2014/09/01 17:00:15 Done.
242 * @return List of CSS selectors.
243 */
88 std::vector<std::string> GetElementHidingSelectors(const std::string& domain ) const; 244 std::vector<std::string> GetElementHidingSelectors(const std::string& domain ) const;
245
246 /**
247 * Retrieves a preference value.
248 * @param pref Preference name.
249 * @return Preference value, or `null` if it doesn't exist.
250 */
89 JsValuePtr GetPref(const std::string& pref) const; 251 JsValuePtr GetPref(const std::string& pref) const;
252
253 /**
254 * Sets a preference value.
255 * @param pref Preference name.
256 * @param value New value of the preference.
257 */
90 void SetPref(const std::string& pref, JsValuePtr value); 258 void SetPref(const std::string& pref, JsValuePtr value);
259
260 /**
261 * Extracts the host from an URL.
Wladimir Palant 2014/08/29 18:18:50 "from a URL" please.
Felix Dahlke 2014/09/01 17:00:15 Done.
262 * @param url URL to extract the host from.
263 * @return Extracted host.
264 */
91 std::string GetHostFromURL(const std::string& url); 265 std::string GetHostFromURL(const std::string& url);
266
267 /**
268 * Forces an immediate update check.
269 * @param Optional callback to invoke when updates are available.
Wladimir Palant 2014/08/29 18:18:50 Parameter name is missing here. The callback will
Felix Dahlke 2014/09/01 17:00:15 Done.
270 */
92 void ForceUpdateCheck(UpdaterCallback callback = 0); 271 void ForceUpdateCheck(UpdaterCallback callback = 0);
272
273 /**
274 * Sets the callback invoked when the filters change.
275 * @param The callback to invoke.
Wladimir Palant 2014/08/29 18:18:50 Parameter name is missing here. Want to note that
Felix Dahlke 2014/09/01 17:00:15 Added the parameter. Seems obvious to me that ther
276 */
93 void SetFilterChangeCallback(FilterChangeCallback callback); 277 void SetFilterChangeCallback(FilterChangeCallback callback);
278
279 /**
280 * Removes the callback invoked when the filters change.
281 */
94 void RemoveFilterChangeCallback(); 282 void RemoveFilterChangeCallback();
283
284 /**
285 * Compares two version strings in
286 * [Mozilla toolkit version format](https://developer.mozilla.org/en/docs/To olkit_version_format).
287 * @param v1 First version string.
288 * @param v2 Second version string.
289 * @return
290 * - `0` if `v1` and `v2` are identical.
291 * - A negative number if `v1` is less than `v2`.
292 * - A positive number if `v1` is greater than `v2`.
293 */
95 int CompareVersions(const std::string& v1, const std::string& v2); 294 int CompareVersions(const std::string& v1, const std::string& v2);
96 295
97 private: 296 private:
98 JsEnginePtr jsEngine; 297 JsEnginePtr jsEngine;
99 bool initialized; 298 bool initialized;
100 bool firstRun; 299 bool firstRun;
101 int updateCheckId; 300 int updateCheckId;
102 301
103 void InitDone(JsValueList& params); 302 void InitDone(JsValueList& params);
104 FilterPtr CheckFilterMatch(const std::string& url, 303 FilterPtr CheckFilterMatch(const std::string& url,
105 const std::string& contentType, 304 const std::string& contentType,
106 const std::string& documentUrl) const; 305 const std::string& documentUrl) const;
107 void UpdateCheckDone(const std::string& eventName, UpdaterCallback callback, JsValueList& params); 306 void UpdateCheckDone(const std::string& eventName, UpdaterCallback callback, JsValueList& params);
108 void FilterChanged(FilterChangeCallback callback, JsValueList& params); 307 void FilterChanged(FilterChangeCallback callback, JsValueList& params);
109 }; 308 };
110 } 309 }
111 310
112 #endif 311 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld