mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-24 04:36:34 +01:00
Implement generichide and enable elemhide
This commit is contained in:
parent
8080d3b70b
commit
b0b89339f3
@ -412,7 +412,7 @@ bool AdBlockManager::canBeBlocked(const QUrl &url) const
|
||||
|
||||
QString AdBlockManager::elementHidingRules(const QUrl &url) const
|
||||
{
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url))
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || m_matcher->genericElemHideDisabledForUrl(url))
|
||||
return QString();
|
||||
|
||||
return m_matcher->elementHidingRules();
|
||||
@ -420,7 +420,7 @@ QString AdBlockManager::elementHidingRules(const QUrl &url) const
|
||||
|
||||
QString AdBlockManager::elementHidingRulesForDomain(const QUrl &url) const
|
||||
{
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || !canBeBlocked(url))
|
||||
if (!isEnabled() || !canRunOnScheme(url.scheme()) || m_matcher->elemHideDisabledForUrl(url))
|
||||
return QString();
|
||||
|
||||
return m_matcher->elementHidingRulesForDomain(url.host());
|
||||
|
@ -83,6 +83,20 @@ bool AdBlockMatcher::elemHideDisabledForUrl(const QUrl &url) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AdBlockMatcher::genericElemHideDisabledForUrl(const QUrl &url) const
|
||||
{
|
||||
if (elemHideDisabledForUrl(url))
|
||||
return true;
|
||||
|
||||
int count = m_generichideRules.count();
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
if (m_generichideRules.at(i)->urlMatch(url))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QString AdBlockMatcher::elementHidingRules() const
|
||||
{
|
||||
return m_elementHidingRules;
|
||||
@ -153,6 +167,9 @@ void AdBlockMatcher::update()
|
||||
else if (rule->isElemhide()) {
|
||||
m_elemhideRules.append(rule);
|
||||
}
|
||||
else if (rule->isGenerichide()) {
|
||||
m_generichideRules.append(rule);
|
||||
}
|
||||
else if (rule->isException()) {
|
||||
if (!m_networkExceptionTree.add(rule))
|
||||
m_networkExceptionRules.append(rule);
|
||||
|
@ -40,6 +40,7 @@ public:
|
||||
|
||||
bool adBlockDisabledForUrl(const QUrl &url) const;
|
||||
bool elemHideDisabledForUrl(const QUrl &url) const;
|
||||
bool genericElemHideDisabledForUrl(const QUrl &url) const;
|
||||
|
||||
QString elementHidingRules() const;
|
||||
QString elementHidingRulesForDomain(const QString &domain) const;
|
||||
@ -57,6 +58,7 @@ private:
|
||||
QVector<const AdBlockRule*> m_domainRestrictedCssRules;
|
||||
QVector<const AdBlockRule*> m_documentRules;
|
||||
QVector<const AdBlockRule*> m_elemhideRules;
|
||||
QVector<const AdBlockRule*> m_generichideRules;
|
||||
|
||||
QString m_elementHidingRules;
|
||||
AdBlockSearchTree m_networkBlockTree;
|
||||
|
@ -164,6 +164,11 @@ bool AdBlockRule::isElemhide() const
|
||||
return hasOption(ElementHideOption);
|
||||
}
|
||||
|
||||
bool AdBlockRule::isGenerichide() const
|
||||
{
|
||||
return hasOption(GenericHideOption);
|
||||
}
|
||||
|
||||
bool AdBlockRule::isDomainRestricted() const
|
||||
{
|
||||
return hasOption(DomainRestrictedOption);
|
||||
@ -201,7 +206,7 @@ bool AdBlockRule::isInternalDisabled() const
|
||||
|
||||
bool AdBlockRule::urlMatch(const QUrl &url) const
|
||||
{
|
||||
if (!hasOption(DocumentOption) && !hasOption(ElementHideOption)) {
|
||||
if (!hasOption(DocumentOption) && !hasOption(ElementHideOption) && !hasOption(GenericHideOption) && !hasOption(GenericBlockOption)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -485,6 +490,10 @@ void AdBlockRule::parseFilter()
|
||||
setException(OtherOption, option.startsWith(QL1C('~')));
|
||||
++handledOptions;
|
||||
}
|
||||
else if (option == QL1S("collapse")) {
|
||||
// Hiding placeholders of blocked elements is enabled by default
|
||||
++handledOptions;
|
||||
}
|
||||
else if (option == QL1S("popup")) {
|
||||
// doesn't do anything yet
|
||||
setOption(PopupOption);
|
||||
@ -498,10 +507,15 @@ void AdBlockRule::parseFilter()
|
||||
setOption(ElementHideOption);
|
||||
++handledOptions;
|
||||
}
|
||||
else if (option == QL1S("collapse")) {
|
||||
// Hiding placeholders of blocked elements is enabled by default
|
||||
else if (option == QL1S("generichide") && m_isException) {
|
||||
setOption(GenericHideOption);
|
||||
++handledOptions;
|
||||
}
|
||||
else if (option == QL1S("genericblock") && m_isException) {
|
||||
// doesn't do anything yet
|
||||
setOption(GenericBlockOption);
|
||||
// ++handledOptions;
|
||||
}
|
||||
}
|
||||
|
||||
// If we don't handle all options, it's safer to just disable this rule
|
||||
|
@ -81,6 +81,7 @@ public:
|
||||
|
||||
bool isDocument() const;
|
||||
bool isElemhide() const;
|
||||
bool isGenerichide() const;
|
||||
|
||||
bool isDomainRestricted() const;
|
||||
bool isException() const;
|
||||
@ -152,6 +153,8 @@ private:
|
||||
// Exception only options
|
||||
DocumentOption = 1 << 20,
|
||||
ElementHideOption = 1 << 21,
|
||||
GenericHideOption = 1 << 22,
|
||||
GenericBlockOption = 1 << 23,
|
||||
};
|
||||
|
||||
Q_DECLARE_FLAGS(RuleOptions, RuleOption)
|
||||
|
Loading…
Reference in New Issue
Block a user