QNetworkReply* AdBlockNetwork::block(const QNetworkRequest &request) { const QString &urlString = request.url().toEncoded(); const QString &urlScheme = request.url().scheme(); if (urlScheme == "data" || urlScheme == "qrc" || urlScheme == "file" || urlScheme == "qupzilla") { return 0; } AdBlockManager* manager = AdBlockManager::instance(); if (!manager->isEnabled()) { return 0; } const AdBlockRule* blockedRule = 0; AdBlockSubscription* subscription = manager->subscription(); if (subscription->allow(urlString)) { return 0; } if (const AdBlockRule* rule = subscription->block(urlString)) { blockedRule = rule; } if (blockedRule) { QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); if (WebPage::isPointerSafeToUse(webPage)) { webPage->addAdBlockRule(blockedRule->filter(), request.url()); } AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(request, blockedRule, this); return reply; } return 0; }
QNetworkReply* AdBlockNetwork::block(const QNetworkRequest &request) { QUrl url = request.url(); if (url.scheme() == "data") { return 0; } AdBlockManager* manager = AdBlockManager::instance(); if (!manager->isEnabled()) { return 0; } QString urlString = url.toEncoded(); const AdBlockRule* blockedRule = 0; AdBlockSubscription* subscription = manager->subscription(); if (subscription->allow(urlString)) { return 0; } if (const AdBlockRule* rule = subscription->block(urlString)) { blockedRule = rule; } if (blockedRule) { QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); WebPage* webPage = (WebPage*)(v.value<void*>()); if (webPage) { webPage->addAdBlockRule(blockedRule->filter(), request.url()); } AdBlockBlockedNetworkReply* reply = new AdBlockBlockedNetworkReply(request, blockedRule, this); return reply; } return 0; }