bool AdBlockManager::isEnabled() const { if (!m_loaded) { AdBlockManager *that = const_cast<AdBlockManager*>(this); that->load(); } return m_enabled; }
QList<AdBlockSubscription*> AdBlockManager::subscriptions() const { if (!m_loaded) { AdBlockManager *that = const_cast<AdBlockManager*>(this); that->load(); } return m_subscriptions; }
QObject* WebPluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const { if (url.isEmpty()) { return new QObject(); } QString mime = mimeType.trimmed(); //Fixing bad behaviour when mimeType contains spaces if (mime.isEmpty()) { if (url.toString().endsWith(QLatin1String(".swf"))) { mime = "application/x-shockwave-flash"; } else { return 0; } } if (mime != QLatin1String("application/x-shockwave-flash")) { if (mime != QLatin1String("application/futuresplash") && mime != QLatin1String("application/x-java-applet")) { qDebug() << "WebPluginFactory::create creating object of mimeType : " << mime; } return 0; } if (!mApp->plugins()->c2f_isEnabled()) { return 0; } // AdBlock AdBlockManager* manager = AdBlockManager::instance(); QNetworkRequest request(url); request.setAttribute(QNetworkRequest::Attribute(QNetworkRequest::User + 150), QString("object")); if (manager->isEnabled() && manager->block(request)) { return new QObject(); } // Click2Flash whitelist QStringList whitelist = mApp->plugins()->c2f_getWhiteList(); if (whitelist.contains(url.host()) || whitelist.contains("www." + url.host()) || whitelist.contains(url.host().remove(QLatin1String("www.")))) { return 0; } // Click2Flash already accepted if (ClickToFlash::isAlreadyAccepted(url, argumentNames, argumentValues)) { return 0; } ClickToFlash* ctf = new ClickToFlash(url, argumentNames, argumentValues, m_page); return ctf; }
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; }
QNetworkReply *AdBlockNetwork::block(const QNetworkRequest &request) { QUrl url = request.url(); if (url.scheme() == QLatin1String("data")) return 0; AdBlockManager *manager = AdBlockManager::instance(); if (!manager->isEnabled()) return 0; QString urlString = QString::fromUtf8(url.toEncoded()); const AdBlockRule *blockedRule = 0; const AdBlockSubscription *blockingSubscription = 0; QList<AdBlockSubscription*> subscriptions = manager->subscriptions(); foreach (AdBlockSubscription *subscription, subscriptions) { if (subscription->allow(urlString)) return 0; if (const AdBlockRule *rule = subscription->block(urlString)) { blockedRule = rule; blockingSubscription = subscription; break; } } if (blockedRule) { #if defined(ADBLOCKNETWORK_DEBUG) qDebug() << "AdBlockNetwork::" << __FUNCTION__ << "rule:" << blockedRule->filter() << "subscription:" << blockingSubscription->title() << url; #endif AdBlockBlockedNetworkReply *reply = new AdBlockBlockedNetworkReply(request, blockedRule, this); return reply; } return 0; }
void AdBlockIcon::createMenu(QMenu* menu) { if (!menu) { menu = qobject_cast<QMenu*>(sender()); if (!menu) { return; } } menu->clear(); AdBlockManager* manager = AdBlockManager::instance(); AdBlockCustomList* customList = manager->customList(); WebPage* page = p_QupZilla->weView()->page(); const QUrl &pageUrl = page->url(); menu->addAction(tr("Show AdBlock &Settings"), manager, SLOT(showDialog())); menu->addSeparator(); if (!pageUrl.host().isEmpty() && m_enabled && manager->canRunOnScheme(pageUrl.scheme())) { const QString &host = page->url().host().contains(QLatin1String("www.")) ? pageUrl.host().mid(4) : pageUrl.host(); const QString &hostFilter = QString("@@||%1^$document").arg(host); const QString &pageFilter = QString("@@|%1|$document").arg(pageUrl.toString()); QAction* act = menu->addAction(tr("Disable on %1").arg(host)); act->setCheckable(true); act->setChecked(customList->containsFilter(hostFilter)); act->setData(hostFilter); connect(act, SIGNAL(triggered()), this, SLOT(toggleCustomFilter())); act = menu->addAction(tr("Disable only on this page")); act->setCheckable(true); act->setChecked(customList->containsFilter(pageFilter)); act->setData(pageFilter); connect(act, SIGNAL(triggered()), this, SLOT(toggleCustomFilter())); menu->addSeparator(); } if (!m_blockedPopups.isEmpty()) { menu->addAction(tr("Blocked Popup Windows"))->setEnabled(false); for (int i = 0; i < m_blockedPopups.count(); i++) { const QPair<AdBlockRule, QUrl> &pair = m_blockedPopups.at(i); QString address = pair.second.toString().right(55); QString actionText = tr("%1 with (%2)").arg(address, pair.first.filter()).replace(QLatin1Char('&'), QLatin1String("&&")); QAction* action = menu->addAction(actionText, manager, SLOT(showRule())); action->setData(qVariantFromValue((void*)&pair.first)); } } menu->addSeparator(); QList<WebPage::AdBlockedEntry> entries = page->adBlockedEntries(); if (entries.isEmpty()) { menu->addAction(tr("No content blocked"))->setEnabled(false); } else { menu->addAction(tr("Blocked URL (AdBlock Rule) - click to edit rule"))->setEnabled(false); foreach(const WebPage::AdBlockedEntry & entry, entries) { QString address = entry.url.toString().right(55); QString actionText = tr("%1 with (%2)").arg(address, entry.rule->filter()).replace(QLatin1Char('&'), QLatin1String("&&")); QAction* action = menu->addAction(actionText, manager, SLOT(showRule())); action->setData(qVariantFromValue((void*)entry.rule)); } }
QObject* WebPluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const { if (url.isEmpty()) { return new QObject(); } // AdBlock AdBlockManager* manager = AdBlockManager::instance(); QNetworkRequest request(url); request.setAttribute(QNetworkRequest::Attribute(QNetworkRequest::User + 150), QString("object")); if (manager->isEnabled() && manager->block(request)) { return new QObject(); } QString mime = mimeType.trimmed(); if (mime.isEmpty()) { if (url.toString().contains(QLatin1String(".swf"))) { mime = "application/x-shockwave-flash"; } else { return 0; } } if (mime != QLatin1String("application/x-shockwave-flash")) { if ((mime != QLatin1String("application/futuresplash")) && (mime != QLatin1String("application/x-java-applet"))) { qDebug() << "WebPluginFactory::create creating object of mimeType : " << mime; } return 0; } if (!mainApp->c2fIsEnabled()) { return 0; } // Click2Flash whitelist QStringList whitelist = mainApp->c2fGetWhitelist(); if (whitelist.contains(url.host()) || whitelist.contains("www." + url.host()) || whitelist.contains(url.host().remove(QLatin1String("www.")))) { return 0; } // Click2Flash already accepted if (ClickToFlash::isAlreadyAccepted(url, argumentNames, argumentValues)) { return 0; } int ctfWidth = 10; int ctfHeight = 10; for (int i = 0; i < argumentNames.count(); i++) { if (argumentNames[i] == "width") { if (!argumentValues[i].contains("%")) ctfWidth = argumentValues[i].toInt(); } if (argumentNames[i] == "height") { if (!argumentValues[i].contains("%")) ctfHeight = argumentValues[i].toInt(); } } if ((ctfWidth < 5) && (ctfHeight < 5)) { return 0; } ClickToFlash* ctf = new ClickToFlash(url, argumentNames, argumentValues, page_); return ctf; }