| LEFT | RIGHT | 
|    1 /* |    1 /* | 
|    2  * This file is part of Adblock Plus <https://adblockplus.org/>, |    2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|    3  * Copyright (C) 2006-2015 Eyeo GmbH |    3  * Copyright (C) 2006-2016 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 | 
|   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|   12  * GNU General Public License for more details. |   12  * GNU General Public License for more details. | 
|   13  * |   13  * | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   26 #include <AdblockPlus/JsValue.h> |   26 #include <AdblockPlus/JsValue.h> | 
|   27 #include <AdblockPlus/Notification.h> |   27 #include <AdblockPlus/Notification.h> | 
|   28  |   28  | 
|   29 namespace AdblockPlus |   29 namespace AdblockPlus | 
|   30 { |   30 { | 
|   31   class FilterEngine; |   31   class FilterEngine; | 
|   32  |   32  | 
|   33   /** |   33   /** | 
|   34    * Wrapper for an Adblock Plus filter object. |   34    * Wrapper for an Adblock Plus filter object. | 
|   35    * There are no accessors for most |   35    * There are no accessors for most | 
|   36    * [filter properties](https://adblockplus.org/jsdoc/adblockplus/symbols/Filte
     r.html), |   36    * [filter properties](https://adblockplus.org/jsdoc/adblockpluscore/Filter.ht
     ml), | 
|   37    * use `GetProperty()` to retrieve them by name. |   37    * use `GetProperty()` to retrieve them by name. | 
|   38    */ |   38    */ | 
|   39   class Filter : public JsValue, |   39   class Filter : public JsValue, | 
|   40                  public std::enable_shared_from_this<Filter> |   40                  public std::enable_shared_from_this<Filter> | 
|   41   { |   41   { | 
|   42   public: |   42   public: | 
|   43     /** |   43     /** | 
|   44      * Filter types, see https://adblockplus.org/en/filters. |   44      * Filter types, see https://adblockplus.org/en/filters. | 
|   45      */ |   45      */ | 
|   46     enum Type {TYPE_BLOCKING, TYPE_EXCEPTION, |   46     enum Type {TYPE_BLOCKING, TYPE_EXCEPTION, | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
|   76      * Normally you shouldn't call this directly, but use |   76      * Normally you shouldn't call this directly, but use | 
|   77      * FilterEngine::GetFilter() instead. |   77      * FilterEngine::GetFilter() instead. | 
|   78      * @param value JavaScript filter object. |   78      * @param value JavaScript filter object. | 
|   79      */ |   79      */ | 
|   80     Filter(JsValue&& value); |   80     Filter(JsValue&& value); | 
|   81   }; |   81   }; | 
|   82  |   82  | 
|   83   /** |   83   /** | 
|   84    * Wrapper for a subscription object. |   84    * Wrapper for a subscription object. | 
|   85    * There are no accessors for most |   85    * There are no accessors for most | 
|   86    * [subscription properties](https://adblockplus.org/jsdoc/adblockplus/symbols
     /Subscription.html), |   86    * [subscription properties](https://adblockplus.org/jsdoc/adblockpluscore/Sub
     scription.html), | 
|   87    * use `GetProperty()` to retrieve them by name. |   87    * use `GetProperty()` to retrieve them by name. | 
|   88    */ |   88    */ | 
|   89   class Subscription : public JsValue, |   89   class Subscription : public JsValue, | 
|   90                        public std::enable_shared_from_this<Subscription> |   90                        public std::enable_shared_from_this<Subscription> | 
|   91   { |   91   { | 
|   92   public: |   92   public: | 
|   93     /** |   93     /** | 
|   94      * Checks if this subscription has been added to the list of subscriptions. |   94      * Checks if this subscription has been added to the list of subscriptions. | 
|   95      * @return `true` if this subscription has been added. |   95      * @return `true` if this subscription has been added. | 
|   96      */ |   96      */ | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  143    * Main component of libadblockplus. |  143    * Main component of libadblockplus. | 
|  144    * It handles: |  144    * It handles: | 
|  145    * - Filter management and matching. |  145    * - Filter management and matching. | 
|  146    * - Subscription management and synchronization. |  146    * - Subscription management and synchronization. | 
|  147    * - Update checks for the application. |  147    * - Update checks for the application. | 
|  148    */ |  148    */ | 
|  149   class FilterEngine |  149   class FilterEngine | 
|  150   { |  150   { | 
|  151   public: |  151   public: | 
|  152     // Make sure to keep ContentType in sync with FilterEngine::contentTypes |  152     // Make sure to keep ContentType in sync with FilterEngine::contentTypes | 
 |  153     // and with RegExpFilter.typeMap from filterClasses.js. | 
|  153     /** |  154     /** | 
|  154      * Possible resource content types. |  155      * Possible resource content types. | 
|  155      */ |  156      */ | 
|  156     enum ContentType {CONTENT_TYPE_OTHER, CONTENT_TYPE_SCRIPT, |  157     enum ContentType | 
|  157                       CONTENT_TYPE_IMAGE, CONTENT_TYPE_STYLESHEET, |  158     { | 
|  158                       CONTENT_TYPE_OBJECT, CONTENT_TYPE_SUBDOCUMENT, |  159       CONTENT_TYPE_OTHER = 1, | 
|  159                       CONTENT_TYPE_DOCUMENT, CONTENT_TYPE_XMLHTTPREQUEST, |  160       CONTENT_TYPE_SCRIPT = 2, | 
|  160                       CONTENT_TYPE_OBJECT_SUBREQUEST, CONTENT_TYPE_FONT, |  161       CONTENT_TYPE_IMAGE = 4, | 
|  161                       CONTENT_TYPE_MEDIA, CONTENT_TYPE_ELEMHIDE}; |  162       CONTENT_TYPE_STYLESHEET = 8, | 
 |  163       CONTENT_TYPE_OBJECT = 16, | 
 |  164       CONTENT_TYPE_SUBDOCUMENT = 32, | 
 |  165       CONTENT_TYPE_DOCUMENT = 64, | 
 |  166       CONTENT_TYPE_PING = 1024, | 
 |  167       CONTENT_TYPE_XMLHTTPREQUEST = 2048, | 
 |  168       CONTENT_TYPE_OBJECT_SUBREQUEST = 4096, | 
 |  169       CONTENT_TYPE_MEDIA = 16384, | 
 |  170       CONTENT_TYPE_FONT = 32768, | 
 |  171       CONTENT_TYPE_GENERICBLOCK = 0x20000000, | 
 |  172       CONTENT_TYPE_ELEMHIDE = 0x40000000, | 
 |  173       CONTENT_TYPE_GENERICHIDE = 0x80000000 | 
 |  174     }; | 
 |  175  | 
 |  176     /** | 
 |  177      * Bitmask of `ContentType` values. | 
 |  178      * The underlying type is signed 32 bit integer because it is actually used | 
 |  179      * in JavaScript where it is converted into 32 bit signed integer. | 
 |  180      */ | 
 |  181     typedef int32_t ContentTypeMask; | 
|  162  |  182  | 
|  163     /** |  183     /** | 
|  164      * Callback type invoked when an update becomes available. |  184      * Callback type invoked when an update becomes available. | 
|  165      * The parameter is the download URL of the update. |  185      * The parameter is the download URL of the update. | 
|  166      */ |  186      */ | 
|  167     typedef std::function<void(const std::string&)> UpdateAvailableCallback; |  187     typedef std::function<void(const std::string&)> UpdateAvailableCallback; | 
|  168  |  188  | 
|  169     /** |  189     /** | 
|  170      * Callback type invoked when a manually triggered update check finishes. |  190      * Callback type invoked when a manually triggered update check finishes. | 
|  171      * The parameter is an optional error message. |  191      * The parameter is an optional error message. | 
|  172      */ |  192      */ | 
|  173     typedef std::function<void(const std::string&)> UpdateCheckDoneCallback; |  193     typedef std::function<void(const std::string&)> UpdateCheckDoneCallback; | 
|  174  |  194  | 
|  175     /** |  195     /** | 
|  176      * Callback type invoked when the filters change. |  196      * Callback type invoked when the filters change. | 
|  177      * The first parameter is the action event code (see |  197      * The first parameter is the action event code (see | 
|  178      * [FilterNotifier.triggerListeners](https://adblockplus.org/jsdoc/adblockpl
     us/symbols/FilterNotifier.html#.triggerListeners) |  198      * [FilterNotifier.triggerListeners](https://adblockplus.org/jsdoc/adblockpl
     uscore/FilterNotifier.html#.triggerListeners) | 
|  179      * for the full list). |  199      * for the full list). | 
|  180      * The second parameter is the filter/subscription object affected, if any. |  200      * The second parameter is the filter/subscription object affected, if any. | 
|  181      */ |  201      */ | 
|  182     typedef std::function<void(const std::string&, const JsValuePtr)> FilterChan
     geCallback; |  202     typedef std::function<void(const std::string&, const JsValuePtr)> FilterChan
     geCallback; | 
|  183  |  203  | 
|  184     /** |  204     /** | 
|  185      * Container of name-value pairs representing a set of preferences. |  205      * Container of name-value pairs representing a set of preferences. | 
|  186      */ |  206      */ | 
|  187     typedef std::map<std::string, AdblockPlus::JsValuePtr> Prefs; |  207     typedef std::map<std::string, AdblockPlus::JsValuePtr> Prefs; | 
|  188  |  208  | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  262     void SetShowNotificationCallback(const ShowNotificationCallback& value); |  282     void SetShowNotificationCallback(const ShowNotificationCallback& value); | 
|  263  |  283  | 
|  264     /** |  284     /** | 
|  265      * Removes the callback invoked when a notification should be shown. |  285      * Removes the callback invoked when a notification should be shown. | 
|  266      */ |  286      */ | 
|  267     void RemoveShowNotificationCallback(); |  287     void RemoveShowNotificationCallback(); | 
|  268  |  288  | 
|  269     /** |  289     /** | 
|  270      * Checks if any active filter matches the supplied URL. |  290      * Checks if any active filter matches the supplied URL. | 
|  271      * @param url URL to match. |  291      * @param url URL to match. | 
|  272      * @param contentType Content type of the requested resource. |  292      * @param contentTypeMask Content type mask of the requested resource. | 
|  273      * @param documentUrl URL of the document requesting the resource. |  293      * @param documentUrl URL of the document requesting the resource. | 
|  274      *        Note that there will be more than one document if frames are |  294      *        Note that there will be more than one document if frames are | 
|  275      *        involved, see |  295      *        involved, see | 
|  276      *        Matches(const std::string&, const std::string&, const std::vector<
     std::string>&) const. |  296      *        Matches(const std::string&, const std::string&, const std::vector<
     std::string>&) const. | 
|  277      * @return Matching filter, or `null` if there was no match. |  297      * @return Matching filter, or `null` if there was no match. | 
|  278      * @throw `std::invalid_argument`, if an invalid `contentType` was supplied. |  298      * @throw `std::invalid_argument`, if an invalid `contentType` was supplied. | 
|  279      */ |  299      */ | 
|  280     FilterPtr Matches(const std::string& url, |  300     FilterPtr Matches(const std::string& url, | 
|  281         ContentType contentType, |  301         ContentTypeMask contentTypeMask, | 
|  282         const std::string& documentUrl) const; |  302         const std::string& documentUrl) const; | 
|  283  |  303  | 
|  284     /** |  304     /** | 
|  285      * Checks if any active filter matches the supplied URL. |  305      * Checks if any active filter matches the supplied URL. | 
|  286      * @param url URL to match. |  306      * @param url URL to match. | 
|  287      * @param contentType Content type of the requested resource. |  307      * @param contentTypeMask Content type mask of the requested resource. | 
|  288      * @param documentUrls Chain of documents requesting the resource, starting |  308      * @param documentUrls Chain of documents requesting the resource, starting | 
|  289      *        with the current resource's parent frame, ending with the |  309      *        with the current resource's parent frame, ending with the | 
|  290      *        top-level frame. |  310      *        top-level frame. | 
|  291      *        If the application is not capable of identifying the frame |  311      *        If the application is not capable of identifying the frame | 
|  292      *        structure, e.g. because it is a proxy, it can be approximated |  312      *        structure, e.g. because it is a proxy, it can be approximated | 
|  293      *        using `ReferrerMapping`. |  313      *        using `ReferrerMapping`. | 
|  294      * @return Matching filter, or a `null` if there was no match. |  314      * @return Matching filter, or a `null` if there was no match. | 
|  295      * @throw `std::invalid_argument`, if an invalid `contentType` was supplied. |  315      * @throw `std::invalid_argument`, if an invalid `contentType` was supplied. | 
|  296      */ |  316      */ | 
|  297     FilterPtr Matches(const std::string& url, |  317     FilterPtr Matches(const std::string& url, | 
|  298         ContentType contentType, |  318         ContentTypeMask contentTypeMask, | 
 |  319         const std::vector<std::string>& documentUrls) const; | 
 |  320  | 
 |  321     /** | 
 |  322      * Checks whether the document at the supplied URL is whitelisted. | 
 |  323      * @param url URL of the document. | 
 |  324      * @param documentUrls Chain of document URLs requesting the document, | 
 |  325      *        starting with the current document's parent frame, ending with | 
 |  326      *        the top-level frame. | 
 |  327      *        If the application is not capable of identifying the frame | 
 |  328      *        structure, e.g. because it is a proxy, it can be approximated | 
 |  329      *        using `ReferrerMapping`. | 
 |  330      * @return `true` if the URL is whitelisted. | 
 |  331      */ | 
 |  332     bool IsDocumentWhitelisted(const std::string& url, | 
 |  333         const std::vector<std::string>& documentUrls) const; | 
 |  334  | 
 |  335     /** | 
 |  336      * Checks whether element hiding is disabled at the supplied URL. | 
 |  337      * @param url URL of the document. | 
 |  338      * @param documentUrls Chain of document URLs requesting the document, | 
 |  339      *        starting with the current document's parent frame, ending with | 
 |  340      *        the top-level frame. | 
 |  341      *        If the application is not capable of identifying the frame | 
 |  342      *        structure, e.g. because it is a proxy, it can be approximated | 
 |  343      *        using `ReferrerMapping`. | 
 |  344      * @return `true` if element hiding is whitelisted for the supplied URL. | 
 |  345      */ | 
 |  346     bool IsElemhideWhitelisted(const std::string& url, | 
|  299         const std::vector<std::string>& documentUrls) const; |  347         const std::vector<std::string>& documentUrls) const; | 
|  300  |  348  | 
|  301     /** |  349     /** | 
|  302      * Retrieves CSS selectors for all element hiding filters active on the |  350      * Retrieves CSS selectors for all element hiding filters active on the | 
|  303      * supplied domain. |  351      * supplied domain. | 
|  304      * @param domain Domain to retrieve CSS selectors for. |  352      * @param domain Domain to retrieve CSS selectors for. | 
|  305      * @return List of CSS selectors. |  353      * @return List of CSS selectors. | 
|  306      */ |  354      */ | 
|  307     std::vector<std::string> GetElementHidingSelectors(const std::string& domain
     ) const; |  355     std::vector<std::string> GetElementHidingSelectors(const std::string& domain
     ) const; | 
|  308  |  356  | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  394  |  442  | 
|  395   private: |  443   private: | 
|  396     JsEnginePtr jsEngine; |  444     JsEnginePtr jsEngine; | 
|  397     bool initialized; |  445     bool initialized; | 
|  398     bool firstRun; |  446     bool firstRun; | 
|  399     int updateCheckId; |  447     int updateCheckId; | 
|  400     static const std::map<ContentType, std::string> contentTypes; |  448     static const std::map<ContentType, std::string> contentTypes; | 
|  401  |  449  | 
|  402     void InitDone(JsValueList& params); |  450     void InitDone(JsValueList& params); | 
|  403     FilterPtr CheckFilterMatch(const std::string& url, |  451     FilterPtr CheckFilterMatch(const std::string& url, | 
|  404                                ContentType contentType, |  452                                ContentTypeMask contentTypeMask, | 
|  405                                const std::string& documentUrl) const; |  453                                const std::string& documentUrl) const; | 
|  406     void UpdateAvailable(UpdateAvailableCallback callback, JsValueList& params); |  454     void UpdateAvailable(UpdateAvailableCallback callback, JsValueList& params); | 
|  407     void UpdateCheckDone(const std::string& eventName, |  455     void UpdateCheckDone(const std::string& eventName, | 
|  408                          UpdateCheckDoneCallback callback, JsValueList& params); |  456                          UpdateCheckDoneCallback callback, JsValueList& params); | 
|  409     void FilterChanged(FilterChangeCallback callback, JsValueList& params); |  457     void FilterChanged(FilterChangeCallback callback, JsValueList& params); | 
|  410     void ShowNotification(const ShowNotificationCallback& callback, |  458     void ShowNotification(const ShowNotificationCallback& callback, | 
|  411       const JsValueList& params); |  459       const JsValueList& params); | 
 |  460     FilterPtr GetWhitelistingFilter(const std::string& url, | 
 |  461       ContentTypeMask contentTypeMask, const std::string& documentUrl) const; | 
 |  462     FilterPtr GetWhitelistingFilter(const std::string& url, | 
 |  463       ContentTypeMask contentTypeMask, | 
 |  464       const std::vector<std::string>& documentUrls) const; | 
|  412   }; |  465   }; | 
|  413 } |  466 } | 
|  414  |  467  | 
|  415 #endif |  468 #endif | 
| LEFT | RIGHT |