37 if (m_networkExceptionTree.
find(request, urlDomain, urlString))
40 int count = m_networkExceptionRules.count();
41 for (
int i = 0;
i < count; ++
i) {
48 if (
const AdBlockRule* rule = m_networkBlockTree.
find(request, urlDomain, urlString))
51 count = m_networkBlockRules.count();
52 for (
int i = 0;
i < count; ++
i) {
63 int count = m_documentRules.count();
65 for (
int i = 0;
i < count; ++
i)
66 if (m_documentRules.at(
i)->urlMatch(url))
77 int count = m_elemhideRules.count();
79 for (
int i = 0;
i < count; ++
i)
80 if (m_elemhideRules.at(
i)->urlMatch(url))
91 int count = m_generichideRules.count();
93 for (
int i = 0;
i < count; ++
i)
94 if (m_generichideRules.at(
i)->urlMatch(url))
102 return m_elementHidingRules;
108 int addedRulesCount = 0;
109 int count = m_domainRestrictedCssRules.count();
111 for (
int i = 0;
i < count; ++
i) {
112 const AdBlockRule* rule = m_domainRestrictedCssRules.at(
i);
118 rules.append(
QL1S(
"{display:none !important;}\n"));
122 rules.append(rule->
cssSelector() + QLatin1Char(
','));
127 if (addedRulesCount != 0) {
128 rules = rules.left(rules.size() - 1);
129 rules.append(
QL1S(
"{display:none !important;}\n"));
139 QHash<QString, const AdBlockRule*> cssRulesHash;
140 QVector<const AdBlockRule*> exceptionCssRules;
144 const auto rules = subscription->allRules();
147 if (rule->isInternalDisabled())
150 if (rule->isUnsupportedRule())
153 if (rule->isCssRule()) {
156 if (!rule->isEnabled())
159 if (rule->isException())
160 exceptionCssRules.append(rule);
162 cssRulesHash.insert(rule->cssSelector(), rule);
164 else if (rule->isDocument()) {
165 m_documentRules.append(rule);
167 else if (rule->isElemhide()) {
168 m_elemhideRules.append(rule);
170 else if (rule->isGenerichide()) {
171 m_generichideRules.append(rule);
173 else if (rule->isException()) {
174 if (!m_networkExceptionTree.
add(rule))
175 m_networkExceptionRules.append(rule);
177 if (!m_networkBlockTree.
add(rule))
178 m_networkBlockRules.append(rule);
183 for (
const AdBlockRule* rule : std::as_const(exceptionCssRules)) {
184 const AdBlockRule* originalRule = cssRulesHash.value(rule->cssSelector());
191 copiedRule->m_options |= AdBlockRule::DomainRestrictedOption;
192 copiedRule->m_blockedDomains.append(rule->m_allowedDomains);
194 cssRulesHash[rule->cssSelector()] = copiedRule;
195 m_createdRules.append(copiedRule);
201 int hidingRulesCount = 0;
203 QHashIterator<QString, const AdBlockRule*> it(cssRulesHash);
204 while (it.hasNext()) {
209 m_domainRestrictedCssRules.append(rule);
211 else if (
Q_UNLIKELY(hidingRulesCount == 1000)) {
213 m_elementHidingRules.append(
QL1S(
"{display:none !important;} "));
214 hidingRulesCount = 0;
217 m_elementHidingRules.append(rule->
cssSelector() + QLatin1Char(
','));
222 if (hidingRulesCount != 0) {
223 m_elementHidingRules = m_elementHidingRules.left(m_elementHidingRules.size() - 1);
224 m_elementHidingRules.append(
QL1S(
"{display:none !important;} "));
230 m_networkExceptionTree.
clear();
231 m_networkExceptionRules.clear();
232 m_networkBlockTree.
clear();
233 m_networkBlockRules.clear();
234 m_domainRestrictedCssRules.clear();
235 m_elementHidingRules.clear();
236 m_documentRules.clear();
237 m_elemhideRules.clear();
238 m_generichideRules.clear();
239 qDeleteAll(m_createdRules);
240 m_createdRules.clear();
QList< AdBlockSubscription * > subscriptions() const
bool adBlockDisabledForUrl(const QUrl &url) const
const AdBlockRule * match(const QWebEngineUrlRequestInfo &request, const QString &urlDomain, const QString &urlString) const
QString elementHidingRules() const
QString elementHidingRulesForDomain(const QString &domain) const
bool elemHideDisabledForUrl(const QUrl &url) const
bool genericElemHideDisabledForUrl(const QUrl &url) const
AdBlockMatcher(AdBlockManager *manager)
bool isDomainRestricted() const
bool matchDomain(const QString &domain) const
QString cssSelector() const
bool networkMatch(const QWebEngineUrlRequestInfo &request, const QString &domain, const QString &encodedUrl) const
AdBlockRule * copy() const
const AdBlockRule * find(const QWebEngineUrlRequestInfo &request, const QString &domain, const QString &urlString) const
bool add(const AdBlockRule *rule)