2015-02-04 14:01:55 +00:00
|
|
|
/*! @file
|
|
|
|
|
|
|
|
@id $Id$
|
|
|
|
*/
|
|
|
|
// 1 2 3 4 5 6 7 8
|
|
|
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
|
|
|
|
#ifndef WEBPAGE_HXX
|
|
|
|
#define WEBPAGE_HXX
|
|
|
|
|
|
|
|
#include <exceptions.hxx>
|
|
|
|
#include <networkaccessmanager.hxx>
|
|
|
|
#include <QWebPage>
|
|
|
|
#include <QWebFrame>
|
2015-11-09 22:33:31 +00:00
|
|
|
#include <QWebSettings>
|
2015-02-04 14:01:55 +00:00
|
|
|
#include <QWidget>
|
|
|
|
#include <QFileDialog>
|
|
|
|
#include <QFile>
|
|
|
|
|
|
|
|
#include <cassert>
|
|
|
|
#ifndef LOG
|
|
|
|
#include <iostream>
|
|
|
|
#define LOG(X) std::clog<<X<<std::endl;
|
|
|
|
inline std::ostream& operator<<(std::ostream& o, const QString& s) {
|
|
|
|
return o<<s.toStdString();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class TestWebPage: public QWebPage {
|
|
|
|
Q_OBJECT;
|
|
|
|
public:
|
|
|
|
TestWebPage(QObject* parent = 0, bool unattended = false):
|
|
|
|
QWebPage(parent),
|
|
|
|
_unattended(unattended) {
|
|
|
|
setNetworkAccessManager(new NetworkAccessManager(this));
|
2015-11-09 22:33:31 +00:00
|
|
|
settings()->setOfflineStorageDefaultQuota(1024*1024*1024);
|
|
|
|
settings()->setOfflineStoragePath("/tmp/");
|
|
|
|
settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
|
|
|
|
//settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
|
|
|
|
settings()->setAttribute(QWebSettings::LocalStorageEnabled, true);
|
2015-02-04 14:01:55 +00:00
|
|
|
}
|
|
|
|
virtual ~TestWebPage() {
|
|
|
|
if (!_nextFile.isEmpty() && !std::uncaught_exception())
|
|
|
|
throw LastFileNotUploaded(_nextFile);
|
|
|
|
}
|
|
|
|
void setNextUploadFile(QString nextFile) {
|
|
|
|
if (!_unattended) throw NotUnattended();
|
|
|
|
if (!_nextFile.isEmpty()) throw LastFileNotUploaded(_nextFile);
|
|
|
|
if (nextFile.isEmpty()) throw EmptyUploadFile();
|
|
|
|
_nextFile = nextFile;
|
|
|
|
}
|
|
|
|
bool uploadPrepared() {
|
|
|
|
return !_nextFile.isEmpty();
|
|
|
|
}
|
|
|
|
Q_SIGNALS:
|
|
|
|
void uploadFile(QString filename);
|
|
|
|
protected:
|
|
|
|
virtual QString chooseFile(QWebFrame* frame, const QString&) {
|
|
|
|
if (_unattended) {
|
|
|
|
if (_nextFile.isEmpty()) throw NoUploadFile();
|
|
|
|
if (!QFile(_nextFile).exists()) throw FileNotFound(_nextFile);
|
|
|
|
QString filename(_nextFile);
|
|
|
|
_nextFile.clear();
|
|
|
|
return filename;
|
|
|
|
} else {
|
|
|
|
QString filename(QFileDialog::getOpenFileName
|
|
|
|
(frame->page()->view(), tr("File to Upload")));
|
|
|
|
if (filename.size()) uploadFile(filename);
|
|
|
|
return filename;
|
|
|
|
}
|
|
|
|
}
|
2016-05-11 09:07:04 +00:00
|
|
|
virtual void javaScriptAlert(QWebFrame* frame, const QString& msg) {
|
|
|
|
LOG("javaScriptAlert: "+msg);
|
|
|
|
if (_unattended) {
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
return;
|
|
|
|
//return QWebPage::javaScriptAlert(frame, msg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
virtual bool javaScriptConfirm(QWebFrame* frame, const QString& msg) {
|
|
|
|
LOG("javaScriptConfirm "+msg);
|
|
|
|
if (_unattended) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
//return QWebPage::javaScriptConfirm(frame, msg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
virtual void javaScriptConsoleMessage(const QString& msg,
|
|
|
|
int line, const QString& src) {
|
|
|
|
LOG("javaScriptConsoleMessage: "+msg);
|
|
|
|
if (_unattended) {
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
return;
|
|
|
|
//return QWebPage::javaScriptConsoleMessage(msg, line, src);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
virtual bool javaScriptPrompt(QWebFrame* frame, const QString& msg,
|
|
|
|
const QString& defaultValue, QString* result) {
|
|
|
|
LOG("javaScriptPrompt: "+msg);
|
|
|
|
if (_unattended) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
//return QWebPage::javaScriptPrompt(frame, msg, defaultValue, result);
|
|
|
|
}
|
|
|
|
}
|
2015-02-04 14:01:55 +00:00
|
|
|
private:
|
|
|
|
bool _unattended;
|
|
|
|
QString _nextFile;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|