put webview in own class; refs #115
This commit is contained in:
149
src/browser.hxx
149
src/browser.hxx
@@ -19,8 +19,6 @@
|
||||
#include <QtGui/QPrinter>
|
||||
#include <QtGui/QPrintDialog>
|
||||
#include <QtGui/QPrintPreviewDialog>
|
||||
#include <QtWebKit/QWebPage>
|
||||
#include <QtWebKit/QWebView>
|
||||
#include <QtWebKit/QWebFrame>
|
||||
#include <QtWebKit/QWebHistory>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
@@ -35,17 +33,16 @@
|
||||
#include <errorlog.hxx>
|
||||
#include <downloadmanager.hxx>
|
||||
#include <authentication.hxx>
|
||||
#include <webpage.hxx>
|
||||
#include <webview.hxx>
|
||||
#include <settings.hxx>
|
||||
#include <editbookmarks.hxx>
|
||||
#include <pluginfactory.hxx>
|
||||
#include <temporaryfile.hxx>
|
||||
#include <saveorrun.hxx>
|
||||
#include <sslclientnetworkmanager.hxx>
|
||||
#include <proxyface/proxy.hxx>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
#include <memory>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#ifndef LOG
|
||||
@@ -63,7 +60,8 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
Settings::MimeTypes mimeTypes = Settings::MimeTypes(),
|
||||
bool kiosk = false, bool login = true, bool quirks=true):
|
||||
_url(0), _find(new ButtonLineEdit),
|
||||
_kiosk(kiosk),
|
||||
_kiosk(kiosk),
|
||||
_downloadManager(new DownloadManager),
|
||||
_settings(mimeTypes, this, settings, !kiosk),
|
||||
_errorLog(this), _logincertificate(this),
|
||||
_proxy("http://swisssign.com", this),
|
||||
@@ -167,16 +165,16 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
assert(connect(&_networkManager, SIGNAL(finished(QNetworkReply*)),
|
||||
SLOT(finished(QNetworkReply*))));
|
||||
assert(connect(&_networkManager, SIGNAL(created(QNetworkReply*)),
|
||||
&_downloadManager, SLOT(add(QNetworkReply*))));
|
||||
assert(connect(&_downloadManager, SIGNAL(progress(qint64, qint64)),
|
||||
_downloadManager.get(), SLOT(add(QNetworkReply*))));
|
||||
assert(connect(_downloadManager.get(), SIGNAL(progress(qint64, qint64)),
|
||||
SLOT(progress(qint64, qint64))));
|
||||
assert(connect(&_downloadManager, SIGNAL(started()),
|
||||
assert(connect(_downloadManager.get(), SIGNAL(started()),
|
||||
SLOT(started())));
|
||||
assert(connect(&_downloadManager, SIGNAL(finished()),
|
||||
assert(connect(_downloadManager.get(), SIGNAL(finished()),
|
||||
SLOT(finished())));
|
||||
assert(connect(&_downloadManager, SIGNAL(error(QString)),
|
||||
assert(connect(_downloadManager.get(), SIGNAL(error(QString)),
|
||||
SLOT(downloadError(QString))));
|
||||
assert(connect(&_downloadManager, SIGNAL(metaDataChanged(QNetworkReply*)),
|
||||
assert(connect(_downloadManager.get(), SIGNAL(metaDataChanged(QNetworkReply*)),
|
||||
SLOT(metaDataChanged(QNetworkReply*))));
|
||||
assert(connect(&_settings, SIGNAL(newSettings()), SLOT(newSettings())));
|
||||
newSettings();
|
||||
@@ -223,14 +221,69 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
return true;
|
||||
}
|
||||
|
||||
QWebView* newTab() {
|
||||
QWebView* browser(new QWebView);
|
||||
browser->setPage(new WebPage(this, browser));
|
||||
browser->page()->setPluginFactory(new PluginFactory);
|
||||
browser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
|
||||
WebView* newTab() {
|
||||
WebView* browser(new WebView);
|
||||
newTab(browser);
|
||||
return browser;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void closeEvent(QCloseEvent *event) {
|
||||
LOG;
|
||||
if (!_kiosk && !_startUrl && _settings.flag("SaveWindowState")
|
||||
&& _settings())
|
||||
saveWin();
|
||||
QMainWindow::closeEvent(event);
|
||||
QApplication::exit(0);
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void load() {
|
||||
LOG;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
load(qobject_cast<QComboBox*>(_url)->currentText());
|
||||
else
|
||||
load(qobject_cast<QLineEdit*>(_url)->text());
|
||||
}
|
||||
|
||||
void load(QString page) {
|
||||
_settings.replaceSearchEngine(page);
|
||||
if (QUrl(page).scheme()=="") page = "http://"+page;
|
||||
load(QUrl(page));
|
||||
}
|
||||
|
||||
void load(QUrl page, QWebView* view=0) {
|
||||
LOG<<page.toString();
|
||||
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
|
||||
if (!check(page)) {
|
||||
LOG<<"########## BLACK LISTED IGNORED ##########";
|
||||
statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
|
||||
QMessageBox::warning(this, tr("Access Denied"),
|
||||
tr("<p>Access denied due to security"
|
||||
" considerations.</p><p>You are not"
|
||||
" allowed to connect to %1.")
|
||||
.arg(page.toString()));
|
||||
return;
|
||||
}
|
||||
statusBar()->showMessage(tr("Reading: %1").arg(page.toString()));
|
||||
if (!page.isValid()) {
|
||||
statusBar()->showMessage(tr("Illegal URL: %1").arg(page.errorString()));
|
||||
return;
|
||||
}
|
||||
if (!view) view=qobject_cast<QWebView*>(_tabs->currentWidget());
|
||||
view->load(page);
|
||||
}
|
||||
|
||||
void newTab(WebView* browser) {
|
||||
browser->page()->setNetworkAccessManager(&_networkManager);
|
||||
browser->page()->setForwardUnsupportedContent(true);
|
||||
assert(connect(&_networkManager, SIGNAL(finished(QNetworkReply*)),
|
||||
SLOT(finished(QNetworkReply*))));
|
||||
_url->setFocus();
|
||||
// WebView
|
||||
assert(connect(browser, SIGNAL(newView(WebView*)),
|
||||
SLOT(newTab(WebView*))));
|
||||
// QWebView
|
||||
assert(connect(browser, SIGNAL(urlChanged(const QUrl&)),
|
||||
SLOT(urlChanged(const QUrl&))));
|
||||
@@ -486,56 +539,6 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&))));
|
||||
_tabs->setCurrentIndex(_tabs->addTab(browser, tr("New Tab")));
|
||||
_tabs->setTabsClosable(_tabs->count()>1);
|
||||
return browser;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
void closeEvent(QCloseEvent *event) {
|
||||
LOG;
|
||||
if (!_kiosk && !_startUrl && _settings.flag("SaveWindowState")
|
||||
&& _settings())
|
||||
saveWin();
|
||||
QMainWindow::closeEvent(event);
|
||||
QApplication::exit(0);
|
||||
}
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void load() {
|
||||
LOG;
|
||||
if (qobject_cast<QComboBox*>(_url))
|
||||
load(qobject_cast<QComboBox*>(_url)->currentText());
|
||||
else
|
||||
load(qobject_cast<QLineEdit*>(_url)->text());
|
||||
}
|
||||
|
||||
void load(QString page) {
|
||||
_settings.replaceSearchEngine(page);
|
||||
if (QUrl(page).scheme()=="") page = "http://"+page;
|
||||
load(QUrl(page));
|
||||
}
|
||||
|
||||
void load(QUrl page, QWebView* view=0) {
|
||||
LOG<<page.toString();
|
||||
statusBar()->showMessage(tr("Checking: %1").arg(page.toString()));
|
||||
if (!check(page)) {
|
||||
LOG<<"########## BLACK LISTED IGNORED ##########";
|
||||
statusBar()->showMessage(tr("Forbidden: %1").arg(page.toString()));
|
||||
QMessageBox::warning(this, tr("Access Denied"),
|
||||
tr("<p>Access denied due to security"
|
||||
" considerations.</p><p>You are not"
|
||||
" allowed to connect to %1.")
|
||||
.arg(page.toString()));
|
||||
return;
|
||||
}
|
||||
statusBar()->showMessage(tr("Reading: %1").arg(page.toString()));
|
||||
if (!page.isValid()) {
|
||||
statusBar()->showMessage(tr("Illegal URL: %1").arg(page.errorString()));
|
||||
return;
|
||||
}
|
||||
if (!view) view=qobject_cast<QWebView*>(_tabs->currentWidget());
|
||||
view->load(page);
|
||||
}
|
||||
|
||||
void newSettings() {
|
||||
@@ -685,7 +688,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
LOG;
|
||||
for (int i(0); i<_tabs->count(); ++i)
|
||||
qobject_cast<QWebView*>(_tabs->widget(i))->stop();
|
||||
_downloadManager.abort();
|
||||
_downloadManager->abort();
|
||||
}
|
||||
|
||||
void on_actionClearLocation_triggered() {
|
||||
@@ -1229,7 +1232,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
|
||||
void unsupportedContent(QNetworkReply* reply) {
|
||||
LOG<<reply->header(QNetworkRequest::ContentTypeHeader).toString();
|
||||
LOG<<"Status:"<<_downloadManager.networkError(reply->error());
|
||||
LOG<<"Status:"<<_downloadManager->networkError(reply->error());
|
||||
QList<QNetworkReply::RawHeaderPair> rh(reply->rawHeaderPairs());
|
||||
for(QList<QNetworkReply::RawHeaderPair>::iterator it(rh.begin());
|
||||
it!=rh.end(); ++it) {
|
||||
@@ -1278,12 +1281,12 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
LOG<<"Content-Type:"<<reply->header(QNetworkRequest::ContentTypeHeader)
|
||||
.toString();
|
||||
LOG<<"Content-Disposition:"<<reply->rawHeader("Content-Disposition");
|
||||
LOG<<"Status:"<<_downloadManager.networkError(reply->error());
|
||||
LOG<<"Status:"<<_downloadManager->networkError(reply->error());
|
||||
LOG<<"URL:"<<reply->url().toString();
|
||||
LOG<<"File:"<<reply->url().toLocalFile();
|
||||
LOG<<"Path:"<<reply->url().path();
|
||||
if (reply->error()!=QNetworkReply::NoError) {
|
||||
LOG<<"Error:"<<_downloadManager.networkError(reply->error());
|
||||
LOG<<"Error:"<<_downloadManager->networkError(reply->error());
|
||||
return;
|
||||
}
|
||||
QString filename
|
||||
@@ -1555,7 +1558,7 @@ class Browser: public QMainWindow, protected Ui::Browser {
|
||||
bool _kiosk;
|
||||
QPrinter _printer;
|
||||
SslClientAuthNetworkAccessManager _networkManager;
|
||||
DownloadManager _downloadManager;
|
||||
std::shared_ptr<DownloadManager> _downloadManager;
|
||||
typedef std::map<QProcess*, TemporaryFile*> DownloadProcesses;
|
||||
DownloadProcesses _downloadProcesses;
|
||||
Settings _settings;
|
||||
|
||||
Reference in New Issue
Block a user