@@ -344,7 +344,7 @@ void AdblockContentFiltersProfile::deleteNode(Node *node) const
344344 delete node;
345345}
346346
347- ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstring (const Node *node, const QString &subString, QString currentRule, NetworkManager::ResourceType resourceType)
347+ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstring (const Node *node, const QString &subString, QString currentRule, const Request &request) const
348348{
349349 ContentFiltersManager::CheckResult result;
350350 ContentFiltersManager::CheckResult currentResult;
@@ -354,7 +354,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
354354 const QChar treeChar (subString.at (i));
355355 bool childrenExists (false );
356356
357- currentResult = evaluateRulesInNode (node, currentRule, resourceType );
357+ currentResult = evaluateRulesInNode (node, currentRule, request );
358358
359359 if (currentResult.isBlocked )
360360 {
@@ -375,7 +375,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
375375
376376 for (int k = 0 ; k < wildcardSubString.length (); ++k)
377377 {
378- currentResult = checkUrlSubstring (nextNode, wildcardSubString.right (wildcardSubString.length () - k), (currentRule + wildcardSubString.left (k)), resourceType );
378+ currentResult = checkUrlSubstring (nextNode, wildcardSubString.right (wildcardSubString.length () - k), (currentRule + wildcardSubString.left (k)), request );
379379
380380 if (currentResult.isBlocked )
381381 {
@@ -390,7 +390,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
390390
391391 if (nextNode->value == QLatin1Char (' ^' ) && !treeChar.isDigit () && !treeChar.isLetter () && !m_separators.contains (treeChar))
392392 {
393- currentResult = checkUrlSubstring (nextNode, subString.mid (i), currentRule, resourceType );
393+ currentResult = checkUrlSubstring (nextNode, subString.mid (i), currentRule, request );
394394
395395 if (currentResult.isBlocked )
396396 {
@@ -420,7 +420,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
420420 currentRule += treeChar;
421421 }
422422
423- currentResult = evaluateRulesInNode (node, currentRule, resourceType );
423+ currentResult = evaluateRulesInNode (node, currentRule, request );
424424
425425 if (currentResult.isBlocked )
426426 {
@@ -435,7 +435,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
435435 {
436436 if (node->children .at (i)->value == QLatin1Char (' ^' ))
437437 {
438- currentResult = evaluateRulesInNode (node, currentRule, resourceType );
438+ currentResult = evaluateRulesInNode (node, currentRule, request );
439439
440440 if (currentResult.isBlocked )
441441 {
@@ -451,41 +451,41 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrlSubstri
451451 return result;
452452}
453453
454- ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkRuleMatch (const ContentBlockingRule *rule, const QString ¤tRule, NetworkManager::ResourceType resourceType ) const
454+ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkRuleMatch (const ContentBlockingRule *rule, const QString ¤tRule, const Request &request ) const
455455{
456456 switch (rule->ruleMatch )
457457 {
458458 case StartMatch:
459- if (!m_requestUrl .startsWith (currentRule))
459+ if (!request. requestUrl .startsWith (currentRule))
460460 {
461461 return {};
462462 }
463463
464464 break ;
465465 case EndMatch:
466- if (!m_requestUrl .endsWith (currentRule))
466+ if (!request. requestUrl .endsWith (currentRule))
467467 {
468468 return {};
469469 }
470470
471471 break ;
472472 case ExactMatch:
473- if (m_requestUrl != currentRule)
473+ if (request. requestUrl != currentRule)
474474 {
475475 return {};
476476 }
477477
478478 break ;
479479 default :
480- if (!m_requestUrl .contains (currentRule))
480+ if (!request. requestUrl .contains (currentRule))
481481 {
482482 return {};
483483 }
484484
485485 break ;
486486 }
487487
488- const QStringList requestSubdomainList (ContentFiltersManager::createSubdomainList (m_requestHost ));
488+ const QStringList requestSubdomainList (ContentFiltersManager::createSubdomainList (request. requestHost ));
489489
490490 if (rule->needsDomainCheck && !requestSubdomainList.contains (currentRule.left (currentRule.indexOf (m_domainExpression))))
491491 {
@@ -498,19 +498,19 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkRuleMatch(
498498
499499 if (hasBlockedDomains)
500500 {
501- isBlocked = resolveDomainExceptions (m_baseUrlHost , rule->blockedDomains );
501+ isBlocked = resolveDomainExceptions (request. baseHost , rule->blockedDomains );
502502
503503 if (!isBlocked)
504504 {
505505 return {};
506506 }
507507 }
508508
509- isBlocked = (hasAllowedDomains ? !resolveDomainExceptions (m_baseUrlHost , rule->allowedDomains ) : isBlocked);
509+ isBlocked = (hasAllowedDomains ? !resolveDomainExceptions (request. baseHost , rule->allowedDomains ) : isBlocked);
510510
511511 if (rule->ruleOptions .testFlag (ThirdPartyExceptionOption) || rule->ruleOptions .testFlag (ThirdPartyOption))
512512 {
513- if (m_baseUrlHost. isEmpty () || requestSubdomainList.contains (m_baseUrlHost ))
513+ if (request. baseHost . isEmpty () || requestSubdomainList.contains (request. baseHost ))
514514 {
515515 isBlocked = rule->ruleOptions .testFlag (ThirdPartyExceptionOption);
516516 }
@@ -530,7 +530,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkRuleMatch(
530530
531531 if (rule->ruleOptions .testFlag (iterator.value ()) || (supportsException && rule->ruleOptions .testFlag (static_cast <RuleOption>(iterator.value () * 2 ))))
532532 {
533- if (resourceType == iterator.key ())
533+ if (request. resourceType == iterator.key ())
534534 {
535535 isBlocked = (isBlocked ? rule->ruleOptions .testFlag (iterator.value ()) : isBlocked);
536536 }
@@ -545,7 +545,7 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkRuleMatch(
545545 }
546546 }
547547 }
548- else if (resourceType == NetworkManager::PopupType)
548+ else if (request. resourceType == NetworkManager::PopupType)
549549 {
550550 isBlocked = false ;
551551 }
@@ -736,15 +736,15 @@ QUrl AdblockContentFiltersProfile::getUpdateUrl() const
736736 return m_updateUrl;
737737}
738738
739- ContentFiltersManager::CheckResult AdblockContentFiltersProfile::evaluateRulesInNode (const Node *node, const QString ¤tRule, NetworkManager::ResourceType resourceType ) const
739+ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::evaluateRulesInNode (const Node *node, const QString ¤tRule, const Request &request ) const
740740{
741741 ContentFiltersManager::CheckResult result;
742742
743743 for (int i = 0 ; i < node->rules .count (); ++i)
744744 {
745745 if (node->rules .at (i))
746746 {
747- ContentFiltersManager::CheckResult currentResult (checkRuleMatch (node->rules .at (i), currentRule, resourceType ));
747+ ContentFiltersManager::CheckResult currentResult (checkRuleMatch (node->rules .at (i), currentRule, request ));
748748
749749 if (currentResult.isBlocked )
750750 {
@@ -769,18 +769,11 @@ ContentFiltersManager::CheckResult AdblockContentFiltersProfile::checkUrl(const
769769 return result;
770770 }
771771
772- m_baseUrlHost = baseUrl.host ();
773- m_requestUrl = requestUrl.url ();
774- m_requestHost = requestUrl.host ();
772+ const Request request (baseUrl, requestUrl, resourceType);
775773
776- if (m_requestUrl. startsWith ( QLatin1String ( " // " )) )
774+ for ( int i = 0 ; i < request. requestUrl . length (); ++i )
777775 {
778- m_requestUrl = m_requestUrl.mid (2 );
779- }
780-
781- for (int i = 0 ; i < m_requestUrl.length (); ++i)
782- {
783- const ContentFiltersManager::CheckResult currentResult (checkUrlSubstring (m_root, m_requestUrl.right (m_requestUrl.length () - i), {}, resourceType));
776+ const ContentFiltersManager::CheckResult currentResult (checkUrlSubstring (m_root, request.requestUrl .right (request.requestUrl .length () - i), {}, request));
784777
785778 if (currentResult.isBlocked )
786779 {
0 commit comments