#include "webview.h"
#include <QWebFrame>
#include <QNetworkReply>
#include <QMessageBox>
#include <QTimer>
WebView::WebView(QWidget* parent)
: QWebView(parent),
_timer(new QTimer(this)),
_abortedDownload(false) {
_timer->setSingleShot(true);
connect(page(), SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested()));
page()->setForwardUnsupportedContent(true);
page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
connect(page(), SIGNAL(unsupportedContent(QNetworkReply*)),this,SLOT(unsupportedContent(QNetworkReply*)));
connect(page(), SIGNAL(downloadRequested(QNetworkRequest)),this,SLOT(downloadRequest(QNetworkRequest)));
connect(_timer, SIGNAL(timeout()), this, SLOT(downloadDeniedMessage()));
}
void WebView::windowCloseRequested()
{
// If we have an old URL stored on the stack, navigate back to it, otherwise we return and nothing happens
if (_urls.empty())
return;
QUrl url = _urls.pop();
page()->mainFrame()->load(url);
}
QWebView* WebView::createWindow(QWebPage::WebWindowType)
{
// Remember current URL, then return the current Web View so no new window opens
_urls.push(this->url());
return this;
}
void WebView::unsupportedContent(QNetworkReply* rep)
{
_abortedDownload = true;
rep->abort();
rep->deleteLater();
_timer->start(1);
}
void WebView::downloadRequest(QNetworkRequest)
{
_timer->start(1);
}
void WebView::downloadDeniedMessage()
{
QMessageBox::warning(this->parentWidget(), QString::fromUtf8("Denied"),
QString::fromUtf8("The requested action triggered a download, which is not allowed.\n\n"
"Diese Aktion löst einen Download aus, was nicht erlaubt ist."));
}