mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 10:46:35 +01:00
[adblock] Added support for $image rules.
It tests whether the url ends with .jpg/.jpeg/.gif/.png
This commit is contained in:
parent
2bb002b62d
commit
3b301e8446
@ -1,6 +1,6 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
* QupZilla - WebKit based browser
|
* QupZilla - WebKit based browser
|
||||||
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
|
* Copyright (C) 2010-2013 David Rosca <nowrep@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -112,6 +112,8 @@ AdBlockRule::AdBlockRule(const QString &filter, AdBlockSubscription* subscriptio
|
|||||||
, m_subdocumentException(false)
|
, m_subdocumentException(false)
|
||||||
, m_xmlhttprequest(false)
|
, m_xmlhttprequest(false)
|
||||||
, m_xmlhttprequestException(false)
|
, m_xmlhttprequestException(false)
|
||||||
|
, m_image(false)
|
||||||
|
, m_imageException(false)
|
||||||
, m_document(false)
|
, m_document(false)
|
||||||
, m_elemhide(false)
|
, m_elemhide(false)
|
||||||
, m_caseSensitivity(Qt::CaseInsensitive)
|
, m_caseSensitivity(Qt::CaseInsensitive)
|
||||||
@ -241,6 +243,11 @@ bool AdBlockRule::networkMatch(const QNetworkRequest &request, const QString &do
|
|||||||
if (m_xmlhttprequest && !matchXmlHttpRequest(request)) {
|
if (m_xmlhttprequest && !matchXmlHttpRequest(request)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check image restriction
|
||||||
|
if (m_image && !matchImage(encodedUrl)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return matched;
|
return matched;
|
||||||
@ -348,6 +355,16 @@ bool AdBlockRule::matchXmlHttpRequest(const QNetworkRequest &request) const
|
|||||||
return m_xmlhttprequestException ? !match : match;
|
return m_xmlhttprequestException ? !match : match;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AdBlockRule::matchImage(const QString &encodedUrl) const
|
||||||
|
{
|
||||||
|
bool match = encodedUrl.endsWith(QLatin1String(".png")) ||
|
||||||
|
encodedUrl.endsWith(QLatin1String(".jpg")) ||
|
||||||
|
encodedUrl.endsWith(QLatin1String(".gif")) ||
|
||||||
|
encodedUrl.endsWith(QLatin1String(".jpeg"));
|
||||||
|
|
||||||
|
return m_imageException ? !match : match;
|
||||||
|
}
|
||||||
|
|
||||||
void AdBlockRule::parseFilter()
|
void AdBlockRule::parseFilter()
|
||||||
{
|
{
|
||||||
QString parsedLine = m_filter;
|
QString parsedLine = m_filter;
|
||||||
@ -416,6 +433,11 @@ void AdBlockRule::parseFilter()
|
|||||||
m_xmlhttprequestException = option.startsWith(QLatin1Char('~'));
|
m_xmlhttprequestException = option.startsWith(QLatin1Char('~'));
|
||||||
++handledOptions;
|
++handledOptions;
|
||||||
}
|
}
|
||||||
|
else if (option.endsWith(QLatin1String("image"))) {
|
||||||
|
m_image = true;
|
||||||
|
m_imageException = option.startsWith(QLatin1Char('~'));
|
||||||
|
++handledOptions;
|
||||||
|
}
|
||||||
else if (option == QLatin1String("document") && m_exception) {
|
else if (option == QLatin1String("document") && m_exception) {
|
||||||
m_document = true;
|
m_document = true;
|
||||||
++handledOptions;
|
++handledOptions;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
* QupZilla - WebKit based browser
|
* QupZilla - WebKit based browser
|
||||||
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
|
* Copyright (C) 2010-2013 David Rosca <nowrep@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -92,6 +92,7 @@ public:
|
|||||||
bool matchObject(const QNetworkRequest &request) const;
|
bool matchObject(const QNetworkRequest &request) const;
|
||||||
bool matchSubdocument(const QNetworkRequest &request) const;
|
bool matchSubdocument(const QNetworkRequest &request) const;
|
||||||
bool matchXmlHttpRequest(const QNetworkRequest &request) const;
|
bool matchXmlHttpRequest(const QNetworkRequest &request) const;
|
||||||
|
bool matchImage(const QString &encodedUrl) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void parseFilter();
|
void parseFilter();
|
||||||
@ -134,6 +135,9 @@ private:
|
|||||||
bool m_xmlhttprequest;
|
bool m_xmlhttprequest;
|
||||||
bool m_xmlhttprequestException;
|
bool m_xmlhttprequestException;
|
||||||
|
|
||||||
|
bool m_image;
|
||||||
|
bool m_imageException;
|
||||||
|
|
||||||
// Exception only options
|
// Exception only options
|
||||||
bool m_document;
|
bool m_document;
|
||||||
bool m_elemhide;
|
bool m_elemhide;
|
||||||
|
@ -621,6 +621,8 @@ void WebPage::cleanBlockedObjects()
|
|||||||
QWebElement bodyElement = docElement.findFirst("body");
|
QWebElement bodyElement = docElement.findFirst("body");
|
||||||
bodyElement.appendInside("<style type=\"text/css\">\n/* AdBlock for QupZilla */\n" + elementHiding);
|
bodyElement.appendInside("<style type=\"text/css\">\n/* AdBlock for QupZilla */\n" + elementHiding);
|
||||||
|
|
||||||
|
// When hiding some elements, scroll position of page will change
|
||||||
|
// If user loaded anchor link in background tab (and didn't show it yet), fix the scroll position
|
||||||
if (!view()->isVisible() && !url().fragment().isEmpty()) {
|
if (!view()->isVisible() && !url().fragment().isEmpty()) {
|
||||||
mainFrame()->scrollToAnchor(url().fragment());
|
mainFrame()->scrollToAnchor(url().fragment());
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@ QPixmap WebTab::renderTabPreview()
|
|||||||
const QSize oldSize = currentWebView ? currentWebView->page()->viewportSize() : page->viewportSize();
|
const QSize oldSize = currentWebView ? currentWebView->page()->viewportSize() : page->viewportSize();
|
||||||
const QPoint originalScrollPosition = page->mainFrame()->scrollPosition();
|
const QPoint originalScrollPosition = page->mainFrame()->scrollPosition();
|
||||||
|
|
||||||
// Hack to ensure rendering the same preview before and after the page was shown for the first tie
|
// Hack to ensure rendering the same preview before and after the page was shown for the first time
|
||||||
// This can occur eg. with opening background tabs
|
// This can occur eg. with opening background tabs
|
||||||
page->setViewportSize(oldSize);
|
page->setViewportSize(oldSize);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user