| OLD | NEW |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 | 2 |
| 3 #include "PluginFilter.h" | 3 #include "PluginFilter.h" |
| 4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
| 5 #include "PluginClient.h" | 5 #include "PluginClient.h" |
| 6 #include "PluginClientFactory.h" | 6 #include "PluginClientFactory.h" |
| 7 #include "PluginMutex.h" | 7 #include "PluginMutex.h" |
| 8 #include "PluginSettings.h" | 8 #include "PluginSettings.h" |
| 9 #include "PluginSystem.h" | 9 #include "PluginSystem.h" |
| 10 #include "PluginClass.h" | 10 #include "PluginClass.h" |
| 11 #include "mlang.h" | 11 #include "mlang.h" |
| 12 | 12 |
| 13 #include "..\shared\CriticalSection.h" | 13 #include "..\shared\CriticalSection.h" |
| 14 #include "..\shared\Utils.h" | 14 #include "..\shared\Utils.h" |
| 15 #include "..\shared\ContentType.h" |
| 15 | 16 |
| 16 | 17 |
| 17 // The filters are described at http://adblockplus.org/en/filters | 18 // The filters are described at http://adblockplus.org/en/filters |
| 18 | 19 |
| 19 static CriticalSection s_criticalSectionFilterMap; | 20 static CriticalSection s_criticalSectionFilterMap; |
| 20 | 21 |
| 21 namespace | 22 namespace |
| 22 { | 23 { |
| 23 struct GetHtmlElementAttributeResult | 24 struct GetHtmlElementAttributeResult |
| 24 { | 25 { |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 m_isMatchCase = filter.m_isMatchCase; | 268 m_isMatchCase = filter.m_isMatchCase; |
| 268 m_isFromStart = filter.m_isFromStart; | 269 m_isFromStart = filter.m_isFromStart; |
| 269 m_isFromEnd = filter.m_isFromEnd; | 270 m_isFromEnd = filter.m_isFromEnd; |
| 270 | 271 |
| 271 m_filterText = filter.m_filterText; | 272 m_filterText = filter.m_filterText; |
| 272 | 273 |
| 273 m_hitCount = filter.m_hitCount; | 274 m_hitCount = filter.m_hitCount; |
| 274 } | 275 } |
| 275 | 276 |
| 276 | 277 |
| 277 CFilter::CFilter() : m_isMatchCase(false), m_isFirstParty(false), m_isThirdParty
(false), m_contentType(CFilter::contentTypeAny), | 278 CFilter::CFilter() : m_isMatchCase(false), m_isFirstParty(false), |
| 279 m_isThirdParty(false), m_contentType(AdblockPlus::FilterEngine::ContentType::C
ONTENT_TYPE_OTHER), |
| 278 m_isFromStart(false), m_isFromEnd(false), m_hitCount(0) | 280 m_isFromStart(false), m_isFromEnd(false), m_hitCount(0) |
| 279 { | 281 { |
| 280 } | 282 } |
| 281 | 283 |
| 282 | 284 |
| 283 bool CFilterElementHide::IsMatchFilterElementHide(IHTMLElement* pEl) const | 285 bool CFilterElementHide::IsMatchFilterElementHide(IHTMLElement* pEl) const |
| 284 { | 286 { |
| 285 HRESULT hr; | 287 HRESULT hr; |
| 286 | 288 |
| 287 if (!m_tagId.IsEmpty()) | 289 if (!m_tagId.IsEmpty()) |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 } | 454 } |
| 453 | 455 |
| 454 | 456 |
| 455 | 457 |
| 456 // ============================================================================ | 458 // ============================================================================ |
| 457 // CPluginFilter | 459 // CPluginFilter |
| 458 // ============================================================================ | 460 // ============================================================================ |
| 459 | 461 |
| 460 CPluginFilter::CPluginFilter(const CString& dataPath) : m_dataPath(dataPath) | 462 CPluginFilter::CPluginFilter(const CString& dataPath) : m_dataPath(dataPath) |
| 461 { | 463 { |
| 462 m_contentMapText[CFilter::contentTypeDocument] = "DOCUMENT"; | 464 ClearFilters(); |
| 463 m_contentMapText[CFilter::contentTypeObject] = "OBJECT"; | |
| 464 m_contentMapText[CFilter::contentTypeObjectSubrequest] = "OBJECT_SUBREQUEST"; | |
| 465 m_contentMapText[CFilter::contentTypeImage] = "IMAGE"; | |
| 466 m_contentMapText[CFilter::contentTypeScript] = "SCRIPT"; | |
| 467 m_contentMapText[CFilter::contentTypeOther] = "OTHER"; | |
| 468 m_contentMapText[CFilter::contentTypeUnknown] = "OTHER"; | |
| 469 m_contentMapText[CFilter::contentTypeSubdocument] = "SUBDOCUMENT"; | |
| 470 m_contentMapText[CFilter::contentTypeStyleSheet] = "STYLESHEET"; | |
| 471 m_contentMapText[CFilter::contentTypeXmlHttpRequest] = "XMLHTTPREQUEST"; | |
| 472 | |
| 473 ClearFilters(); | |
| 474 } | 465 } |
| 475 | 466 |
| 476 | 467 |
| 477 bool CPluginFilter::AddFilterElementHide(CString filterText) | 468 bool CPluginFilter::AddFilterElementHide(CString filterText) |
| 478 { | 469 { |
| 479 DEBUG_FILTER("Input: " + filterText + " filterFile" + filterFile); | 470 DEBUG_FILTER("Input: " + filterText + " filterFile" + filterFile); |
| 480 CriticalSection::Lock filterEngineLock(s_criticalSectionFilterMap); | 471 CriticalSection::Lock filterEngineLock(s_criticalSectionFilterMap); |
| 481 { | 472 { |
| 482 CString filterString = filterText; | 473 CString filterString = filterText; |
| 483 // Create filter descriptor | 474 // Create filter descriptor |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 } | 691 } |
| 701 m_filterMapDefault[i].clear(); | 692 m_filterMapDefault[i].clear(); |
| 702 } | 693 } |
| 703 | 694 |
| 704 m_elementHideTags.clear(); | 695 m_elementHideTags.clear(); |
| 705 m_elementHideTagsId.clear(); | 696 m_elementHideTagsId.clear(); |
| 706 m_elementHideTagsClass.clear(); | 697 m_elementHideTagsClass.clear(); |
| 707 } | 698 } |
| 708 } | 699 } |
| 709 | 700 |
| 710 bool CPluginFilter::ShouldBlock(const std::wstring& src, int contentType, const
std::wstring& domain, bool addDebug) const | 701 bool CPluginFilter::ShouldBlock(const std::wstring& src, AdblockPlus::FilterEngi
ne::ContentType contentType, const std::wstring& domain, bool addDebug) const |
| 711 { | 702 { |
| 712 CString srcCString = to_CString(src); | 703 CString srcCString = to_CString(src); |
| 713 | 704 |
| 714 // We should not block the empty string, so all filtering does not make sense | 705 // We should not block the empty string, so all filtering does not make sense |
| 715 // Therefore we just return | 706 // Therefore we just return |
| 716 if (srcCString.Trim().IsEmpty()) | 707 if (srcCString.Trim().IsEmpty()) |
| 717 { | 708 { |
| 718 return false; | 709 return false; |
| 719 } | 710 } |
| 720 | 711 |
| 721 CPluginSettings* settings = CPluginSettings::GetInstance(); | 712 CPluginSettings* settings = CPluginSettings::GetInstance(); |
| 722 | 713 |
| 723 CString type; | 714 CPluginClient* client = CPluginClient::GetInstance(); |
| 715 bool result = client->Matches(to_wstring(srcCString), contentType, domain); |
| 716 |
| 717 #ifdef ENABLE_DEBUG_RESULT |
| 724 if (addDebug) | 718 if (addDebug) |
| 725 { | 719 { |
| 726 type = "OTHER"; | 720 std::wstring type = ToUtf16String(ContentTypeToString(contentType)); |
| 727 | 721 if (result) |
| 728 std::map<int,CString>::const_iterator it = m_contentMapText.find(contentType
); | |
| 729 if (it != m_contentMapText.end()) | |
| 730 { | 722 { |
| 731 type = it->second; | 723 DEBUG_FILTER("Filter::ShouldBlock " + type + " YES"); |
| 724 CPluginDebug::DebugResultBlocking(to_CString(type), srcCString, domain); |
| 725 } |
| 726 else |
| 727 { |
| 728 CPluginDebug::DebugResultIgnoring(to_CString(type), srcCString, domain); |
| 732 } | 729 } |
| 733 } | 730 } |
| 734 | |
| 735 CPluginClient* client = CPluginClient::GetInstance(); | |
| 736 if (client->Matches(to_wstring(srcCString), to_wstring(type), domain)) | |
| 737 { | |
| 738 if (addDebug) | |
| 739 { | |
| 740 DEBUG_FILTER("Filter::ShouldBlock " + type + " YES") | |
| 741 | |
| 742 #ifdef ENABLE_DEBUG_RESULT | |
| 743 CPluginDebug::DebugResultBlocking(type, srcCString, domain); | |
| 744 #endif | 731 #endif |
| 745 } | 732 return result; |
| 746 return true; | |
| 747 } | |
| 748 #ifdef ENABLE_DEBUG_RESULT | |
| 749 CPluginDebug::DebugResultIgnoring(type, srcCString, domain); | |
| 750 #endif | |
| 751 return false; | |
| 752 } | 733 } |
| OLD | NEW |