WebPageManager is no longer a singleton
This commit is contained in:
parent
33bc195fe1
commit
82f84fbde1
|
@ -28,18 +28,19 @@
|
||||||
#include "WindowFocus.h"
|
#include "WindowFocus.h"
|
||||||
#include "GetWindowHandles.h"
|
#include "GetWindowHandles.h"
|
||||||
#include "GetWindowHandle.h"
|
#include "GetWindowHandle.h"
|
||||||
|
#include "WebPageManager.h"
|
||||||
|
|
||||||
CommandFactory::CommandFactory(WebPage *page, QObject *parent) : QObject(parent) {
|
CommandFactory::CommandFactory(WebPageManager *manager, QObject *parent) : QObject(parent) {
|
||||||
m_page = page;
|
m_manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
Command *CommandFactory::createCommand(const char *name, QStringList &arguments) {
|
Command *CommandFactory::createCommand(const char *name, QStringList &arguments) {
|
||||||
#include "find_command.h"
|
#include "find_command.h"
|
||||||
arguments.clear();
|
arguments.clear();
|
||||||
arguments.append(QString(name));
|
arguments.append(QString(name));
|
||||||
return new NullCommand(m_page, arguments);
|
return new NullCommand(currentPage(), arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandFactory::changeWindow(WebPage *newPage) {
|
WebPage *CommandFactory::currentPage() {
|
||||||
m_page = newPage;
|
return m_manager->currentPage();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,18 +2,17 @@
|
||||||
|
|
||||||
class Command;
|
class Command;
|
||||||
class WebPage;
|
class WebPage;
|
||||||
|
class WebPageManager;
|
||||||
|
|
||||||
class CommandFactory : public QObject {
|
class CommandFactory : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CommandFactory(WebPage *page, QObject *parent = 0);
|
CommandFactory(WebPageManager *page, QObject *parent = 0);
|
||||||
Command *createCommand(const char *name, QStringList &arguments);
|
Command *createCommand(const char *name, QStringList &arguments);
|
||||||
|
WebPageManager *m_manager;
|
||||||
public slots:
|
|
||||||
void changeWindow(WebPage *);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WebPage *m_page;
|
WebPage *currentPage();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "Connection.h"
|
#include "Connection.h"
|
||||||
#include "WebPage.h"
|
#include "WebPage.h"
|
||||||
|
#include "WebPageManager.h"
|
||||||
#include "CommandParser.h"
|
#include "CommandParser.h"
|
||||||
#include "CommandFactory.h"
|
#include "CommandFactory.h"
|
||||||
#include "PageLoadingCommand.h"
|
#include "PageLoadingCommand.h"
|
||||||
|
@ -7,22 +8,23 @@
|
||||||
|
|
||||||
#include <QTcpSocket>
|
#include <QTcpSocket>
|
||||||
|
|
||||||
Connection::Connection(QTcpSocket *socket, WebPage *page, QObject *parent) :
|
Connection::Connection(QTcpSocket *socket, WebPageManager *manager, QObject *parent) :
|
||||||
QObject(parent) {
|
QObject(parent) {
|
||||||
m_socket = socket;
|
m_socket = socket;
|
||||||
m_page = page;
|
m_manager = manager;
|
||||||
m_commandFactory = new CommandFactory(page, this);
|
m_manager->setCurrentPage(m_manager->createPage(this));
|
||||||
|
m_commandFactory = new CommandFactory(m_manager, this);
|
||||||
m_commandParser = new CommandParser(socket, m_commandFactory, this);
|
m_commandParser = new CommandParser(socket, m_commandFactory, this);
|
||||||
m_pageSuccess = true;
|
m_pageSuccess = true;
|
||||||
m_commandWaiting = false;
|
m_commandWaiting = false;
|
||||||
connect(m_socket, SIGNAL(readyRead()), m_commandParser, SLOT(checkNext()));
|
connect(m_socket, SIGNAL(readyRead()), m_commandParser, SLOT(checkNext()));
|
||||||
connect(m_commandParser, SIGNAL(commandReady(Command *)), this, SLOT(commandReady(Command *)));
|
connect(m_commandParser, SIGNAL(commandReady(Command *)), this, SLOT(commandReady(Command *)));
|
||||||
connect(m_page, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
connect(currentPage(), SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Connection::commandReady(Command *command) {
|
void Connection::commandReady(Command *command) {
|
||||||
m_queuedCommand = command;
|
m_queuedCommand = command;
|
||||||
if (m_page->isLoading())
|
if (currentPage()->isLoading())
|
||||||
m_commandWaiting = true;
|
m_commandWaiting = true;
|
||||||
else
|
else
|
||||||
startCommand();
|
startCommand();
|
||||||
|
@ -31,10 +33,9 @@ void Connection::commandReady(Command *command) {
|
||||||
void Connection::startCommand() {
|
void Connection::startCommand() {
|
||||||
m_commandWaiting = false;
|
m_commandWaiting = false;
|
||||||
if (m_pageSuccess) {
|
if (m_pageSuccess) {
|
||||||
m_runningCommand = new PageLoadingCommand(m_queuedCommand, m_page, this);
|
m_runningCommand = new PageLoadingCommand(m_queuedCommand, currentPage(), this);
|
||||||
connect(m_runningCommand, SIGNAL(finished(Response *)), this, SLOT(finishCommand(Response *)));
|
connect(m_runningCommand, SIGNAL(finished(Response *)), this, SLOT(finishCommand(Response *)));
|
||||||
connect(m_queuedCommand, SIGNAL(windowChanged(WebPage *)), this, SLOT(changeWindow(WebPage *)));
|
connect(m_queuedCommand, SIGNAL(windowChanged(WebPage *)), this, SLOT(changeWindow(WebPage *)));
|
||||||
connect(m_queuedCommand, SIGNAL(windowChanged(WebPage *)), m_commandFactory, SLOT(changeWindow(WebPage *)));
|
|
||||||
m_runningCommand->start();
|
m_runningCommand->start();
|
||||||
} else {
|
} else {
|
||||||
writePageLoadFailure();
|
writePageLoadFailure();
|
||||||
|
@ -49,7 +50,7 @@ void Connection::pendingLoadFinished(bool success) {
|
||||||
|
|
||||||
void Connection::writePageLoadFailure() {
|
void Connection::writePageLoadFailure() {
|
||||||
m_pageSuccess = true;
|
m_pageSuccess = true;
|
||||||
QString message = m_page->failureString();
|
QString message = currentPage()->failureString();
|
||||||
writeResponse(new Response(false, message));
|
writeResponse(new Response(false, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,9 +72,12 @@ void Connection::writeResponse(Response *response) {
|
||||||
delete response;
|
delete response;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Connection::changeWindow(WebPage *newPage) {
|
void Connection::changeWindow(WebPage *page) {
|
||||||
disconnect(m_page, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
disconnect(currentPage(), SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
||||||
m_page = newPage;
|
m_manager->setCurrentPage(page);
|
||||||
connect(m_page, SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
connect(currentPage(), SIGNAL(pageFinished(bool)), this, SLOT(pendingLoadFinished(bool)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WebPage *Connection::currentPage() {
|
||||||
|
return m_manager->currentPage();
|
||||||
|
}
|
||||||
|
|
|
@ -8,12 +8,13 @@ class Response;
|
||||||
class CommandParser;
|
class CommandParser;
|
||||||
class CommandFactory;
|
class CommandFactory;
|
||||||
class PageLoadingCommand;
|
class PageLoadingCommand;
|
||||||
|
class WebPageManager;
|
||||||
|
|
||||||
class Connection : public QObject {
|
class Connection : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Connection(QTcpSocket *socket, WebPage *page, QObject *parent = 0);
|
Connection(QTcpSocket *socket, WebPageManager *manager, QObject *parent = 0);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void commandReady(Command *command);
|
void commandReady(Command *command);
|
||||||
|
@ -28,11 +29,12 @@ class Connection : public QObject {
|
||||||
|
|
||||||
QTcpSocket *m_socket;
|
QTcpSocket *m_socket;
|
||||||
Command *m_queuedCommand;
|
Command *m_queuedCommand;
|
||||||
WebPage *m_page;
|
WebPageManager *m_manager;
|
||||||
CommandParser *m_commandParser;
|
CommandParser *m_commandParser;
|
||||||
CommandFactory *m_commandFactory;
|
CommandFactory *m_commandFactory;
|
||||||
PageLoadingCommand *m_runningCommand;
|
PageLoadingCommand *m_runningCommand;
|
||||||
bool m_pageSuccess;
|
bool m_pageSuccess;
|
||||||
bool m_commandWaiting;
|
bool m_commandWaiting;
|
||||||
|
WebPage *currentPage();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "GetWindowHandle.h"
|
#include "GetWindowHandle.h"
|
||||||
|
#include "WebPage.h"
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
GetWindowHandle::GetWindowHandle(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
GetWindowHandle::GetWindowHandle(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
#include "WebPage.h"
|
|
||||||
|
class WebPage;
|
||||||
|
|
||||||
class GetWindowHandle : public Command {
|
class GetWindowHandle : public Command {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "GetWindowHandles.h"
|
#include "GetWindowHandles.h"
|
||||||
#include "WebPageManager.h"
|
#include "WebPageManager.h"
|
||||||
|
#include "CommandFactory.h"
|
||||||
|
#include "WebPage.h"
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
GetWindowHandles::GetWindowHandles(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
GetWindowHandles::GetWindowHandles(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
||||||
|
@ -7,7 +9,7 @@ GetWindowHandles::GetWindowHandles(WebPage *page, QStringList &arguments, QObjec
|
||||||
|
|
||||||
void GetWindowHandles::start() {
|
void GetWindowHandles::start() {
|
||||||
QListIterator<WebPage *> pageIterator =
|
QListIterator<WebPage *> pageIterator =
|
||||||
WebPageManager::getInstance()->iterator();
|
((CommandFactory *) parent())->m_manager->iterator();
|
||||||
|
|
||||||
QString handles = "[";
|
QString handles = "[";
|
||||||
QStringList stringList;
|
QStringList stringList;
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
#include "Server.h"
|
#include "Server.h"
|
||||||
#include "WebPage.h"
|
|
||||||
#include "Connection.h"
|
#include "Connection.h"
|
||||||
|
#include "WebPageManager.h"
|
||||||
|
|
||||||
#include <QTcpServer>
|
#include <QTcpServer>
|
||||||
|
|
||||||
Server::Server(QObject *parent) : QObject(parent) {
|
Server::Server(QObject *parent) : QObject(parent) {
|
||||||
m_tcp_server = new QTcpServer(this);
|
m_tcp_server = new QTcpServer(this);
|
||||||
m_page = new WebPage(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Server::start() {
|
bool Server::start() {
|
||||||
|
@ -20,5 +19,5 @@ quint16 Server::server_port() const {
|
||||||
|
|
||||||
void Server::handleConnection() {
|
void Server::handleConnection() {
|
||||||
QTcpSocket *socket = m_tcp_server->nextPendingConnection();
|
QTcpSocket *socket = m_tcp_server->nextPendingConnection();
|
||||||
new Connection(socket, m_page, this);
|
new Connection(socket, new WebPageManager(), this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class QTcpServer;
|
class QTcpServer;
|
||||||
class WebPage;
|
|
||||||
|
|
||||||
class Server : public QObject {
|
class Server : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -16,6 +15,5 @@ class Server : public QObject {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTcpServer *m_tcp_server;
|
QTcpServer *m_tcp_server;
|
||||||
WebPage *m_page;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include <QWebSettings>
|
#include <QWebSettings>
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
|
|
||||||
WebPage::WebPage(QObject *parent) : QWebPage(parent) {
|
WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) {
|
||||||
setForwardUnsupportedContent(true);
|
setForwardUnsupportedContent(true);
|
||||||
loadJavascript();
|
loadJavascript();
|
||||||
setUserStylesheet();
|
setUserStylesheet();
|
||||||
|
@ -27,9 +27,10 @@ WebPage::WebPage(QObject *parent) : QWebPage(parent) {
|
||||||
resetWindowSize();
|
resetWindowSize();
|
||||||
|
|
||||||
settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
|
settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
|
||||||
WebPageManager::getInstance()->append(this);
|
|
||||||
|
|
||||||
m_uuid = QUuid::createUuid().toString();
|
m_uuid = QUuid::createUuid().toString();
|
||||||
|
|
||||||
|
m_manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebPage::resetWindowSize() {
|
void WebPage::resetWindowSize() {
|
||||||
|
@ -252,7 +253,7 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply) {
|
||||||
|
|
||||||
QWebPage *WebPage::createWindow(WebWindowType type) {
|
QWebPage *WebPage::createWindow(WebWindowType type) {
|
||||||
Q_UNUSED(type);
|
Q_UNUSED(type);
|
||||||
return new WebPage(this);
|
return m_manager->createPage(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString WebPage::uuid() {
|
QString WebPage::uuid() {
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
#define _WEBPAGE_H
|
#define _WEBPAGE_H
|
||||||
#include <QtWebKit>
|
#include <QtWebKit>
|
||||||
|
|
||||||
|
class WebPageManager;
|
||||||
|
|
||||||
class WebPage : public QWebPage {
|
class WebPage : public QWebPage {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WebPage(QObject *parent = 0);
|
WebPage(WebPageManager *, QObject *parent = 0);
|
||||||
QVariant invokeCapybaraFunction(const char *name, QStringList &arguments);
|
QVariant invokeCapybaraFunction(const char *name, QStringList &arguments);
|
||||||
QVariant invokeCapybaraFunction(QString &name, QStringList &arguments);
|
QVariant invokeCapybaraFunction(QString &name, QStringList &arguments);
|
||||||
QString failureString();
|
QString failureString();
|
||||||
|
@ -61,6 +63,7 @@ class WebPage : public QWebPage {
|
||||||
bool m_ignoreSslErrors;
|
bool m_ignoreSslErrors;
|
||||||
QStringList m_consoleMessages;
|
QStringList m_consoleMessages;
|
||||||
QString m_uuid;
|
QString m_uuid;
|
||||||
|
WebPageManager *m_manager;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //_WEBPAGE_H
|
#endif //_WEBPAGE_H
|
||||||
|
|
|
@ -1,17 +1,10 @@
|
||||||
#include "WebPageManager.h"
|
#include "WebPageManager.h"
|
||||||
|
#include "WebPage.h"
|
||||||
WebPageManager *WebPageManager::m_instance = NULL;
|
#include <stdio.h>
|
||||||
|
|
||||||
WebPageManager::WebPageManager() {
|
WebPageManager::WebPageManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
WebPageManager *WebPageManager::getInstance() {
|
|
||||||
if(!m_instance)
|
|
||||||
m_instance = new WebPageManager();
|
|
||||||
|
|
||||||
return m_instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebPageManager::append(WebPage *value) {
|
void WebPageManager::append(WebPage *value) {
|
||||||
m_pages.append(value);
|
m_pages.append(value);
|
||||||
}
|
}
|
||||||
|
@ -20,3 +13,16 @@ QListIterator<WebPage *> WebPageManager::iterator() {
|
||||||
return QListIterator<WebPage *>(m_pages);
|
return QListIterator<WebPage *>(m_pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebPageManager::setCurrentPage(WebPage *page) {
|
||||||
|
m_currentPage = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebPage *WebPageManager::currentPage() {
|
||||||
|
return m_currentPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
WebPage *WebPageManager::createPage(QObject *parent) {
|
||||||
|
WebPage *page = new WebPage(this, parent);
|
||||||
|
append(page);
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
#ifndef _WEBPAGEMANAGER_H
|
#ifndef _WEBPAGEMANAGER_H
|
||||||
#define _WEBPAGEMANAGER_H
|
#define _WEBPAGEMANAGER_H
|
||||||
#include "WebPage.h"
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class WebPage;
|
||||||
|
|
||||||
class WebPageManager {
|
class WebPageManager {
|
||||||
public:
|
public:
|
||||||
static WebPageManager *getInstance();
|
WebPageManager();
|
||||||
void append(WebPage *value);
|
void append(WebPage *value);
|
||||||
QListIterator<WebPage *> iterator();
|
QListIterator<WebPage *> iterator();
|
||||||
|
void setCurrentPage(WebPage *);
|
||||||
|
WebPage *currentPage();
|
||||||
|
WebPage *createPage(QObject *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WebPageManager();
|
|
||||||
QList<WebPage *> m_pages;
|
QList<WebPage *> m_pages;
|
||||||
static WebPageManager *m_instance;
|
WebPage *m_currentPage;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _WEBPAGEMANAGER_H
|
#endif // _WEBPAGEMANAGER_H
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "WindowFocus.h"
|
#include "WindowFocus.h"
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
#include "WebPage.h"
|
#include "WebPage.h"
|
||||||
|
#include "CommandFactory.h"
|
||||||
#include "WebPageManager.h"
|
#include "WebPageManager.h"
|
||||||
|
|
||||||
WindowFocus::WindowFocus(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
WindowFocus::WindowFocus(WebPage *page, QStringList &arguments, QObject *parent) : Command(page, arguments, parent) {
|
||||||
|
@ -21,7 +22,7 @@ void WindowFocus::success(WebPage *page) {
|
||||||
|
|
||||||
void WindowFocus::focusWindow(QString selector) {
|
void WindowFocus::focusWindow(QString selector) {
|
||||||
QListIterator<WebPage *> pageIterator =
|
QListIterator<WebPage *> pageIterator =
|
||||||
WebPageManager::getInstance()->iterator();
|
((CommandFactory *) parent())->m_manager->iterator();
|
||||||
|
|
||||||
while (pageIterator.hasNext()) {
|
while (pageIterator.hasNext()) {
|
||||||
WebPage *page = pageIterator.next();
|
WebPage *page = pageIterator.next();
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
#include "WebPageManager.h"
|
|
||||||
|
|
||||||
class WebPage;
|
class WebPage;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#define CHECK_COMMAND(expectedName) \
|
#define CHECK_COMMAND(expectedName) \
|
||||||
if (strcmp(#expectedName, name) == 0) { \
|
if (strcmp(#expectedName, name) == 0) { \
|
||||||
return new expectedName(m_page, arguments, this); \
|
return new expectedName(currentPage(), arguments, this); \
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK_COMMAND(Visit)
|
CHECK_COMMAND(Visit)
|
||||||
|
|
Loading…
Reference in New Issue