QNetworkReply* AdBlockManager::block(const QNetworkRequest &request) { const QString &urlString = request.url().toEncoded(); const QString &urlDomain = request.url().host(); const QString &urlScheme = request.url().scheme(); if (!isEnabled() || !canRunOnScheme(urlScheme)) { return 0; } foreach(AdBlockSubscription * subscription, m_subscriptions) { const AdBlockRule* blockedRule = subscription->match(request, urlDomain, urlString); if (blockedRule) { QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); if (WebPage::isPointerSafeToUse(webPage)) { if (!canBeBlocked(webPage->url())) { return 0; } webPage->addAdBlockRule(blockedRule, request.url()); } AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(subscription, blockedRule, this); reply->setRequest(request); return reply; } } return 0; }
bool AdBlockManager::block(QWebEngineUrlRequestInfo &request) { QMutexLocker locker(&m_mutex); if (!isEnabled()) { return false; } #ifdef ADBLOCK_DEBUG QElapsedTimer timer; timer.start(); #endif const QString urlString = request.requestUrl().toEncoded().toLower(); const QString urlDomain = request.requestUrl().host().toLower(); const QString urlScheme = request.requestUrl().scheme().toLower(); if (!canRunOnScheme(urlScheme) || !canBeBlocked(request.firstPartyUrl())) { return false; } bool res = false; const AdBlockRule* blockedRule = m_matcher->match(request, urlDomain, urlString); if (blockedRule) { res = true; if (request.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) { QUrl url(QSL("qupzilla:adblock")); QUrlQuery query; query.addQueryItem(QSL("rule"), blockedRule->filter()); query.addQueryItem(QSL("subscription"), blockedRule->subscription()->title()); url.setQuery(query); request.redirect(url); } else { request.block(true); } #ifdef ADBLOCK_DEBUG qDebug() << "BLOCKED: " << timer.elapsed() << blockedRule->filter() << request.requestUrl(); #endif } #ifdef ADBLOCK_DEBUG qDebug() << timer.elapsed() << request.requestUrl(); #endif return res; }
QNetworkReply* AdBlockManager::block(const QNetworkRequest &request) { #ifdef ADBLOCK_DEBUG QElapsedTimer timer; timer.start(); #endif const QString urlString = request.url().toEncoded().toLower(); const QString urlDomain = request.url().host().toLower(); const QString urlScheme = request.url().scheme().toLower(); if (!isEnabled() || !canRunOnScheme(urlScheme)) { return 0; } foreach (AdBlockSubscription* subscription, m_subscriptions) { const AdBlockRule* blockedRule = subscription->match(request, urlDomain, urlString); if (blockedRule) { QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); if (WebPage::isPointerSafeToUse(webPage)) { if (!canBeBlocked(webPage->url())) { return 0; } webPage->addAdBlockRule(blockedRule, request.url()); } AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(subscription, blockedRule, this); reply->setRequest(request); #ifdef ADBLOCK_DEBUG qDebug() << "BLOCKED: " << timer.elapsed() << blockedRule->filter() << request.url(); #endif return reply; } } #ifdef ADBLOCK_DEBUG qDebug() << timer.elapsed() << request.url(); #endif return 0; }
bool AdBlockManager::block(QWebEngineUrlRequestInfo &request, QString &ruleFilter, QString &ruleSubscription) { QMutexLocker locker(&m_mutex); if (!isEnabled()) { return false; } #ifdef ADBLOCK_DEBUG QElapsedTimer timer; timer.start(); #endif const QString urlString = request.requestUrl().toEncoded().toLower(); const QString urlDomain = request.requestUrl().host().toLower(); const QString urlScheme = request.requestUrl().scheme().toLower(); if (!canRunOnScheme(urlScheme) || !canBeBlocked(request.firstPartyUrl())) { return false; } const AdBlockRule* blockedRule = m_matcher->match(request, urlDomain, urlString); if (blockedRule) { ruleFilter = blockedRule->filter(); ruleSubscription = blockedRule->subscription()->title(); #ifdef ADBLOCK_DEBUG qDebug() << "BLOCKED: " << timer.elapsed() << blockedRule->filter() << request.requestUrl(); #endif } #ifdef ADBLOCK_DEBUG qDebug() << timer.elapsed() << request.requestUrl(); #endif return blockedRule; }