From b829103bbdbd2f96ab8251b4612373058b1b2fbd Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Mon, 26 Nov 2012 21:40:52 -0500 Subject: [PATCH] Set the URL of NoOpReply to the request URL Prevents insertion of an empty URL into m_responses when the requested URL is blacklisted. --- spec/driver_spec.rb | 7 +++++++ src/NetworkAccessManager.cpp | 6 +----- src/NetworkAccessManager.h | 1 - src/NoOpReply.cpp | 3 ++- src/NoOpReply.h | 3 ++- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 40a5422..9f21b71 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -1935,6 +1935,13 @@ describe Capybara::Webkit::Driver do driver.find("//p").first.text.should == "Inner" end end + + it "returns a status code for blocked urls" do + driver.visit("/") + driver.within_frame('frame1') do + driver.status_code.should == 200 + end + end end describe "timeout for long requests" do diff --git a/src/NetworkAccessManager.cpp b/src/NetworkAccessManager.cpp index 27b9a3b..288a67a 100644 --- a/src/NetworkAccessManager.cpp +++ b/src/NetworkAccessManager.cpp @@ -13,7 +13,7 @@ QNetworkReply* NetworkAccessManager::createRequest(QNetworkAccessManager::Operat QNetworkRequest new_request(request); QByteArray url = new_request.url().toEncoded(); if (this->isBlacklisted(new_request.url())) { - return this->noOpRequest(); + return new NoOpReply(new_request, this); } else { if (operation != QNetworkAccessManager::PostOperation && operation != QNetworkAccessManager::PutOperation) { new_request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant()); @@ -99,7 +99,3 @@ bool NetworkAccessManager::isBlacklisted(QUrl url) { return false; }; -QNetworkReply* NetworkAccessManager::noOpRequest() { - return new NoOpReply(); -}; - diff --git a/src/NetworkAccessManager.h b/src/NetworkAccessManager.h index 6d2b19c..2239bc8 100644 --- a/src/NetworkAccessManager.h +++ b/src/NetworkAccessManager.h @@ -34,7 +34,6 @@ class NetworkAccessManager : public QNetworkAccessManager { QHash m_headers; QHash m_responses; bool isBlacklisted(QUrl url); - QNetworkReply* noOpRequest(); QHash m_redirectMappings; private slots: diff --git a/src/NoOpReply.cpp b/src/NoOpReply.cpp index 2089775..9cd069d 100644 --- a/src/NoOpReply.cpp +++ b/src/NoOpReply.cpp @@ -1,11 +1,12 @@ #include #include "NoOpReply.h" -NoOpReply::NoOpReply(QObject *parent) : QNetworkReply(parent) { +NoOpReply::NoOpReply(QNetworkRequest &request, QObject *parent) : QNetworkReply(parent) { open(ReadOnly | Unbuffered); setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200); setHeader(QNetworkRequest::ContentLengthHeader, QVariant(0)); setHeader(QNetworkRequest::ContentTypeHeader, QVariant(QString("text/plain"))); + setUrl(request.url()); QTimer::singleShot( 0, this, SIGNAL(readyRead()) ); QTimer::singleShot( 0, this, SIGNAL(finished()) ); diff --git a/src/NoOpReply.h b/src/NoOpReply.h index 8c60c0d..123c8eb 100644 --- a/src/NoOpReply.h +++ b/src/NoOpReply.h @@ -1,10 +1,11 @@ #include +#include class NoOpReply : public QNetworkReply { Q_OBJECT public: - NoOpReply( QObject *parent=0 ); + NoOpReply(QNetworkRequest &request, QObject *parent = 0); void abort(); qint64 bytesAvailable() const;