| Index: include/AdblockPlus/FilterEngine.h | 
| =================================================================== | 
| --- a/include/AdblockPlus/FilterEngine.h | 
| +++ b/include/AdblockPlus/FilterEngine.h | 
| @@ -31,67 +31,266 @@ | 
| { | 
| class FilterEngine; | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| class Filter : public JsValue, | 
| public std::tr1::enable_shared_from_this<Filter> | 
| { | 
| public: | 
| + /** | 
| + * Filter types, see https://adblockplus.org/en/filters. | 
| + */ | 
| enum Type {TYPE_BLOCKING, TYPE_EXCEPTION, | 
| TYPE_ELEMHIDE, TYPE_ELEMHIDE_EXCEPTION, | 
| TYPE_COMMENT, TYPE_INVALID}; | 
| 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.
 
 | 
| + | 
| + /** | 
| + * Checks whether this filter has been added to its subscription. | 
| + * @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
 
 | 
| + */ | 
| bool IsListed(); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| void AddToList(); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| void RemoveFromList(); | 
| + | 
| bool operator==(const Filter& filter) const; | 
| 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.
 
 | 
| }; | 
| + /** | 
| + * Wrapper for a subscription object. | 
| + */ | 
| class Subscription : public JsValue, | 
| public std::tr1::enable_shared_from_this<Subscription> | 
| { | 
| public: | 
| + /** | 
| + * Checks if this subscription has been added to the known subscriptions. | 
| + * @return `true` if this subscription has been added to the known | 
| + * 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.
 
 | 
| + */ | 
| bool IsListed(); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| void AddToList(); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| void RemoveFromList(); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + * subscription URL. | 
| + */ | 
| void UpdateFilters(); | 
| + | 
| + /** | 
| + * Checks if this subscriptions is currently being updated. | 
| + * @return `true` if this subscriptions is currently being updated. | 
| + */ | 
| bool IsUpdating(); | 
| + | 
| bool operator==(const Subscription& subscription) const; | 
| 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.
 
 | 
| }; | 
| + /** | 
| + * Shared smart pointer to a `Filter` instance. | 
| + */ | 
| typedef std::tr1::shared_ptr<Filter> FilterPtr; | 
| + | 
| + /** | 
| + * Shared smart pointer to a `Subscription` instance. | 
| + */ | 
| typedef std::tr1::shared_ptr<Subscription> SubscriptionPtr; | 
| + /** | 
| + * Main component of Libadblockplus. | 
| + * It handles: | 
| + * - Filter management and matching. | 
| + * - Subscription management and synchronization. | 
| + * - Update checks for the application. | 
| + */ | 
| class FilterEngine | 
| { | 
| public: | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| typedef std::tr1::function<void(const std::string&)> UpdaterCallback; | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + */ | 
| typedef std::tr1::function<void(const std::string&, const JsValuePtr)> FilterChangeCallback; | 
| explicit FilterEngine(JsEnginePtr jsEngine); | 
| 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
 
 | 
| + | 
| + /** | 
| + * 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
 
 | 
| + * @return `true` if the application is running for the first time. | 
| + */ | 
| bool IsFirstRun() const; | 
| + | 
| + /** | 
| + * Retrieves a filter object from its text representation. | 
| + * @param text Text representation of the filter, | 
| + * see https://adblockplus.org/en/filters. | 
| + * @return New filter object if the filter wasn't known, otherwise the | 
| + * 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.
 
 | 
| + */ | 
| FilterPtr GetFilter(const std::string& text); | 
| + | 
| + /** | 
| + * Retrieves a subscription object for the supplied URL. | 
| + * @param url Subscription URL. | 
| + * @return New subscription object if the subscription wasn't known, | 
| + * 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.
 
 | 
| + */ | 
| SubscriptionPtr GetSubscription(const std::string& url); | 
| + | 
| + /** | 
| + * Retrieves all known filters. | 
| + * @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.
 
 | 
| + */ | 
| std::vector<FilterPtr> GetListedFilters() const; | 
| + | 
| + /** | 
| + * Retrieves all known subscriptions. | 
| + * @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.
 
 | 
| + */ | 
| std::vector<SubscriptionPtr> GetListedSubscriptions() const; | 
| + | 
| + /** | 
| + * Retrieves all recommended subscriptions. | 
| + * 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.
 
 | 
| + * @return List of recommended subscriptions. | 
| + */ | 
| std::vector<SubscriptionPtr> FetchAvailableSubscriptions() const; | 
| + | 
| + /** | 
| + * Checks if any active filter matches the supplied URL. | 
| + * @param url URL to match. | 
| + * @param contentType Content type of the requested resource, possible | 
| + * values are: | 
| + * - OTHER | 
| + * - SCRIPT | 
| + * - IMAGE | 
| + * - STYLESHEET | 
| + * - OBJECT | 
| + * - SUBDOCUMENT | 
| + * - DOCUMENT | 
| + * - XMLHTTPREQUEST | 
| + * - OBJECT_SUBREQUEST | 
| + * - FONT | 
| + * - MEDIA | 
| + * @param documentUrl URL of the document requesting the resource. | 
| + * Note that there will be more than one document if frames are | 
| + * involved, see | 
| + * Matches(const std::string&, const std::string&, const std::vector<std::string>&) const. | 
| + * @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
 
 | 
| + */ | 
| FilterPtr Matches(const std::string& url, | 
| const std::string& contentType, | 
| const std::string& documentUrl) const; | 
| + | 
| + /** | 
| + * Checks if any active filter matches the supplied URL. | 
| + * @param url URL to match. | 
| + * @param contentType Content type of the requested resource, possible | 
| + * values are: | 
| + * - OTHER | 
| + * - SCRIPT | 
| + * - IMAGE | 
| + * - STYLESHEET | 
| + * - OBJECT | 
| + * - SUBDOCUMENT | 
| + * - DOCUMENT | 
| + * - XMLHTTPREQUEST | 
| + * - OBJECT_SUBREQUEST | 
| + * - FONT | 
| + * - MEDIA | 
| + * @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
 
 | 
| + * This will typically be the frame structure. If the application is | 
| + * not capable of identifying the frame structure, e.g. because it is | 
| + * a proxy, it can be approximated using `ReferrerMapping`. | 
| + * @return Matching filter, or `null` if there was no match. | 
| + */ | 
| FilterPtr Matches(const std::string& url, | 
| const std::string& contentType, | 
| const std::vector<std::string>& documentUrls) const; | 
| + | 
| + /** | 
| + * Retrieves CSS selectors for all active element hiding filters. | 
| + * @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.
 
 | 
| + * @return List of CSS selectors. | 
| + */ | 
| std::vector<std::string> GetElementHidingSelectors(const std::string& domain) const; | 
| + | 
| + /** | 
| + * Retrieves a preference value. | 
| + * @param pref Preference name. | 
| + * @return Preference value, or `null` if it doesn't exist. | 
| + */ | 
| JsValuePtr GetPref(const std::string& pref) const; | 
| + | 
| + /** | 
| + * Sets a preference value. | 
| + * @param pref Preference name. | 
| + * @param value New value of the preference. | 
| + */ | 
| void SetPref(const std::string& pref, JsValuePtr value); | 
| + | 
| + /** | 
| + * 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.
 
 | 
| + * @param url URL to extract the host from. | 
| + * @return Extracted host. | 
| + */ | 
| std::string GetHostFromURL(const std::string& url); | 
| + | 
| + /** | 
| + * Forces an immediate update check. | 
| + * @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.
 
 | 
| + */ | 
| void ForceUpdateCheck(UpdaterCallback callback = 0); | 
| + | 
| + /** | 
| + * Sets the callback invoked when the filters change. | 
| + * @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
 
 | 
| + */ | 
| void SetFilterChangeCallback(FilterChangeCallback callback); | 
| + | 
| + /** | 
| + * Removes the callback invoked when the filters change. | 
| + */ | 
| void RemoveFilterChangeCallback(); | 
| + | 
| + /** | 
| + * Compares two version strings in | 
| + * [Mozilla toolkit version format](https://developer.mozilla.org/en/docs/Toolkit_version_format). | 
| + * @param v1 First version string. | 
| + * @param v2 Second version string. | 
| + * @return | 
| + * - `0` if `v1` and `v2` are identical. | 
| + * - A negative number if `v1` is less than `v2`. | 
| + * - A positive number if `v1` is greater than `v2`. | 
| + */ | 
| int CompareVersions(const std::string& v1, const std::string& v2); | 
| private: |