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

Delta Between Two Patch Sets: src/plugin/PluginFilter.cpp

Issue 5316782940225536: Issue 1557 - Update to the recent libadblockplus to reduce additional updates in the logic later. (Closed)
Left Patch Set: fix accoring to comments Created Jan. 13, 2015, 12:59 p.m.
Right Patch Set: rebase and remove member of CFilter Created Feb. 4, 2015, 12:50 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/plugin/PluginFilter.h ('k') | src/plugin/PluginWbPassThrough.h » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2015 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 #include "PluginStdAfx.h" 18 #include "PluginStdAfx.h"
2 19
3 #include "PluginFilter.h" 20 #include "PluginFilter.h"
4 #include "PluginSettings.h" 21 #include "PluginSettings.h"
5 #include "PluginClient.h" 22 #include "PluginClient.h"
6 #include "PluginClientFactory.h" 23 #include "PluginClientFactory.h"
7 #include "PluginMutex.h" 24 #include "PluginMutex.h"
8 #include "PluginSettings.h" 25 #include "PluginSettings.h"
9 #include "PluginSystem.h" 26 #include "PluginSystem.h"
10 #include "PluginClass.h" 27 #include "PluginClass.h"
11 #include "mlang.h" 28 #include "mlang.h"
12 29
13 #include "..\shared\CriticalSection.h" 30 #include "..\shared\CriticalSection.h"
14 #include "..\shared\Utils.h" 31 #include "..\shared\Utils.h"
15 #include "..\shared\ContentType.h"
16
17 32
18 // The filters are described at http://adblockplus.org/en/filters 33 // The filters are described at http://adblockplus.org/en/filters
19 34
20 static CriticalSection s_criticalSectionFilterMap; 35 static CriticalSection s_criticalSectionFilterMap;
21 36
22 namespace 37 namespace
23 { 38 {
24 struct GetHtmlElementAttributeResult 39 struct GetHtmlElementAttributeResult
25 { 40 {
26 GetHtmlElementAttributeResult() : isAttributeFound(false) 41 GetHtmlElementAttributeResult() : isAttributeFound(false)
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 m_predecessor = filter.m_predecessor; 264 m_predecessor = filter.m_predecessor;
250 } 265 }
251 266
252 267
253 // ============================================================================ 268 // ============================================================================
254 // CFilter 269 // CFilter
255 // ============================================================================ 270 // ============================================================================
256 271
257 CFilter::CFilter(const CFilter& filter) 272 CFilter::CFilter(const CFilter& filter)
258 { 273 {
259 m_contentType = filter.m_contentType;
260 m_filterType = filter.m_filterType; 274 m_filterType = filter.m_filterType;
261 275
262 m_isFirstParty = filter.m_isFirstParty; 276 m_isFirstParty = filter.m_isFirstParty;
263 m_isThirdParty = filter.m_isThirdParty; 277 m_isThirdParty = filter.m_isThirdParty;
264 278
265 m_isMatchCase = filter.m_isMatchCase; 279 m_isMatchCase = filter.m_isMatchCase;
266 m_isFromStart = filter.m_isFromStart; 280 m_isFromStart = filter.m_isFromStart;
267 m_isFromEnd = filter.m_isFromEnd; 281 m_isFromEnd = filter.m_isFromEnd;
268 282
269 m_filterText = filter.m_filterText; 283 m_filterText = filter.m_filterText;
270 284
271 m_hitCount = filter.m_hitCount; 285 m_hitCount = filter.m_hitCount;
272 } 286 }
273 287
274 288
275 CFilter::CFilter() : m_isMatchCase(false), m_isFirstParty(false), 289 CFilter::CFilter() : m_isMatchCase(false), m_isFirstParty(false),
276 m_isThirdParty(false), m_contentType(AdblockPlus::FilterEngine::ContentType::C ONTENT_TYPE_OTHER), 290 m_isThirdParty(false),
277 m_isFromStart(false), m_isFromEnd(false), m_hitCount(0) 291 m_isFromStart(false), m_isFromEnd(false), m_hitCount(0)
278 { 292 {
279 } 293 }
280 294
281 295
282 bool CFilterElementHide::IsMatchFilterElementHide(IHTMLElement* pEl) const 296 bool CFilterElementHide::IsMatchFilterElementHide(IHTMLElement* pEl) const
283 { 297 {
284 HRESULT hr; 298 HRESULT hr;
285 299
286 if (!m_tagId.IsEmpty()) 300 if (!m_tagId.IsEmpty())
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 if (!id.IsEmpty()) 563 if (!id.IsEmpty())
550 { 564 {
551 std::pair<TFilterElementHideTagsNamed::const_iterator, TFilterElementHideT agsNamed::const_iterator> idItEnum = 565 std::pair<TFilterElementHideTagsNamed::const_iterator, TFilterElementHideT agsNamed::const_iterator> idItEnum =
552 m_elementHideTagsId.equal_range(std::make_pair(tagCString, id)); 566 m_elementHideTagsId.equal_range(std::make_pair(tagCString, id));
553 for (TFilterElementHideTagsNamed::const_iterator idIt = idItEnum.first; id It != idItEnum.second; idIt ++) 567 for (TFilterElementHideTagsNamed::const_iterator idIt = idItEnum.first; id It != idItEnum.second; idIt ++)
554 { 568 {
555 if (idIt->second.IsMatchFilterElementHide(pEl)) 569 if (idIt->second.IsMatchFilterElementHide(pEl))
556 { 570 {
557 #ifdef ENABLE_DEBUG_RESULT 571 #ifdef ENABLE_DEBUG_RESULT
558 DEBUG_HIDE_EL(indent + "HideEl::Found (tag/id) filter:" + idIt->second .m_filterText) 572 DEBUG_HIDE_EL(indent + "HideEl::Found (tag/id) filter:" + idIt->second .m_filterText)
559 CPluginDebug::DebugResultHiding(tagCString, "id:" + id, idIt->second .m_filterText); 573 CPluginDebug::DebugResultHiding(tagCString, L"id:" + id, idIt->secon d.m_filterText);
560 #endif 574 #endif
561 return true; 575 return true;
562 } 576 }
563 } 577 }
564 578
565 // Search general id 579 // Search general id
566 idItEnum = m_elementHideTagsId.equal_range(std::make_pair("", id)); 580 idItEnum = m_elementHideTagsId.equal_range(std::make_pair("", id));
567 for (TFilterElementHideTagsNamed::const_iterator idIt = idItEnum.first; id It != idItEnum.second; idIt ++) 581 for (TFilterElementHideTagsNamed::const_iterator idIt = idItEnum.first; id It != idItEnum.second; idIt ++)
568 { 582 {
569 if (idIt->second.IsMatchFilterElementHide(pEl)) 583 if (idIt->second.IsMatchFilterElementHide(pEl))
570 { 584 {
571 #ifdef ENABLE_DEBUG_RESULT 585 #ifdef ENABLE_DEBUG_RESULT
572 DEBUG_HIDE_EL(indent + "HideEl::Found (?/id) filter:" + idIt->second.m _filterText) 586 DEBUG_HIDE_EL(indent + "HideEl::Found (?/id) filter:" + idIt->second.m _filterText)
573 CPluginDebug::DebugResultHiding(tagCString, "id:" + id, idIt->second .m_filterText); 587 CPluginDebug::DebugResultHiding(tagCString, L"id:" + id, idIt->secon d.m_filterText);
574 #endif 588 #endif
575 return true; 589 return true;
576 } 590 }
577 } 591 }
578 } 592 }
579 593
580 // Search tag/className filters 594 // Search tag/className filters
581 if (!classNames.IsEmpty()) 595 if (!classNames.IsEmpty())
582 { 596 {
583 int pos = 0; 597 int pos = 0;
584 CString className = classNames.Tokenize(L" \t\n\r", pos); 598 CString className = classNames.Tokenize(L" \t\n\r", pos);
585 while (pos >= 0) 599 while (pos >= 0)
586 { 600 {
587 std::pair<TFilterElementHideTagsNamed::const_iterator, TFilterElementHid eTagsNamed::const_iterator> classItEnum = 601 std::pair<TFilterElementHideTagsNamed::const_iterator, TFilterElementHid eTagsNamed::const_iterator> classItEnum =
588 m_elementHideTagsClass.equal_range(std::make_pair(tagCString, classNam e)); 602 m_elementHideTagsClass.equal_range(std::make_pair(tagCString, classNam e));
589 603
590 for (TFilterElementHideTagsNamed::const_iterator classIt = classItEnum.f irst; classIt != classItEnum.second; ++classIt) 604 for (TFilterElementHideTagsNamed::const_iterator classIt = classItEnum.f irst; classIt != classItEnum.second; ++classIt)
591 { 605 {
592 if (classIt->second.IsMatchFilterElementHide(pEl)) 606 if (classIt->second.IsMatchFilterElementHide(pEl))
593 { 607 {
594 #ifdef ENABLE_DEBUG_RESULT 608 #ifdef ENABLE_DEBUG_RESULT
595 DEBUG_HIDE_EL(indent + "HideEl::Found (tag/class) filter:" + classIt ->second.m_filterText) 609 DEBUG_HIDE_EL(indent + "HideEl::Found (tag/class) filter:" + classIt ->second.m_filterText)
596 CPluginDebug::DebugResultHiding(tagCString, "class:" + className, classIt->second.m_filterText); 610 CPluginDebug::DebugResultHiding(tagCString, L"class:" + className, classIt->second.m_filterText);
597 #endif 611 #endif
598 return true; 612 return true;
599 } 613 }
600 } 614 }
601 615
602 // Search general class name 616 // Search general class name
603 classItEnum = m_elementHideTagsClass.equal_range(std::make_pair("", clas sName)); 617 classItEnum = m_elementHideTagsClass.equal_range(std::make_pair("", clas sName));
604 for (TFilterElementHideTagsNamed::const_iterator classIt = classItEnum.f irst; classIt != classItEnum.second; ++ classIt) 618 for (TFilterElementHideTagsNamed::const_iterator classIt = classItEnum.f irst; classIt != classItEnum.second; ++ classIt)
605 { 619 {
606 if (classIt->second.IsMatchFilterElementHide(pEl)) 620 if (classIt->second.IsMatchFilterElementHide(pEl))
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 } 703 }
690 704
691 m_elementHideTags.clear(); 705 m_elementHideTags.clear();
692 m_elementHideTagsId.clear(); 706 m_elementHideTagsId.clear();
693 m_elementHideTagsClass.clear(); 707 m_elementHideTagsClass.clear();
694 } 708 }
695 } 709 }
696 710
697 bool CPluginFilter::ShouldBlock(const std::wstring& src, AdblockPlus::FilterEngi ne::ContentType contentType, const std::wstring& domain, bool addDebug) const 711 bool CPluginFilter::ShouldBlock(const std::wstring& src, AdblockPlus::FilterEngi ne::ContentType contentType, const std::wstring& domain, bool addDebug) const
698 { 712 {
699 CString srcCString = ToCString(src); 713 std::wstring srcTrimmed = TrimString(src);
700 714
701 // We should not block the empty string, so all filtering does not make sense 715 // We should not block the empty string, so all filtering does not make sense
702 // Therefore we just return 716 // Therefore we just return
703 if (srcCString.Trim().IsEmpty()) 717 if (srcTrimmed.empty())
704 { 718 {
705 return false; 719 return false;
706 } 720 }
707 721
708 CPluginSettings* settings = CPluginSettings::GetInstance(); 722 CPluginSettings* settings = CPluginSettings::GetInstance();
709 723
710 CPluginClient* client = CPluginClient::GetInstance(); 724 CPluginClient* client = CPluginClient::GetInstance();
711 bool result = client->Matches(ToWstring(srcCString), contentType, domain); 725 bool result = client->Matches(srcTrimmed, contentType, domain);
712 726
713 #ifdef ENABLE_DEBUG_RESULT 727 #ifdef ENABLE_DEBUG_RESULT
714 if (addDebug) 728 if (addDebug)
715 { 729 {
716 std::wstring type = ToUtf16String(ContentTypeToString(contentType)); 730 std::wstring type = ToUtf16String(AdblockPlus::FilterEngine::ContentTypeToSt ring(contentType));
717 if (result) 731 if (result)
718 { 732 {
719 DEBUG_FILTER("Filter::ShouldBlock " + type + " YES"); 733 CPluginDebug::DebugResultBlocking(ToCString(type), srcTrimmed, domain);
720 CPluginDebug::DebugResultBlocking(ToCString(type), srcCString, domain);
721 } 734 }
722 else 735 else
723 { 736 {
724 CPluginDebug::DebugResultIgnoring(ToCString(type), srcCString, domain); 737 CPluginDebug::DebugResultIgnoring(ToCString(type), srcTrimmed, domain);
725 } 738 }
726 } 739 }
727 #endif 740 #endif
728 return result; 741 return result;
729 } 742 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld