put webview in own class; refs #115

This commit is contained in:
Marc Wäckerlin
2012-02-03 13:04:41 +00:00
parent c7c879d0aa
commit 5e1d9243c5
11 changed files with 448 additions and 439 deletions

View File

@@ -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;