From d8020ce3a4dfc75cfb715c563398cc6e444d601b Mon Sep 17 00:00:00 2001 From: Joe Ferris Date: Tue, 10 Jul 2012 20:03:32 -0700 Subject: [PATCH] Treat fewer responses as fatal failures * Relies on errorExtension instead of loadFinished * Ignores errors from canceled requests --- src/UnsupportedContentHandler.cpp | 15 +++++---------- src/UnsupportedContentHandler.h | 4 ++-- src/WebPage.cpp | 14 +++++++++++--- src/WebPage.h | 1 + 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/UnsupportedContentHandler.cpp b/src/UnsupportedContentHandler.cpp index c8f40fa..113a4ee 100644 --- a/src/UnsupportedContentHandler.cpp +++ b/src/UnsupportedContentHandler.cpp @@ -10,23 +10,18 @@ UnsupportedContentHandler::UnsupportedContentHandler(WebPage *page, QNetworkRepl } void UnsupportedContentHandler::handleUnsupportedContent() { - QVariant contentMimeType = m_reply->header(QNetworkRequest::ContentTypeHeader); - if(contentMimeType.isNull()) { - this->finish(false); - } else { - this->loadUnsupportedContent(); - this->finish(true); - } + this->renderNonHtmlContent(); + this->finish(); this->deleteLater(); } -void UnsupportedContentHandler::loadUnsupportedContent() { +void UnsupportedContentHandler::renderNonHtmlContent() { QByteArray text = m_reply->readAll(); m_page->mainFrame()->setContent(text, QString("text/plain"), m_reply->url()); } -void UnsupportedContentHandler::finish(bool success) { +void UnsupportedContentHandler::finish() { connect(m_page, SIGNAL(loadFinished(bool)), m_page, SLOT(loadFinished(bool))); m_page->networkAccessManagerFinishedReply(m_reply); - m_page->loadFinished(success); + m_page->loadFinished(true); } diff --git a/src/UnsupportedContentHandler.h b/src/UnsupportedContentHandler.h index 2c9e5c9..6878a0b 100644 --- a/src/UnsupportedContentHandler.h +++ b/src/UnsupportedContentHandler.h @@ -13,6 +13,6 @@ class UnsupportedContentHandler : public QObject { private: WebPage *m_page; QNetworkReply *m_reply; - void loadUnsupportedContent(); - void finish(bool success); + void renderNonHtmlContent(); + void finish(); }; diff --git a/src/WebPage.cpp b/src/WebPage.cpp index fff2e2e..ad9b32d 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -11,6 +11,7 @@ WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) { m_loading = false; + m_failed = false; m_manager = manager; m_uuid = QUuid::createUuid().toString(); m_lastStatus = 0; @@ -162,8 +163,10 @@ void WebPage::loadStarted() { } void WebPage::loadFinished(bool success) { + Q_UNUSED(success); m_loading = false; - emit pageFinished(success); + emit pageFinished(!m_failed); + m_failed = false; } bool WebPage::isLoading() const { @@ -221,6 +224,7 @@ bool WebPage::extension(Extension extension, const ExtensionOption *option, Exte else if (extension == QWebPage::ErrorPageExtension) { ErrorPageExtensionOption *errorOption = (ErrorPageExtensionOption*) option; m_errorPageMessage = " because of error loading " + errorOption->url.toString() + ": " + errorOption->errorString; + m_failed = true; return false; } return false; @@ -248,8 +252,12 @@ QString WebPage::pageHeaders() { } void WebPage::handleUnsupportedContent(QNetworkReply *reply) { - UnsupportedContentHandler *handler = new UnsupportedContentHandler(this, reply); - Q_UNUSED(handler); + QVariant contentMimeType = reply->header(QNetworkRequest::ContentTypeHeader); + if(!contentMimeType.isNull()) { + triggerAction(QWebPage::Stop); + UnsupportedContentHandler *handler = new UnsupportedContentHandler(this, reply); + Q_UNUSED(handler); + } } bool WebPage::supportsExtension(Extension extension) const { diff --git a/src/WebPage.h b/src/WebPage.h index 0123b74..2cbd4ff 100644 --- a/src/WebPage.h +++ b/src/WebPage.h @@ -57,6 +57,7 @@ class WebPage : public QWebPage { QString m_capybaraJavascript; QString m_userAgent; bool m_loading; + bool m_failed; QString getLastAttachedFileName(); void loadJavascript(); void setUserStylesheet();