src/WebPage.cpp in capybara-webkit-0.5.0 vs src/WebPage.cpp in capybara-webkit-0.6.0
- old
+ new
@@ -1,28 +1,56 @@
#include "WebPage.h"
#include "JavascriptInvocation.h"
+#include "NetworkAccessManager.h"
#include <QResource>
#include <iostream>
WebPage::WebPage(QObject *parent) : QWebPage(parent) {
+ loadJavascript();
+ setUserStylesheet();
+
+ m_loading = false;
+
+ this->setNetworkAccessManager(new NetworkAccessManager());
+
+ connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
+ connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
+ connect(this, SIGNAL(frameCreated(QWebFrame *)),
+ this, SLOT(frameCreated(QWebFrame *)));
+}
+
+void WebPage::loadJavascript() {
QResource javascript(":/capybara.js");
if (javascript.isCompressed()) {
QByteArray uncompressedBytes(qUncompress(javascript.data(), javascript.size()));
m_capybaraJavascript = QString(uncompressedBytes);
} else {
char * javascriptString = new char[javascript.size() + 1];
strcpy(javascriptString, (const char *)javascript.data());
javascriptString[javascript.size()] = 0;
m_capybaraJavascript = javascriptString;
}
- m_loading = false;
- connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
- connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
- connect(this, SIGNAL(frameCreated(QWebFrame *)),
- this, SLOT(frameCreated(QWebFrame *)));
}
+void WebPage::setUserStylesheet() {
+ QString data = QString("* { font-family: 'Arial' ! important; }").toUtf8().toBase64();
+ QUrl url = QUrl(QString("data:text/css;charset=utf-8;base64,") + data);
+ settings()->setUserStyleSheetUrl(url);
+}
+
+QString WebPage::userAgentForUrl(const QUrl &url ) const {
+ if (!m_userAgent.isEmpty()) {
+ return m_userAgent;
+ } else {
+ return QWebPage::userAgentForUrl(url);
+ }
+}
+
+void WebPage::setUserAgent(QString userAgent) {
+ m_userAgent = userAgent;
+}
+
void WebPage::frameCreated(QWebFrame * frame) {
connect(frame, SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(injectJavascriptHelpers()));
}
@@ -88,5 +116,51 @@
QString WebPage::failureString() {
return QString("Unable to load URL: ") + currentFrame()->requestedUrl().toString();
}
+bool WebPage::render(const QString &fileName) {
+ QFileInfo fileInfo(fileName);
+ QDir dir;
+ dir.mkpath(fileInfo.absolutePath());
+
+ QSize viewportSize = this->viewportSize();
+ QSize pageSize = this->mainFrame()->contentsSize();
+ if (pageSize.isEmpty()) {
+ return false;
+ }
+
+ QImage buffer(pageSize, QImage::Format_ARGB32);
+ buffer.fill(qRgba(255, 255, 255, 0));
+
+ QPainter p(&buffer);
+ p.setRenderHint( QPainter::Antialiasing, true);
+ p.setRenderHint( QPainter::TextAntialiasing, true);
+ p.setRenderHint( QPainter::SmoothPixmapTransform, true);
+
+ this->setViewportSize(pageSize);
+ this->mainFrame()->render(&p);
+ p.end();
+ this->setViewportSize(viewportSize);
+
+ return buffer.save(fileName);
+}
+
+QString WebPage::chooseFile(QWebFrame *parentFrame, const QString &suggestedFile) {
+ Q_UNUSED(parentFrame);
+ Q_UNUSED(suggestedFile);
+
+ return getLastAttachedFileName();
+}
+
+bool WebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) {
+ if (extension == ChooseMultipleFilesExtension) {
+ QStringList names = QStringList() << getLastAttachedFileName();
+ static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = names;
+ return true;
+ }
+ return false;
+}
+
+QString WebPage::getLastAttachedFileName() {
+ return currentFrame()->evaluateJavaScript(QString("Capybara.lastAttachedFile")).toString();
+}