diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb index 35e414f..cd856c6 100644 --- a/spec/integration/session_spec.rb +++ b/spec/integration/session_spec.rb @@ -79,12 +79,14 @@ describe Capybara::Session do subject.click_button('ボタン') end end + context "status code" do before(:all) do @app = lambda do |env| params = ::Rack::Utils.parse_query(env['QUERY_STRING']) if params["img"] == "true" - return [404, { 'Content-Type' => 'image/gif', 'Content-Length' => '0' }, ['not found']] + body = 'not found' + return [404, { 'Content-Type' => 'image/gif', 'Content-Length' => body.length.to_s }, [body]] end body = <<-HTML diff --git a/src/Reset.cpp b/src/Reset.cpp index b7a92e9..b46adc0 100644 --- a/src/Reset.cpp +++ b/src/Reset.cpp @@ -11,8 +11,9 @@ void Reset::start(QStringList &arguments) { page()->triggerAction(QWebPage::Stop); page()->currentFrame()->setHtml(""); page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar()); - page()->setNetworkAccessManager(new NetworkAccessManager()); + page()->setCustomNetworkAccessManager(); page()->setUserAgent(NULL); + page()->resetLastStatus(); emit finished(new Response(true)); } diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 0a7c9a4..c49c8b6 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -9,10 +9,7 @@ WebPage::WebPage(QObject *parent) : QWebPage(parent) { setUserStylesheet(); m_loading = false; - - NetworkAccessManager *manager = new NetworkAccessManager(); - this->setNetworkAccessManager(manager); - connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); + this->setCustomNetworkAccessManager(); connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); @@ -20,6 +17,12 @@ WebPage::WebPage(QObject *parent) : QWebPage(parent) { this, SLOT(frameCreated(QWebFrame *))); } +void WebPage::setCustomNetworkAccessManager() { + NetworkAccessManager *manager = new NetworkAccessManager(); + this->setNetworkAccessManager(manager); + connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); +} + void WebPage::loadJavascript() { QResource javascript(":/capybara.js"); if (javascript.isCompressed()) { @@ -168,7 +171,7 @@ QString WebPage::getLastAttachedFileName() { } void WebPage::replyFinished(QNetworkReply *reply) { - if (reply->url() == this->mainFrame()->url()) { + if (reply->url() == this->currentFrame()->url()) { QStringList headers; lastStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); QList list = reply->rawHeaderList(); @@ -186,6 +189,10 @@ int WebPage::getLastStatus() { return lastStatus; } +void WebPage::resetLastStatus() { + lastStatus = 0; +} + QString WebPage::pageHeaders() { return m_pageHeaders; } diff --git a/src/WebPage.h b/src/WebPage.h index 231bcf3..52db100 100644 --- a/src/WebPage.h +++ b/src/WebPage.h @@ -11,6 +11,8 @@ class WebPage : public QWebPage { QString userAgentForUrl(const QUrl &url ) const; void setUserAgent(QString userAgent); int getLastStatus(); + void resetLastStatus(); + void setCustomNetworkAccessManager(); bool render(const QString &fileName); virtual bool extension (Extension extension, const ExtensionOption *option=0, ExtensionReturn *output=0);