AdBlockSubscription* AdBlockManager::addSubscription(const QString &title, const QString &url) { if (title.isEmpty() || url.isEmpty()) { return 0; } QString fileName = QzTools::filterCharsFromFilename(title.toLower()) + ".txt"; QString filePath = QzTools::ensureUniqueFilename(mApp->currentProfilePath() + "adblock/" + fileName); QByteArray data = QString("Title: %1\nUrl: %2\n[Adblock Plus 1.1.1]").arg(title, url).toLatin1(); QFile file(filePath); if (!file.open(QFile::WriteOnly | QFile::Truncate)) { qWarning() << "AdBlockManager: Cannot write to file" << filePath; return 0; } file.write(data); file.close(); AdBlockSubscription* subscription = new AdBlockSubscription(title, this); subscription->setUrl(QUrl(url)); subscription->setFilePath(filePath); subscription->loadSubscription(m_disabledRules); m_subscriptions.insert(m_subscriptions.count() - 1, subscription); return subscription; }
AdBlockSubscription* AdBlockManager::addSubscription(const QString &title, const QString &url) { if (title.isEmpty() || url.isEmpty()) { return 0; } QString fileName = QzTools::filterCharsFromFilename(title.toLower()) + ".txt"; QString filePath = QzTools::ensureUniqueFilename(DataPaths::currentProfilePath() + "/adblock/" + fileName); QByteArray data = QString("Title: %1\nUrl: %2\n[Adblock Plus 1.1.1]").arg(title, url).toLatin1(); QSaveFile file(filePath); if (!file.open(QFile::WriteOnly)) { qWarning() << "AdBlockManager: Cannot write to file" << filePath; return 0; } file.write(data); file.commit(); AdBlockSubscription* subscription = new AdBlockSubscription(title, this); subscription->setUrl(QUrl(url)); subscription->setFilePath(filePath); subscription->loadSubscription(m_disabledRules); m_subscriptions.insert(m_subscriptions.count() - 1, subscription); connect(subscription, SIGNAL(subscriptionUpdated()), mApp, SLOT(reloadUserStyleSheet())); connect(subscription, SIGNAL(subscriptionChanged()), this, SLOT(updateMatcher())); return subscription; }
void tst_AdBlockManager::rulesChanged() { SubAdBlockManager manager; QSignalSpy spy0(&manager, SIGNAL(rulesChanged())); AdBlockSubscription *subscription = new AdBlockSubscription(QUrl(), &manager); manager.addSubscription(subscription); subscription->setEnabled(true); subscription->addRule(AdBlockRule()); QCOMPARE(spy0.count(), 3); }
// public AdBlockSubscription *customRules() void tst_AdBlockManager::customRules() { SubAdBlockManager manager; QSignalSpy spy0(&manager, SIGNAL(rulesChanged())); AdBlockSubscription *subscription = manager.customRules(); QVERIFY(subscription); QVERIFY(!subscription->title().isEmpty()); QVERIFY(subscription->allRules().isEmpty()); QCOMPARE(spy0.count(), 1); subscription = manager.customRules(); QCOMPARE(spy0.count(), 1); }
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; }