1
0
Fork 0
mirror of https://github.com/thoughtbot/capybara-webkit synced 2023-03-27 23:22:28 -04:00

New windows should respect ignore_ssl_errors

This commit is contained in:
Matthew Horan 2012-03-30 15:00:51 -04:00
parent f80125e6cb
commit 8f8c95d980
6 changed files with 28 additions and 15 deletions

View file

@ -1,8 +1,7 @@
require 'spec_helper' require 'spec_helper'
require 'self_signed_ssl_cert' require 'self_signed_ssl_cert'
require 'stringio' require 'stringio'
require 'capybara/driver/webkit/browser' require 'capybara/driver/webkit'
require 'capybara/driver/webkit/connection'
require 'socket' require 'socket'
require 'base64' require 'base64'
@ -62,6 +61,18 @@ describe Capybara::Driver::Webkit::Browser do
it 'accepts a self-signed certificate if configured to do so' do it 'accepts a self-signed certificate if configured to do so' do
browser_ignore_ssl_err.visit "https://#{@host}:#{@port}/" browser_ignore_ssl_err.visit "https://#{@host}:#{@port}/"
end end
it "doesn't accept a self-signed certificate in a new window by default" do
browser.execute_script("window.open('about:blank')")
browser.window_focus(browser.get_window_handles.last)
lambda { browser.visit "https://#{@host}:#{@port}/" }.should raise_error
end
it 'accepts a self-signed certificate in a new window if configured to do so' do
browser_ignore_ssl_err.execute_script("window.open('about:blank')")
browser_ignore_ssl_err.window_focus(browser_ignore_ssl_err.get_window_handles.last)
browser_ignore_ssl_err.visit "https://#{@host}:#{@port}/"
end
end end
context "skip image loading" do context "skip image loading" do

View file

@ -7,7 +7,7 @@ IgnoreSslErrors::IgnoreSslErrors(WebPageManager *manager, QStringList &arguments
} }
void IgnoreSslErrors::start() { void IgnoreSslErrors::start() {
page()->ignoreSslErrors(); manager()->setIgnoreSslErrors(true);
emit finished(new Response(true)); emit finished(new Response(true));
} }

View file

@ -10,14 +10,14 @@
#include <QUuid> #include <QUuid>
WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) { WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) {
m_loading = false;
m_manager = manager; m_manager = manager;
m_uuid = QUuid::createUuid().toString();
setForwardUnsupportedContent(true); setForwardUnsupportedContent(true);
loadJavascript(); loadJavascript();
setUserStylesheet(); setUserStylesheet();
m_loading = false;
m_ignoreSslErrors = false;
this->setCustomNetworkAccessManager(); this->setCustomNetworkAccessManager();
connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
@ -31,8 +31,6 @@ WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) {
resetWindowSize(); resetWindowSize();
settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
m_uuid = QUuid::createUuid().toString();
} }
void WebPage::resetWindowSize() { void WebPage::resetWindowSize() {
@ -219,14 +217,10 @@ void WebPage::replyFinished(QNetworkReply *reply) {
} }
void WebPage::handleSslErrorsForReply(QNetworkReply *reply, const QList<QSslError> &errors) { void WebPage::handleSslErrorsForReply(QNetworkReply *reply, const QList<QSslError> &errors) {
if (m_ignoreSslErrors) if (m_manager->ignoreSslErrors())
reply->ignoreSslErrors(errors); reply->ignoreSslErrors(errors);
} }
void WebPage::ignoreSslErrors() {
m_ignoreSslErrors = true;
}
void WebPage::setSkipImageLoading(bool skip) { void WebPage::setSkipImageLoading(bool skip) {
settings()->setAttribute(QWebSettings::AutoLoadImages, !skip); settings()->setAttribute(QWebSettings::AutoLoadImages, !skip);
} }

View file

@ -19,7 +19,6 @@ class WebPage : public QWebPage {
void setCustomNetworkAccessManager(); void setCustomNetworkAccessManager();
bool render(const QString &fileName); bool render(const QString &fileName);
virtual bool extension (Extension extension, const ExtensionOption *option=0, ExtensionReturn *output=0); virtual bool extension (Extension extension, const ExtensionOption *option=0, ExtensionReturn *output=0);
void ignoreSslErrors();
void setSkipImageLoading(bool skip); void setSkipImageLoading(bool skip);
QString consoleMessages(); QString consoleMessages();
void resetConsoleMessages(); void resetConsoleMessages();
@ -61,7 +60,6 @@ class WebPage : public QWebPage {
void setUserStylesheet(); void setUserStylesheet();
int m_lastStatus; int m_lastStatus;
QString m_pageHeaders; QString m_pageHeaders;
bool m_ignoreSslErrors;
QStringList m_consoleMessages; QStringList m_consoleMessages;
QString m_uuid; QString m_uuid;
WebPageManager *m_manager; WebPageManager *m_manager;

View file

@ -33,3 +33,11 @@ void WebPageManager::emitPageFinished(bool success) {
if (currentPage() == sender()) if (currentPage() == sender())
emit pageFinished(success); emit pageFinished(success);
} }
void WebPageManager::setIgnoreSslErrors(bool value) {
m_ignoreSslErrors = value;
}
bool WebPageManager::ignoreSslErrors() {
return m_ignoreSslErrors;
}

View file

@ -14,7 +14,9 @@ class WebPageManager : public QObject {
QListIterator<WebPage *> iterator(); QListIterator<WebPage *> iterator();
void setCurrentPage(WebPage *); void setCurrentPage(WebPage *);
WebPage *currentPage(); WebPage *currentPage();
WebPage *createPage(QObject *); WebPage *createPage(QObject *parent);
void setIgnoreSslErrors(bool);
bool ignoreSslErrors();
public slots: public slots:
void emitPageFinished(bool); void emitPageFinished(bool);