src/WebPage.cpp in capybara-webkit-0.13.2 vs src/WebPage.cpp in capybara-webkit-0.14.0

- old
+ new

@@ -12,10 +12,11 @@ WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) { m_loading = false; m_failed = false; m_manager = manager; m_uuid = QUuid::createUuid().toString(); + m_unsupportedContentLoaded = false; setForwardUnsupportedContent(true); loadJavascript(); setUserStylesheet(); @@ -31,11 +32,10 @@ connect(this, SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(handleUnsupportedContent(QNetworkReply*))); resetWindowSize(); settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); - currentFrame()->setUrl(QUrl("about:blank")); } void WebPage::resetWindowSize() { this->setViewportSize(QSize(1680, 1050)); this->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); @@ -43,24 +43,21 @@ void WebPage::setCustomNetworkAccessManager() { NetworkAccessManager *manager = new NetworkAccessManager(this); manager->setCookieJar(m_manager->cookieJar()); this->setNetworkAccessManager(manager); - connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkAccessManagerFinishedReply(QNetworkReply *))); connect(manager, SIGNAL(sslErrors(QNetworkReply *, QList<QSslError>)), this, SLOT(handleSslErrorsForReply(QNetworkReply *, QList<QSslError>))); - connect(manager, SIGNAL(requestCreated(QByteArray &, QNetworkReply *)), this, SLOT(networkAccessManagerCreatedRequest(QByteArray &, QNetworkReply *))); + connect(manager, SIGNAL(requestCreated(QByteArray &, QNetworkReply *)), + SIGNAL(requestCreated(QByteArray &, QNetworkReply *))); } -void WebPage::networkAccessManagerCreatedRequest(QByteArray &url, QNetworkReply *reply) { - emit requestCreated(url, reply); +void WebPage::unsupportedContentFinishedReply(QNetworkReply *reply) { + m_unsupportedContentLoaded = true; + m_manager->replyFinished(reply); } -void WebPage::networkAccessManagerFinishedReply(QNetworkReply *reply) { - emit replyFinished(reply); -} - void WebPage::loadJavascript() { QResource javascript(":/capybara.js"); if (javascript.isCompressed()) { QByteArray uncompressedBytes(qUncompress(javascript.data(), javascript.size())); m_capybaraJavascript = QString(uncompressedBytes); @@ -71,11 +68,11 @@ m_capybaraJavascript = javascriptString; } } void WebPage::setUserStylesheet() { - QString data = QString("* { font-family: 'Arial' ! important; }").toUtf8().toBase64(); + QString data = QString("*, :first-line, :first-letter, :before, :after { 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 { @@ -84,24 +81,24 @@ } else { return QWebPage::userAgentForUrl(url); } } -QString WebPage::consoleMessages() { - return m_consoleMessages.join("\n"); +QVariantList WebPage::consoleMessages() { + return m_consoleMessages; } -QString WebPage::alertMessages() { - return m_alertMessages.join("\n"); +QVariantList WebPage::alertMessages() { + return m_alertMessages; } -QString WebPage::confirmMessages() { - return m_confirmMessages.join("\n"); +QVariantList WebPage::confirmMessages() { + return m_confirmMessages; } -QString WebPage::promptMessages() { - return m_promptMessages.join("\n"); +QVariantList WebPage::promptMessages() { + return m_promptMessages; } void WebPage::setUserAgent(QString userAgent) { m_userAgent = userAgent; } @@ -132,21 +129,26 @@ QVariant WebPage::invokeCapybaraFunction(QString &name, const QStringList &arguments) { return invokeCapybaraFunction(name.toAscii().data(), arguments); } void WebPage::javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID) { - QString fullMessage = QString::number(lineNumber) + "|" + message; - if (!sourceID.isEmpty()) - fullMessage = sourceID + "|" + fullMessage; - m_consoleMessages.append(fullMessage); - std::cout << qPrintable(fullMessage) << std::endl; + QVariantMap m; + m["message"] = message; + QString fullMessage = QString(message); + if (!sourceID.isEmpty()) { + fullMessage = sourceID + "|" + QString::number(lineNumber) + "|" + fullMessage; + m["source"] = sourceID; + m["line_number"] = lineNumber; + } + m_consoleMessages.append(m); + m_manager->logger() << qPrintable(fullMessage); } void WebPage::javaScriptAlert(QWebFrame *frame, const QString &message) { Q_UNUSED(frame); m_alertMessages.append(message); - std::cout << "ALERT: " << qPrintable(message) << std::endl; + m_manager->logger() << "ALERT:" << qPrintable(message); } bool WebPage::javaScriptConfirm(QWebFrame *frame, const QString &message) { Q_UNUSED(frame); m_confirmMessages.append(message); @@ -167,10 +169,11 @@ } void WebPage::loadStarted() { m_loading = true; m_errorPageMessage = QString(); + m_unsupportedContentLoaded = false; } void WebPage::loadFinished(bool success) { Q_UNUSED(success); m_loading = false; @@ -219,17 +222,16 @@ QString WebPage::chooseFile(QWebFrame *parentFrame, const QString &suggestedFile) { Q_UNUSED(parentFrame); Q_UNUSED(suggestedFile); - return getLastAttachedFileName(); + return getAttachedFileNames().first(); } bool WebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) { if (extension == ChooseMultipleFilesExtension) { - QStringList names = QStringList() << getLastAttachedFileName(); - static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = names; + static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = getAttachedFileNames(); return true; } else if (extension == QWebPage::ErrorPageExtension) { ErrorPageExtensionOption *errorOption = (ErrorPageExtensionOption*) option; m_errorPageMessage = " because of error loading " + errorOption->url.toString() + ": " + errorOption->errorString; @@ -237,12 +239,12 @@ return false; } return false; } -QString WebPage::getLastAttachedFileName() { - return currentFrame()->evaluateJavaScript(QString("Capybara.lastAttachedFile")).toString(); +QStringList WebPage::getAttachedFileNames() { + return currentFrame()->evaluateJavaScript(QString("Capybara.attachedFiles")).toStringList(); } void WebPage::handleSslErrorsForReply(QNetworkReply *reply, const QList<QSslError> &errors) { if (m_manager->ignoreSslErrors()) reply->ignoreSslErrors(errors); @@ -251,26 +253,34 @@ void WebPage::setSkipImageLoading(bool skip) { settings()->setAttribute(QWebSettings::AutoLoadImages, !skip); } int WebPage::getLastStatus() { - return qobject_cast<NetworkAccessManager *>(networkAccessManager())->statusFor(currentFrame()->url()); + return networkAccessManager()->statusFor(currentFrame()->requestedUrl()); } const QList<QNetworkReply::RawHeaderPair> &WebPage::pageHeaders() { - return qobject_cast<NetworkAccessManager *>(networkAccessManager())->headersFor(currentFrame()->url()); + return networkAccessManager()->headersFor(currentFrame()->requestedUrl()); } +NetworkAccessManager *WebPage::networkAccessManager() { + return qobject_cast<NetworkAccessManager *>(QWebPage::networkAccessManager()); +} + void WebPage::handleUnsupportedContent(QNetworkReply *reply) { QVariant contentMimeType = reply->header(QNetworkRequest::ContentTypeHeader); if(!contentMimeType.isNull()) { triggerAction(QWebPage::Stop); UnsupportedContentHandler *handler = new UnsupportedContentHandler(this, reply); if (reply->isFinished()) handler->renderNonHtmlContent(); else handler->waitForReplyToFinish(); } +} + +bool WebPage::unsupportedContentLoaded() { + return m_unsupportedContentLoaded; } bool WebPage::supportsExtension(Extension extension) const { if (extension == ErrorPageExtension) return true;