diff --git a/lib/capybara/driver/webkit.rb b/lib/capybara/driver/webkit.rb index b7133d6..9a2d8e6 100644 --- a/lib/capybara/driver/webkit.rb +++ b/lib/capybara/driver/webkit.rb @@ -54,7 +54,7 @@ class Capybara::Driver::Webkit end def response_headers - raise Capybara::NotSupportedByDriverError + browser.response_headers end def status_code diff --git a/lib/capybara/driver/webkit/browser.rb b/lib/capybara/driver/webkit/browser.rb index dbe8af7..063d305 100644 --- a/lib/capybara/driver/webkit/browser.rb +++ b/lib/capybara/driver/webkit/browser.rb @@ -44,6 +44,10 @@ class Capybara::Driver::Webkit command("Status").to_i end + def response_headers + Hash[command("Headers").split("\n").map { |header| header.split(": ") }] + end + def url command("Url") end diff --git a/spec/integration/driver_spec.rb b/spec/integration/driver_spec.rb index cc8a2df..7725be3 100644 --- a/spec/integration/driver_spec.rb +++ b/spec/integration/driver_spec.rb @@ -14,7 +14,7 @@ describe Capybara::Driver::Webkit do @driver.server_port.should eq(@driver.instance_variable_get(:@rack_server).port) end - # it_should_behave_like "driver with header support" + it_should_behave_like "driver with header support" it_should_behave_like "driver with status code support" # it_should_behave_like "driver with frame support" end diff --git a/src/Connection.cpp b/src/Connection.cpp index efdae78..1da9a0e 100644 --- a/src/Connection.cpp +++ b/src/Connection.cpp @@ -14,6 +14,7 @@ #include "Render.h" #include "Body.h" #include "Status.h" +#include "Headers.h" #include #include diff --git a/src/Headers.cpp b/src/Headers.cpp new file mode 100644 index 0000000..1ffab85 --- /dev/null +++ b/src/Headers.cpp @@ -0,0 +1,11 @@ +#include "Headers.h" +#include "WebPage.h" + +Headers::Headers(WebPage *page, QObject *parent) : Command(page, parent) { +} + +void Headers::start(QStringList &arguments) { + Q_UNUSED(arguments); + emit finished(new Response(true, page()->pageHeaders())); +} + diff --git a/src/Headers.h b/src/Headers.h new file mode 100644 index 0000000..72d4b28 --- /dev/null +++ b/src/Headers.h @@ -0,0 +1,12 @@ +#include "Command.h" + +class WebPage; + +class Headers : public Command { + Q_OBJECT + + public: + Headers(WebPage *page, QObject *parent = 0); + virtual void start(QStringList &arguments); +}; + diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 01b241b..9dfb15e 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -168,9 +168,22 @@ QString WebPage::getLastAttachedFileName() { } void WebPage::replyFinished(QNetworkReply *reply) { + QStringList headers; lastStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + QList list = reply->rawHeaderList(); + + int length = list.size(); + for(int i = 0; i < length; i++) { + headers << list.at(i)+": "+reply->rawHeader(list.at(i)); + } + + m_pageHeaders = headers.join("\n"); } int WebPage::getLastStatus() { return lastStatus; } + +QString WebPage::pageHeaders() { + return m_pageHeaders; +} diff --git a/src/WebPage.h b/src/WebPage.h index 98c538e..231bcf3 100644 --- a/src/WebPage.h +++ b/src/WebPage.h @@ -20,6 +20,7 @@ class WebPage : public QWebPage { void loadStarted(); void loadFinished(bool); bool isLoading() const; + QString pageHeaders(); void frameCreated(QWebFrame *); void replyFinished(QNetworkReply *reply); @@ -38,5 +39,6 @@ class WebPage : public QWebPage { void loadJavascript(); void setUserStylesheet(); int lastStatus; + QString m_pageHeaders; }; diff --git a/src/find_command.h b/src/find_command.h index d13656b..a480c7d 100644 --- a/src/find_command.h +++ b/src/find_command.h @@ -16,3 +16,4 @@ CHECK_COMMAND(Header) CHECK_COMMAND(Render) CHECK_COMMAND(Body) CHECK_COMMAND(Status) +CHECK_COMMAND(Headers) \ No newline at end of file diff --git a/src/webkit_server.pro b/src/webkit_server.pro index fcb1e21..eb2df76 100644 --- a/src/webkit_server.pro +++ b/src/webkit_server.pro @@ -1,8 +1,8 @@ TEMPLATE = app TARGET = webkit_server DESTDIR = . -HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h Response.h NetworkAccessManager.h Header.h Render.h body.h Status.h -SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp Response.cpp NetworkAccessManager.cpp Header.cpp Render.cpp body.cpp Status.cpp +HEADERS = WebPage.h Server.h Connection.h Command.h Visit.h Find.h Reset.h Node.h JavascriptInvocation.h Url.h Source.h Evaluate.h Execute.h FrameFocus.h Response.h NetworkAccessManager.h Header.h Render.h body.h Status.h Headers.h +SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp Find.cpp Reset.cpp Node.cpp JavascriptInvocation.cpp Url.cpp Source.cpp Evaluate.cpp Execute.cpp FrameFocus.cpp Response.cpp NetworkAccessManager.cpp Header.cpp Render.cpp body.cpp Status.cpp Headers.cpp RESOURCES = webkit_server.qrc QT += network webkit CONFIG += console