Ejemplo n.º 1
0
bool AdBlockManager::isEnabled() const
{
    if (!m_loaded) {
        AdBlockManager *that = const_cast<AdBlockManager*>(this);
        that->load();
    }
    return m_enabled;
}
Ejemplo n.º 2
0
QList<AdBlockSubscription*> AdBlockManager::subscriptions() const
{
    if (!m_loaded) {
        AdBlockManager *that = const_cast<AdBlockManager*>(this);
        that->load();
    }
    return m_subscriptions;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
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;
}
Ejemplo n.º 6
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;
}
Ejemplo n.º 7
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));
        }
    }
Ejemplo n.º 8
0
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;
}