Skip to content
This repository has been archived by the owner on Jan 6, 2018. It is now read-only.

Commit

Permalink
Merge in webkit-server changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
tristandunn committed Jul 15, 2012
1 parent fece2ff commit 98e202b
Show file tree
Hide file tree
Showing 103 changed files with 1,042 additions and 330 deletions.
2 changes: 1 addition & 1 deletion vendor/webkit-server/README.markdown
Expand Up @@ -4,7 +4,7 @@ A standalone version of the WebKit server in [capybara-webkit](https://github.co

## Dependencies

webkit-server depends on a WebKit implementation from Qt, a cross-platform development toolkit. You'll need to download the Qt libraries to build the binary. See [Installing QT](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-QT) for how to install it on your system.
webkit-server depends on a WebKit implementation from Qt, a cross-platform development toolkit. You'll need to download the Qt libraries to build the binary. See [Installing Qt](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit) for how to install it on your system.

## Building

Expand Down
6 changes: 3 additions & 3 deletions vendor/webkit-server/build.sh
Expand Up @@ -9,11 +9,11 @@ fi

PLATFORM=`uname -s`

if [ $PLATFORM == "Linux" ]; then
if [ $PLATFORM = "Linux" ]; then
SPEC="linux-g++"
elif [ $PLATFORM == "FreeBSD" ]; then
elif [ $PLATFORM = "FreeBSD" ]; then
SPEC="freebsd-g++"
elif [ $PLATFORM == "Darwin" ]; then
elif [ $PLATFORM = "Darwin" ]; then
SPEC="macx-g++"
else
echo "The $PLATFORM platform is not currently supported."
Expand Down
18 changes: 18 additions & 0 deletions vendor/webkit-server/src/Authenticate.cpp
@@ -0,0 +1,18 @@
#include "Authenticate.h"
#include "WebPage.h"
#include "NetworkAccessManager.h"

Authenticate::Authenticate(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {
}

void Authenticate::start() {
QString username = arguments()[0];
QString password = arguments()[1];

NetworkAccessManager* networkAccessManager = qobject_cast<NetworkAccessManager*>(page()->networkAccessManager());
networkAccessManager->setUserName(username);
networkAccessManager->setPassword(password);

emit finished(new Response(true));
}

12 changes: 12 additions & 0 deletions vendor/webkit-server/src/Authenticate.h
@@ -0,0 +1,12 @@
#include "SocketCommand.h"

class WebPage;

class Authenticate : public SocketCommand {
Q_OBJECT

public:
Authenticate(WebPageManager *manager, QStringList &arguments, QObject *parent = 0);
virtual void start();
};

8 changes: 3 additions & 5 deletions vendor/webkit-server/src/Body.h
@@ -1,12 +1,10 @@
#include "Command.h"
#include "SocketCommand.h"

class WebPage;

class Body : public Command {
class Body : public SocketCommand {
Q_OBJECT

public:
Body(WebPage *page, QStringList &arguments, QObject *parent = 0);
Body(WebPageManager *, QStringList &arguments, QObject *parent = 0);
virtual void start();
};

8 changes: 3 additions & 5 deletions vendor/webkit-server/src/ClearCookies.cpp
@@ -1,15 +1,13 @@
#include "ClearCookies.h"
#include "WebPage.h"
#include "WebPageManager.h"
#include "NetworkCookieJar.h"
#include <QNetworkCookie>

ClearCookies::ClearCookies(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {}
ClearCookies::ClearCookies(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {}

void ClearCookies::start()
{
NetworkCookieJar *jar = qobject_cast<NetworkCookieJar*>(page()
->networkAccessManager()
->cookieJar());
jar->clearCookies();
manager()->cookieJar()->clearCookies();
emit finished(new Response(true));
}
8 changes: 3 additions & 5 deletions vendor/webkit-server/src/ClearCookies.h
@@ -1,11 +1,9 @@
#include "Command.h"
#include "SocketCommand.h"

class WebPage;

class ClearCookies : public Command {
class ClearCookies : public SocketCommand {
Q_OBJECT;

public:
ClearCookies(WebPage *page, QStringList &arguments, QObject *parent = 0);
ClearCookies(WebPageManager *, QStringList &arguments, QObject *parent = 0);
virtual void start();
};
11 changes: 11 additions & 0 deletions vendor/webkit-server/src/ClearPromptText.cpp
@@ -0,0 +1,11 @@
#include "ClearPromptText.h"
#include "WebPage.h"
#include "WebPageManager.h"

ClearPromptText::ClearPromptText(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {}

void ClearPromptText::start()
{
page()->setPromptText(QString());
emit finished(new Response(true));
}
9 changes: 9 additions & 0 deletions vendor/webkit-server/src/ClearPromptText.h
@@ -0,0 +1,9 @@
#include "SocketCommand.h"

class ClearPromptText : public SocketCommand {
Q_OBJECT;

public:
ClearPromptText(WebPageManager *manager, QStringList &arguments, QObject *parent = 0);
virtual void start();
};
19 changes: 4 additions & 15 deletions vendor/webkit-server/src/Command.cpp
@@ -1,19 +1,8 @@
#include "Command.h"
#include "WebPage.h"
#include "SocketCommand.h"

Command::Command(WebPage *page, QStringList &arguments, QObject *parent) : QObject(parent) {
m_page = page;
m_arguments = arguments;
Command::Command(QObject *parent) : QObject(parent) {
}

void Command::start() {
QString Command::toString() const {
return metaObject()->className();
}

WebPage *Command::page() {
return m_page;
}

QStringList &Command::arguments() {
return m_arguments;
}

17 changes: 3 additions & 14 deletions vendor/webkit-server/src/Command.h
Expand Up @@ -2,29 +2,18 @@
#define COMMAND_H

#include <QObject>
#include <QStringList>
#include "Response.h"

class WebPage;

class Command : public QObject {
Q_OBJECT

public:
Command(WebPage *page, QStringList &arguments, QObject *parent = 0);
virtual void start();
Command(QObject *parent = 0);
virtual void start() = 0;
virtual QString toString() const;

signals:
void finished(Response *response);

protected:
WebPage *page();
QStringList &arguments();

private:
WebPage *m_page;
QStringList m_arguments;

};

#endif
Expand Down
25 changes: 19 additions & 6 deletions vendor/webkit-server/src/CommandFactory.cpp
@@ -1,8 +1,8 @@
#include "CommandFactory.h"
#include "NullCommand.h"
#include "SocketCommand.h"
#include "Visit.h"
#include "Find.h"
#include "Command.h"
#include "Reset.h"
#include "Node.h"
#include "Url.h"
Expand All @@ -23,14 +23,27 @@
#include "RequestedUrl.h"
#include "CurrentUrl.h"
#include "ResizeWindow.h"
#include "IgnoreSslErrors.h"
#include "SetSkipImageLoading.h"
#include "WindowFocus.h"
#include "GetWindowHandles.h"
#include "GetWindowHandle.h"
#include "WebPageManager.h"
#include "Authenticate.h"
#include "EnableLogging.h"
#include "SetConfirmAction.h"
#include "SetPromptAction.h"
#include "SetPromptText.h"
#include "ClearPromptText.h"
#include "JavascriptAlertMessages.h"
#include "JavascriptConfirmMessages.h"
#include "JavascriptPromptMessages.h"

CommandFactory::CommandFactory(WebPage *page, QObject *parent) : QObject(parent) {
m_page = page;
CommandFactory::CommandFactory(WebPageManager *manager, QObject *parent) : QObject(parent) {
m_manager = manager;
}

Command *CommandFactory::createCommand(const char *name, QStringList &arguments) {
#include "find_command.h"
arguments.clear();
arguments.append(QString(name));
return new NullCommand(m_page, arguments);
return new NullCommand(QString(name));
}
5 changes: 3 additions & 2 deletions vendor/webkit-server/src/CommandFactory.h
Expand Up @@ -2,15 +2,16 @@

class Command;
class WebPage;
class WebPageManager;

class CommandFactory : public QObject {
Q_OBJECT

public:
CommandFactory(WebPage *page, QObject *parent = 0);
CommandFactory(WebPageManager *, QObject *parent = 0);
Command *createCommand(const char *name, QStringList &arguments);

private:
WebPage *m_page;
WebPageManager *m_manager;
};

2 changes: 1 addition & 1 deletion vendor/webkit-server/src/CommandParser.cpp
@@ -1,6 +1,6 @@
#include "CommandParser.h"
#include "CommandFactory.h"
#include "Command.h"
#include "SocketCommand.h"

#include <QIODevice>

Expand Down
33 changes: 22 additions & 11 deletions vendor/webkit-server/src/Connection.cpp
@@ -1,37 +1,41 @@
#include "Connection.h"
#include "WebPage.h"
#include "WebPageManager.h"
#include "CommandParser.h"
#include "CommandFactory.h"
#include "PageLoadingCommand.h"
#include "Command.h"
#include "SocketCommand.h"

#include <QTcpSocket>

Connection::Connection(QTcpSocket *socket, WebPage *page, QObject *parent) :
Connection::Connection(QTcpSocket *socket, WebPageManager *manager, QObject *parent) :
QObject(parent) {
m_socket = socket;
m_page = page;
m_commandFactory = new CommandFactory(page, this);
m_manager = manager;
m_commandFactory = new CommandFactory(m_manager, this);
m_commandParser = new CommandParser(socket, m_commandFactory, this);
m_pageSuccess = true;
m_commandWaiting = false;
connect(m_socket, SIGNAL(readyRead()), m_commandParser, SLOT(checkNext()));
connect(m_commandParser, SIGNAL(commandReady(Command *)), this, SLOT(commandReady(Command *)));
connect(m_page, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
connect(m_manager, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
}

void Connection::commandReady(Command *command) {
m_queuedCommand = command;
if (m_page->isLoading())
m_manager->logger() << "Received" << command->toString();
if (m_manager->isLoading()) {
m_manager->logger() << command->toString() << "waiting for load to finish";
m_commandWaiting = true;
else
} else {
startCommand();
}
}

void Connection::startCommand() {
m_commandWaiting = false;
if (m_pageSuccess) {
m_runningCommand = new PageLoadingCommand(m_queuedCommand, m_page, this);
m_runningCommand = new PageLoadingCommand(m_queuedCommand, m_manager, this);
connect(m_runningCommand, SIGNAL(finished(Response *)), this, SLOT(finishCommand(Response *)));
m_runningCommand->start();
} else {
Expand All @@ -40,18 +44,20 @@ void Connection::startCommand() {
}

void Connection::pendingLoadFinished(bool success) {
m_pageSuccess = success;
if (m_commandWaiting)
m_pageSuccess = m_pageSuccess && success;
if (m_commandWaiting) {
startCommand();
}
}

void Connection::writePageLoadFailure() {
m_pageSuccess = true;
QString message = m_page->failureString();
QString message = currentPage()->failureString();
writeResponse(new Response(false, message));
}

void Connection::finishCommand(Response *response) {
m_pageSuccess = true;
m_runningCommand->deleteLater();
writeResponse(response);
}
Expand All @@ -62,10 +68,15 @@ void Connection::writeResponse(Response *response) {
else
m_socket->write("failure\n");

m_manager->logger() << "Wrote response" << response->isSuccess() << response->message();

QByteArray messageUtf8 = response->message();
QString messageLength = QString::number(messageUtf8.size()) + "\n";
m_socket->write(messageLength.toAscii());
m_socket->write(messageUtf8);
delete response;
}

WebPage *Connection::currentPage() {
return m_manager->currentPage();
}
6 changes: 4 additions & 2 deletions vendor/webkit-server/src/Connection.h
Expand Up @@ -8,12 +8,13 @@ class Response;
class CommandParser;
class CommandFactory;
class PageLoadingCommand;
class WebPageManager;

class Connection : public QObject {
Q_OBJECT

public:
Connection(QTcpSocket *socket, WebPage *page, QObject *parent = 0);
Connection(QTcpSocket *socket, WebPageManager *manager, QObject *parent = 0);

public slots:
void commandReady(Command *command);
Expand All @@ -27,11 +28,12 @@ class Connection : public QObject {

QTcpSocket *m_socket;
Command *m_queuedCommand;
WebPage *m_page;
WebPageManager *m_manager;
CommandParser *m_commandParser;
CommandFactory *m_commandFactory;
PageLoadingCommand *m_runningCommand;
bool m_pageSuccess;
bool m_commandWaiting;
WebPage *currentPage();
};

3 changes: 2 additions & 1 deletion vendor/webkit-server/src/ConsoleMessages.cpp
@@ -1,7 +1,8 @@
#include "ConsoleMessages.h"
#include "WebPage.h"
#include "WebPageManager.h"

ConsoleMessages::ConsoleMessages(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
ConsoleMessages::ConsoleMessages(WebPageManager *manager, QStringList &arguments, QObject *parent) : SocketCommand(manager, arguments, parent) {
}

void ConsoleMessages::start() {
Expand Down
8 changes: 3 additions & 5 deletions vendor/webkit-server/src/ConsoleMessages.h
@@ -1,12 +1,10 @@
#include "Command.h"
#include "SocketCommand.h"

class WebPage;

class ConsoleMessages : public Command {
class ConsoleMessages : public SocketCommand {
Q_OBJECT

public:
ConsoleMessages(WebPage *page, QStringList &arguments, QObject *parent = 0);
ConsoleMessages(WebPageManager *, QStringList &arguments, QObject *parent = 0);
virtual void start();
};

0 comments on commit 98e202b

Please sign in to comment.