From 58e6a2539841d5a0cb9361db537fb2853ded9a58 Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Thu, 21 Jun 2012 23:34:51 -0400 Subject: [PATCH] Shared cookie jar for all windows --- spec/driver_spec.rb | 29 +++++++++++++++++++++++++++++ src/ClearCookies.cpp | 5 +---- src/GetCookies.cpp | 4 +--- src/SetCookie.cpp | 4 +--- src/WebPage.cpp | 2 +- src/WebPageManager.cpp | 7 +++++++ src/WebPageManager.h | 3 +++ 7 files changed, 43 insertions(+), 11 deletions(-) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 1dfa916..1dec3ca 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -1672,6 +1672,35 @@ describe Capybara::Driver::Webkit do end end + context "javascript new window cookie app" do + let(:session_id) { '12345' } + + before(:all) do + @app = lambda do |env| + request = ::Rack::Request.new(env) + response = ::Rack::Response.new + case request.path + when '/new_window' + response.write <<-HTML + + + + HTML + when '/set_cookie' + response.set_cookie('session_id', session_id) + end + response + end + end + + it "should preserve cookies across windows" do + subject.visit("/new_window") + subject.cookies['session_id'].should == session_id + end + end + context "timers app" do before(:all) do @app = lambda do |env| diff --git a/src/ClearCookies.cpp b/src/ClearCookies.cpp index bc04942..0518fee 100644 --- a/src/ClearCookies.cpp +++ b/src/ClearCookies.cpp @@ -8,9 +8,6 @@ ClearCookies::ClearCookies(WebPageManager *manager, QStringList &arguments, QObj void ClearCookies::start() { - NetworkCookieJar *jar = qobject_cast(page() - ->networkAccessManager() - ->cookieJar()); - jar->clearCookies(); + manager()->cookieJar()->clearCookies(); emit finished(new Response(true)); } diff --git a/src/GetCookies.cpp b/src/GetCookies.cpp index 92dbf68..9e336f3 100644 --- a/src/GetCookies.cpp +++ b/src/GetCookies.cpp @@ -10,9 +10,7 @@ GetCookies::GetCookies(WebPageManager *manager, QStringList &arguments, QObject void GetCookies::start() { - NetworkCookieJar *jar = qobject_cast(page() - ->networkAccessManager() - ->cookieJar()); + NetworkCookieJar *jar = manager()->cookieJar(); foreach (QNetworkCookie cookie, jar->getAllCookies()) { m_buffer.append(cookie.toRawForm()); m_buffer.append("\n"); diff --git a/src/SetCookie.cpp b/src/SetCookie.cpp index 5774f81..735a920 100644 --- a/src/SetCookie.cpp +++ b/src/SetCookie.cpp @@ -9,9 +9,7 @@ SetCookie::SetCookie(WebPageManager *manager, QStringList &arguments, QObject *p void SetCookie::start() { QList cookies = QNetworkCookie::parseCookies(arguments()[0].toAscii()); - NetworkCookieJar *jar = qobject_cast(page() - ->networkAccessManager() - ->cookieJar()); + NetworkCookieJar *jar = manager()->cookieJar(); jar->overwriteCookies(cookies); emit finished(new Response(true)); } diff --git a/src/WebPage.cpp b/src/WebPage.cpp index d5a92b9..55b26c3 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -43,7 +43,7 @@ void WebPage::resetWindowSize() { void WebPage::setCustomNetworkAccessManager() { NetworkAccessManager *manager = new NetworkAccessManager(this); - manager->setCookieJar(new NetworkCookieJar(this)); + manager->setCookieJar(m_manager->cookieJar()); this->setNetworkAccessManager(manager); connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); connect(manager, SIGNAL(sslErrors(QNetworkReply *, QList)), diff --git a/src/WebPageManager.cpp b/src/WebPageManager.cpp index 12a4991..2332525 100644 --- a/src/WebPageManager.cpp +++ b/src/WebPageManager.cpp @@ -1,9 +1,11 @@ #include "WebPageManager.h" #include "WebPage.h" +#include "NetworkCookieJar.h" #include WebPageManager::WebPageManager(QObject *parent) : QObject(parent) { m_ignoreSslErrors = false; + m_cookieJar = new NetworkCookieJar(this); createPage(this)->setFocus(); } @@ -48,7 +50,12 @@ bool WebPageManager::ignoreSslErrors() { } void WebPageManager::reset() { + m_cookieJar->clearCookies(); m_pages.first()->deleteLater(); m_pages.clear(); createPage(this)->setFocus(); } + +NetworkCookieJar *WebPageManager::cookieJar() { + return m_cookieJar; +} diff --git a/src/WebPageManager.h b/src/WebPageManager.h index 5476bcc..7140cef 100644 --- a/src/WebPageManager.h +++ b/src/WebPageManager.h @@ -4,6 +4,7 @@ #include class WebPage; +class NetworkCookieJar; class WebPageManager : public QObject { Q_OBJECT @@ -18,6 +19,7 @@ class WebPageManager : public QObject { void setIgnoreSslErrors(bool); bool ignoreSslErrors(); void reset(); + NetworkCookieJar *cookieJar(); public slots: void emitPageFinished(bool); @@ -31,6 +33,7 @@ class WebPageManager : public QObject { QList m_pages; WebPage *m_currentPage; bool m_ignoreSslErrors; + NetworkCookieJar *m_cookieJar; }; #endif // _WEBPAGEMANAGER_H