| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 /* | |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | |
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | |
| 4 * | |
| 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 | |
| 7 * published by the Free Software Foundation. | |
| 8 * | |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 * GNU General Public License for more details. | |
| 13 * | |
| 14 * You should have received a copy of the GNU General Public License | |
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | |
| 16 */ | |
| 17 | |
| 1 #ifndef _PLUGIN_FILTER_H_ | 18 #ifndef _PLUGIN_FILTER_H_ |
| 2 #define _PLUGIN_FILTER_H_ | 19 #define _PLUGIN_FILTER_H_ |
| 3 | 20 |
| 4 | |
| 5 #include "PluginTypedef.h" | |
| 6 #include <memory> | 21 #include <memory> |
| 22 #include <AdblockPlus/FilterEngine.h> | |
| 7 | 23 |
| 8 enum CFilterElementHideAttrPos | 24 enum CFilterElementHideAttrPos |
| 9 { | 25 { |
| 10 POS_NONE = 0, STARTING, ENDING, ANYWHERE, EXACT | 26 POS_NONE = 0, STARTING, ENDING, ANYWHERE, EXACT |
| 11 }; | 27 }; |
| 12 | 28 |
| 13 enum CFilterElementHideAttrType | 29 enum CFilterElementHideAttrType |
| 14 { | 30 { |
| 15 TYPE_NONE = 0, STYLE, ID, CLASS | 31 TYPE_NONE = 0, STYLE, ID, CLASS |
| 16 }; | 32 }; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 73 | 89 |
| 74 // ============================================================================ | 90 // ============================================================================ |
| 75 // CFilter | 91 // CFilter |
| 76 // ============================================================================ | 92 // ============================================================================ |
| 77 | 93 |
| 78 class CFilter | 94 class CFilter |
| 79 { | 95 { |
| 80 | 96 |
| 81 public: | 97 public: |
| 82 | 98 |
| 83 enum EContentType | |
| 84 { | |
| 85 contentTypeUnknown = 0, | |
| 86 contentTypeOther = 1, | |
| 87 contentTypeScript = 2, | |
| 88 contentTypeImage = 4, | |
| 89 contentTypeStyleSheet = 8, | |
| 90 contentTypeObject = 16, | |
| 91 contentTypeSubdocument = 32, | |
| 92 contentTypeDocument = 64, | |
| 93 contentTypeBackground = 256, | |
| 94 contentTypeXbl = 512, | |
| 95 contentTypePing = 1024, | |
| 96 contentTypeXmlHttpRequest = 2048, | |
| 97 contentTypeObjectSubrequest = 4096, | |
| 98 contentTypeDtd = 8192, | |
| 99 contentTypeAny = 65535 | |
| 100 } contentType; | |
| 101 | 99 |
| 102 enum EFilterType | 100 enum EFilterType |
| 103 { | 101 { |
| 104 filterTypeBlocking = 0, | 102 filterTypeBlocking = 0, |
| 105 filterTypeWhiteList = 1, | 103 filterTypeWhiteList = 1, |
| 106 filterTypeElementHide = 2, | 104 filterTypeElementHide = 2, |
| 107 filterTypeUnknown = 3 | 105 filterTypeUnknown = 3 |
| 108 } filterType; | 106 } filterType; |
| 109 | 107 |
| 110 int m_contentType; | |
| 111 enum EFilterType m_filterType; | 108 enum EFilterType m_filterType; |
| 112 bool m_isMatchCase; | 109 bool m_isMatchCase; |
| 113 bool m_isFirstParty; | 110 bool m_isFirstParty; |
| 114 bool m_isThirdParty; | 111 bool m_isThirdParty; |
| 115 bool m_isFromStart; | 112 bool m_isFromStart; |
| 116 bool m_isFromEnd; | 113 bool m_isFromEnd; |
| 117 int m_hitCount; | 114 int m_hitCount; |
| 118 CString m_filterText; | 115 CString m_filterText; |
| 119 | 116 |
| 120 CFilter(const CFilter&); | 117 CFilter(const CFilter&); |
| 121 CFilter(); | 118 CFilter(); |
| 122 }; | 119 }; |
| 123 | 120 |
| 124 // ============================================================================ | 121 // ============================================================================ |
| 125 // CPluginFilter | 122 // CPluginFilter |
| 126 // ============================================================================ | 123 // ============================================================================ |
| 127 | 124 |
| 128 class CPluginFilter | 125 class CPluginFilter |
| 129 { | 126 { |
| 130 | 127 |
| 131 private: | 128 private: |
| 132 | 129 |
| 133 CString m_dataPath; | |
| 134 | |
| 135 std::map<int, CString> m_contentMapText; | |
| 136 | |
| 137 typedef std::map<DWORD, CFilter> TFilterMap; | |
| 138 typedef std::vector<CFilter> TFilterMapDefault; | |
| 139 | |
| 140 // (Tag,Name) -> Filter | 130 // (Tag,Name) -> Filter |
| 141 typedef std::multimap<std::pair<CString,CString>, CFilterElementHide> TFilterE lementHideTagsNamed; | 131 typedef std::multimap<std::pair<CString,CString>, CFilterElementHide> TFilterE lementHideTagsNamed; |
| 142 | 132 |
| 143 // Tag -> Filter | 133 // Tag -> Filter |
| 144 typedef std::multimap<CString, CFilterElementHide> TFilterElementHideTags; | 134 typedef std::multimap<CString, CFilterElementHide> TFilterElementHideTags; |
| 145 | 135 |
| 146 | 136 |
| 147 TFilterElementHideTagsNamed m_elementHideTagsId; | 137 TFilterElementHideTagsNamed m_elementHideTagsId; |
| 148 TFilterElementHideTagsNamed m_elementHideTagsClass; | 138 TFilterElementHideTagsNamed m_elementHideTagsClass; |
| 149 TFilterElementHideTags m_elementHideTags; | 139 TFilterElementHideTags m_elementHideTags; |
| 150 | |
| 151 TFilterMap m_filterMap[2][2]; | |
| 152 TFilterMapDefault m_filterMapDefault[2]; | |
| 153 std::vector<std::wstring> m_hideFilters; | 140 std::vector<std::wstring> m_hideFilters; |
| 154 | 141 |
| 155 void ClearFilters(); | |
| 156 | 142 |
| 157 public: | 143 public: |
| 158 | 144 explicit CPluginFilter(const std::vector<std::wstring>& filters); |
| 159 CPluginFilter(const CString& dataPath = ""); | |
| 160 | |
| 161 bool LoadHideFilters(const std::vector<std::wstring>& filters); | |
| 162 | |
| 163 bool AddFilterElementHide(CString filter); | 145 bool AddFilterElementHide(CString filter); |
| 164 | |
| 165 | |
| 166 bool IsElementHidden(const std::wstring& tag, IHTMLElement* pEl, const std::ws tring& domain, const std::wstring& indent) const; | 146 bool IsElementHidden(const std::wstring& tag, IHTMLElement* pEl, const std::ws tring& domain, const std::wstring& indent) const; |
| 167 | 147 const std::vector<std::wstring>& GetHideFilters() const { |
| 168 | 148 return m_hideFilters; |
| 169 bool ShouldBlock(const std::wstring& src, int contentType, const std::wstring& domain, bool addDebug=false) const; | 149 } |
| 170 | |
| 171 HANDLE hideFiltersLoadedEvent; | |
| 172 const std::vector<std::wstring>& getHideFilters() const; | |
|
Oleksandr
2015/02/04 20:59:57
GetHideFilters() to be consistent?
sergei
2015/04/13 08:06:58
fixed
| |
| 173 }; | 150 }; |
| 174 | 151 |
| 152 typedef std::shared_ptr<CPluginFilter> PluginFilterPtr; | |
| 175 | 153 |
| 176 #endif // _PLUGIN_FILTER_H_ | 154 #endif // _PLUGIN_FILTER_H_ |
| LEFT | RIGHT |