mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 18:56:34 +01:00
AdBlock: Make it as self-contained as possible
It could be easy now to turn it into real loadable plugin.
This commit is contained in:
parent
401e600821
commit
ff1171abf0
@ -60,6 +60,7 @@ set(SRCS ${SRCS}
|
|||||||
adblock/adblocksearchtree.cpp
|
adblock/adblocksearchtree.cpp
|
||||||
adblock/adblocksubscription.cpp
|
adblock/adblocksubscription.cpp
|
||||||
adblock/adblocktreewidget.cpp
|
adblock/adblocktreewidget.cpp
|
||||||
|
adblock/adblockplugin.cpp
|
||||||
app/autosaver.cpp
|
app/autosaver.cpp
|
||||||
app/browserwindow.cpp
|
app/browserwindow.cpp
|
||||||
app/commandlineoptions.cpp
|
app/commandlineoptions.cpp
|
||||||
@ -290,6 +291,7 @@ qt5_add_resources(SRCS
|
|||||||
data/html.qrc
|
data/html.qrc
|
||||||
data/icons.qrc
|
data/icons.qrc
|
||||||
data/breeze-fallback.qrc
|
data/breeze-fallback.qrc
|
||||||
|
adblock/adblock.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(FalkonPrivate SHARED ${SRCS})
|
add_library(FalkonPrivate SHARED ${SRCS})
|
||||||
|
7
src/lib/adblock/adblock.qrc
Normal file
7
src/lib/adblock/adblock.qrc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/adblock">
|
||||||
|
<file>data/adblock.png</file>
|
||||||
|
<file>data/adblock_big.png</file>
|
||||||
|
<file>data/adblock.html</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
@ -33,7 +33,7 @@ AdBlockIcon::AdBlockIcon(QObject *parent)
|
|||||||
: AbstractButtonInterface(parent)
|
: AbstractButtonInterface(parent)
|
||||||
{
|
{
|
||||||
setTitle(tr("AdBlock"));
|
setTitle(tr("AdBlock"));
|
||||||
setIcon(QIcon(QSL(":icons/other/adblock.png")));
|
setIcon(QIcon(QSL(":adblock/data/adblock.png")));
|
||||||
|
|
||||||
updateState();
|
updateState();
|
||||||
|
|
||||||
|
61
src/lib/adblock/adblockplugin.cpp
Normal file
61
src/lib/adblock/adblockplugin.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* ============================================================
|
||||||
|
* QupZilla - Qt web browser
|
||||||
|
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* ============================================================ */
|
||||||
|
|
||||||
|
#include "adblockplugin.h"
|
||||||
|
#include "adblockmanager.h"
|
||||||
|
#include "adblockicon.h"
|
||||||
|
|
||||||
|
#include "scripts.h"
|
||||||
|
#include "webpage.h"
|
||||||
|
#include "pluginproxy.h"
|
||||||
|
#include "browserwindow.h"
|
||||||
|
#include "navigationbar.h"
|
||||||
|
#include "mainapplication.h"
|
||||||
|
|
||||||
|
AdBlockPlugin::AdBlockPlugin(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
connect(mApp, &MainApplication::aboutToQuit, AdBlockManager::instance(), &AdBlockManager::save);
|
||||||
|
connect(mApp->plugins(), &PluginProxy::webPageCreated, this, &AdBlockPlugin::webPageCreated);
|
||||||
|
connect(mApp->plugins(), &PluginProxy::mainWindowCreated, this, &AdBlockPlugin::mainWindowCreated);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdBlockPlugin::webPageCreated(WebPage *page)
|
||||||
|
{
|
||||||
|
connect(page, &WebPage::loadFinished, this, [=]() {
|
||||||
|
AdBlockManager *manager = AdBlockManager::instance();
|
||||||
|
if (!manager->isEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Apply global element hiding rules
|
||||||
|
const QString elementHiding = manager->elementHidingRules(page->url());
|
||||||
|
if (!elementHiding.isEmpty()) {
|
||||||
|
page->runJavaScript(Scripts::setCss(elementHiding), WebPage::SafeJsWorld);
|
||||||
|
}
|
||||||
|
// Apply domain-specific element hiding rules
|
||||||
|
const QString siteElementHiding = manager->elementHidingRulesForDomain(page->url());
|
||||||
|
if (!siteElementHiding.isEmpty()) {
|
||||||
|
page->runJavaScript(Scripts::setCss(siteElementHiding), WebPage::SafeJsWorld);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void AdBlockPlugin::mainWindowCreated(BrowserWindow *window)
|
||||||
|
{
|
||||||
|
window->navigationBar()->addToolButton(new AdBlockIcon(window));
|
||||||
|
}
|
33
src/lib/adblock/adblockplugin.h
Normal file
33
src/lib/adblock/adblockplugin.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* ============================================================
|
||||||
|
* QupZilla - Qt web browser
|
||||||
|
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* ============================================================ */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class WebPage;
|
||||||
|
class BrowserWindow;
|
||||||
|
|
||||||
|
class AdBlockPlugin : public QObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit AdBlockPlugin(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void webPageCreated(WebPage *page);
|
||||||
|
void mainWindowCreated(BrowserWindow *window);
|
||||||
|
};
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
@ -38,7 +38,6 @@
|
|||||||
#include "docktitlebarwidget.h"
|
#include "docktitlebarwidget.h"
|
||||||
#include "iconprovider.h"
|
#include "iconprovider.h"
|
||||||
#include "progressbar.h"
|
#include "progressbar.h"
|
||||||
#include "adblockicon.h"
|
|
||||||
#include "closedwindowsmanager.h"
|
#include "closedwindowsmanager.h"
|
||||||
#include "statusbarmessage.h"
|
#include "statusbarmessage.h"
|
||||||
#include "browsinglibrary.h"
|
#include "browsinglibrary.h"
|
||||||
@ -389,8 +388,6 @@ void BrowserWindow::setupUi()
|
|||||||
statusBar()->addPermanentWidget(m_progressBar);
|
statusBar()->addPermanentWidget(m_progressBar);
|
||||||
statusBar()->addPermanentWidget(m_ipLabel);
|
statusBar()->addPermanentWidget(m_ipLabel);
|
||||||
|
|
||||||
m_navigationToolbar->addToolButton(new AdBlockIcon(this));
|
|
||||||
|
|
||||||
QDesktopWidget* desktop = mApp->desktop();
|
QDesktopWidget* desktop = mApp->desktop();
|
||||||
int windowWidth = desktop->availableGeometry().width() / 1.3;
|
int windowWidth = desktop->availableGeometry().width() / 1.3;
|
||||||
int windowHeight = desktop->availableGeometry().height() / 1.3;
|
int windowHeight = desktop->availableGeometry().height() / 1.3;
|
||||||
|
@ -43,7 +43,6 @@ class AutoFill;
|
|||||||
class MainApplication;
|
class MainApplication;
|
||||||
class WebView;
|
class WebView;
|
||||||
class WebPage;
|
class WebPage;
|
||||||
class AdBlockIcon;
|
|
||||||
class SideBar;
|
class SideBar;
|
||||||
class SideBarManager;
|
class SideBarManager;
|
||||||
class ProgressBar;
|
class ProgressBar;
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
#include "checkboxdialog.h"
|
#include "checkboxdialog.h"
|
||||||
#include "networkmanager.h"
|
#include "networkmanager.h"
|
||||||
#include "profilemanager.h"
|
#include "profilemanager.h"
|
||||||
#include "adblockmanager.h"
|
|
||||||
#include "restoremanager.h"
|
#include "restoremanager.h"
|
||||||
#include "browsinglibrary.h"
|
#include "browsinglibrary.h"
|
||||||
#include "downloadmanager.h"
|
#include "downloadmanager.h"
|
||||||
@ -48,6 +47,7 @@
|
|||||||
#include "scripts.h"
|
#include "scripts.h"
|
||||||
#include "sessionmanager.h"
|
#include "sessionmanager.h"
|
||||||
#include "closedwindowsmanager.h"
|
#include "closedwindowsmanager.h"
|
||||||
|
#include "adblock/adblockplugin.h"
|
||||||
|
|
||||||
#include <QWebEngineSettings>
|
#include <QWebEngineSettings>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
@ -310,6 +310,7 @@ MainApplication::MainApplication(int &argc, char** argv)
|
|||||||
|
|
||||||
m_plugins = new PluginProxy;
|
m_plugins = new PluginProxy;
|
||||||
m_autoFill = new AutoFill(this);
|
m_autoFill = new AutoFill(this);
|
||||||
|
new AdBlockPlugin(this);
|
||||||
|
|
||||||
if (!noAddons)
|
if (!noAddons)
|
||||||
m_plugins->loadPlugins();
|
m_plugins->loadPlugins();
|
||||||
@ -795,7 +796,6 @@ void MainApplication::saveSettings()
|
|||||||
m_networkManager->shutdown();
|
m_networkManager->shutdown();
|
||||||
|
|
||||||
qzSettings->saveSettings();
|
qzSettings->saveSettings();
|
||||||
AdBlockManager::instance()->save();
|
|
||||||
QFile::remove(DataPaths::currentProfilePath() + QLatin1String("/WebpageIcons.db"));
|
QFile::remove(DataPaths::currentProfilePath() + QLatin1String("/WebpageIcons.db"));
|
||||||
|
|
||||||
sessionManager()->saveSettings();
|
sessionManager()->saveSettings();
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>html/adblock_big.png</file>
|
|
||||||
<file>html/adblock.html</file>
|
|
||||||
<file>html/about.html</file>
|
<file>html/about.html</file>
|
||||||
<file>html/copyright</file>
|
<file>html/copyright</file>
|
||||||
<file>html/reportbug.html</file>
|
<file>html/reportbug.html</file>
|
||||||
|
@ -18,11 +18,9 @@
|
|||||||
<file>icons/other/login.png</file>
|
<file>icons/other/login.png</file>
|
||||||
<file>icons/preferences/applications-graphics.png</file>
|
<file>icons/preferences/applications-graphics.png</file>
|
||||||
<file>icons/preferences/document-properties.png</file>
|
<file>icons/preferences/document-properties.png</file>
|
||||||
<file>icons/other/adblock.png</file>
|
|
||||||
<file>icons/other/download.svg</file>
|
<file>icons/other/download.svg</file>
|
||||||
<file>icons/other/bighistory.svg</file>
|
<file>icons/other/bighistory.svg</file>
|
||||||
<file>icons/other/bighistory-selected.svg</file>
|
<file>icons/other/bighistory-selected.svg</file>
|
||||||
<file>icons/other/adblock-disabled.png</file>
|
|
||||||
<file>icons/menu/search-icon.svg</file>
|
<file>icons/menu/search-icon.svg</file>
|
||||||
<file>icons/browsers/firefox.png</file>
|
<file>icons/browsers/firefox.png</file>
|
||||||
<file>icons/browsers/firefox@2x.png</file>
|
<file>icons/browsers/firefox@2x.png</file>
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
@ -476,9 +476,9 @@ QString FalkonSchemeReply::adblockPage()
|
|||||||
static QString aPage;
|
static QString aPage;
|
||||||
|
|
||||||
if (aPage.isEmpty()) {
|
if (aPage.isEmpty()) {
|
||||||
aPage.append(QzTools::readAllFileContents(":html/adblock.html"));
|
aPage.append(QzTools::readAllFileContents(":adblock/data/adblock.html"));
|
||||||
aPage.replace(QLatin1String("%FAVICON%"), QLatin1String("qrc:html/adblock_big.png"));
|
aPage.replace(QLatin1String("%FAVICON%"), QLatin1String("qrc:adblock/data/adblock_big.png"));
|
||||||
aPage.replace(QLatin1String("%IMAGE%"), QLatin1String("qrc:html/adblock_big.png"));
|
aPage.replace(QLatin1String("%IMAGE%"), QLatin1String("qrc:adblock/data/adblock_big.png"));
|
||||||
aPage.replace(QLatin1String("%TITLE%"), tr("Blocked content"));
|
aPage.replace(QLatin1String("%TITLE%"), tr("Blocked content"));
|
||||||
aPage = QzTools::applyDirectionToPage(aPage);
|
aPage = QzTools::applyDirectionToPage(aPage);
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
#include "autofill.h"
|
#include "autofill.h"
|
||||||
#include "popupwebview.h"
|
#include "popupwebview.h"
|
||||||
#include "popupwindow.h"
|
#include "popupwindow.h"
|
||||||
#include "adblockmanager.h"
|
|
||||||
#include "iconprovider.h"
|
#include "iconprovider.h"
|
||||||
#include "qzsettings.h"
|
#include "qzsettings.h"
|
||||||
#include "useragentmanager.h"
|
#include "useragentmanager.h"
|
||||||
@ -37,9 +36,9 @@
|
|||||||
#include "html5permissions/html5permissionsmanager.h"
|
#include "html5permissions/html5permissionsmanager.h"
|
||||||
#include "javascript/externaljsobject.h"
|
#include "javascript/externaljsobject.h"
|
||||||
#include "tabwidget.h"
|
#include "tabwidget.h"
|
||||||
#include "scripts.h"
|
|
||||||
#include "networkmanager.h"
|
#include "networkmanager.h"
|
||||||
#include "webhittestresult.h"
|
#include "webhittestresult.h"
|
||||||
|
#include "adblock/adblockmanager.h"
|
||||||
|
|
||||||
#ifdef NONBLOCK_JS_DIALOGS
|
#ifdef NONBLOCK_JS_DIALOGS
|
||||||
#include "ui_jsconfirm.h"
|
#include "ui_jsconfirm.h"
|
||||||
@ -232,9 +231,6 @@ void WebPage::finished()
|
|||||||
m_fileWatcher->removePaths(m_fileWatcher->files());
|
m_fileWatcher->removePaths(m_fileWatcher->files());
|
||||||
}
|
}
|
||||||
|
|
||||||
// AdBlock
|
|
||||||
cleanBlockedObjects();
|
|
||||||
|
|
||||||
// AutoFill
|
// AutoFill
|
||||||
m_passwordEntries = mApp->autoFill()->completePage(this, url());
|
m_passwordEntries = mApp->autoFill()->completePage(this, url());
|
||||||
}
|
}
|
||||||
@ -422,24 +418,6 @@ QVector<PasswordEntry> WebPage::autoFillData() const
|
|||||||
return m_passwordEntries;
|
return m_passwordEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebPage::cleanBlockedObjects()
|
|
||||||
{
|
|
||||||
AdBlockManager* manager = AdBlockManager::instance();
|
|
||||||
if (!manager->isEnabled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Apply global element hiding rules
|
|
||||||
const QString elementHiding = manager->elementHidingRules(url());
|
|
||||||
if (!elementHiding.isEmpty())
|
|
||||||
runJavaScript(Scripts::setCss(elementHiding), WebPage::SafeJsWorld);
|
|
||||||
|
|
||||||
// Apply domain-specific element hiding rules
|
|
||||||
const QString siteElementHiding = manager->elementHidingRulesForDomain(url());
|
|
||||||
if (!siteElementHiding.isEmpty())
|
|
||||||
runJavaScript(Scripts::setCss(siteElementHiding), WebPage::SafeJsWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WebPage::javaScriptPrompt(const QUrl &securityOrigin, const QString &msg, const QString &defaultValue, QString* result)
|
bool WebPage::javaScriptPrompt(const QUrl &securityOrigin, const QString &msg, const QString &defaultValue, QString* result)
|
||||||
{
|
{
|
||||||
Q_UNUSED(securityOrigin)
|
Q_UNUSED(securityOrigin)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
* Falkon - Qt web browser
|
* Falkon - Qt web browser
|
||||||
* Copyright (C) 2010-2017 David Rosca <nowrep@gmail.com>
|
* Copyright (C) 2010-2018 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
|
||||||
@ -77,7 +77,6 @@ protected slots:
|
|||||||
void finished();
|
void finished();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void cleanBlockedObjects();
|
|
||||||
void urlChanged(const QUrl &url);
|
void urlChanged(const QUrl &url);
|
||||||
void watchedFileChanged(const QString &file);
|
void watchedFileChanged(const QString &file);
|
||||||
void windowCloseRequested();
|
void windowCloseRequested();
|
||||||
|
Loading…
Reference in New Issue
Block a user