src/WebPage.cpp in capybara-webkit-1.2.0 vs src/WebPage.cpp in capybara-webkit-1.3.0

- old
+ new

@@ -17,18 +17,17 @@ WebPage::WebPage(WebPageManager *manager, QObject *parent) : QWebPage(parent) { m_loading = false; m_failed = false; m_manager = manager; m_uuid = QUuid::createUuid().toString(); + m_confirmAction = true; + m_promptAction = false; setForwardUnsupportedContent(true); loadJavascript(); setUserStylesheet(); - m_confirm = true; - m_prompt = false; - m_prompt_text = QString(); this->setCustomNetworkAccessManager(); connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted())); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); connect(this, SIGNAL(frameCreated(QWebFrame *)), @@ -39,10 +38,15 @@ settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); settings()->setAttribute(QWebSettings::JavascriptCanCloseWindows, true); settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); + if(QFileInfo("tmp").isDir()) { + settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); + settings()->setOfflineWebApplicationCachePath("tmp"); + } + createWindow(); } void WebPage::createWindow() { QSize size(1680, 1050); @@ -178,30 +182,75 @@ } void WebPage::javaScriptAlert(QWebFrame *frame, const QString &message) { Q_UNUSED(frame); m_alertMessages.append(message); + + if (m_modalResponses.isEmpty()) { + m_modalMessages << QString(); + } else { + QVariantMap alertResponse = m_modalResponses.takeLast(); + bool expectedType = alertResponse["type"].toString() == "alert"; + QRegExp expectedMessage = alertResponse["message"].toRegExp(); + + addModalMessage(expectedType, message, expectedMessage); + } + m_manager->logger() << "ALERT:" << qPrintable(message); } bool WebPage::javaScriptConfirm(QWebFrame *frame, const QString &message) { Q_UNUSED(frame); m_confirmMessages.append(message); - return m_confirm; + + if (m_modalResponses.isEmpty()) { + m_modalMessages << QString(); + return m_confirmAction; + } else { + QVariantMap confirmResponse = m_modalResponses.takeLast(); + bool expectedType = confirmResponse["type"].toString() == "confirm"; + QRegExp expectedMessage = confirmResponse["message"].toRegExp(); + + addModalMessage(expectedType, message, expectedMessage); + return expectedType && + confirmResponse["action"].toBool() && + message.contains(expectedMessage); + } } bool WebPage::javaScriptPrompt(QWebFrame *frame, const QString &message, const QString &defaultValue, QString *result) { Q_UNUSED(frame) m_promptMessages.append(message); - if (m_prompt) { - if (m_prompt_text.isNull()) { + + bool action = false; + QString response; + + if (m_modalResponses.isEmpty()) { + action = m_promptAction; + response = m_prompt_text; + m_modalMessages << QString(); + } else { + QVariantMap promptResponse = m_modalResponses.takeLast(); + bool expectedType = promptResponse["type"].toString() == "prompt"; + QRegExp expectedMessage = promptResponse["message"].toRegExp(); + + action = expectedType && + promptResponse["action"].toBool() && + message.contains(expectedMessage); + response = promptResponse["response"].toString(); + addModalMessage(expectedType, message, expectedMessage); + } + + if (action) { + if (response.isNull()) { *result = defaultValue; } else { - *result = m_prompt_text; + *result = response; } } - return m_prompt; + + return action; } void WebPage::loadStarted() { m_loading = true; m_errorPageMessage = QString(); @@ -374,17 +423,63 @@ void WebPage::remove() { m_manager->removePage(this); } +QString WebPage::setConfirmAction(QString action, QString message) { + QVariantMap confirmResponse; + confirmResponse["type"] = "confirm"; + confirmResponse["action"] = (action=="Yes"); + confirmResponse["message"] = QRegExp(message); + m_modalResponses << confirmResponse; + return QString::number(m_modalResponses.length()); +} + void WebPage::setConfirmAction(QString action) { - m_confirm = (action == "Yes"); + m_confirmAction = (action == "Yes"); } +QString WebPage::setPromptAction(QString action, QString message, QString response) { + QVariantMap promptResponse; + promptResponse["type"] = "prompt"; + promptResponse["action"] = (action == "Yes"); + promptResponse["message"] = QRegExp(message); + promptResponse["response"] = response; + m_modalResponses << promptResponse; + return QString::number(m_modalResponses.length()); +} + +QString WebPage::setPromptAction(QString action, QString message) { + return setPromptAction(action, message, QString()); +} + void WebPage::setPromptAction(QString action) { - m_prompt = (action == "Yes"); + m_promptAction = (action == "Yes"); } void WebPage::setPromptText(QString text) { m_prompt_text = text; } +QString WebPage::acceptAlert(QString message) { + QVariantMap alertResponse; + alertResponse["type"] = "alert"; + alertResponse["message"] = QRegExp(message); + m_modalResponses << alertResponse; + return QString::number(m_modalResponses.length()); +} + +int WebPage::modalCount() { + return m_modalMessages.length(); +} + +QString WebPage::modalMessage(int id) { + return m_modalMessages[id - 1]; +} + +void WebPage::addModalMessage(bool expectedType, const QString &message, const QRegExp &expectedMessage) { + if (expectedType && message.contains(expectedMessage)) + m_modalMessages << message; + else + m_modalMessages << QString(); + emit modalReady(m_modalMessages.length()); +}