summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/javascript_dialog_controller.cpp9
-rw-r--r--src/core/javascript_dialog_controller.h1
-rw-r--r--src/core/javascript_dialog_controller_p.h4
-rw-r--r--src/core/javascript_dialog_manager_qt.cpp3
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp18
-rw-r--r--src/webenginewidgets/api/qwebenginepage.h6
-rw-r--r--src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc12
-rw-r--r--tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp5
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp4
9 files changed, 36 insertions, 26 deletions
diff --git a/src/core/javascript_dialog_controller.cpp b/src/core/javascript_dialog_controller.cpp
index ed0431084..973fa89b7 100644
--- a/src/core/javascript_dialog_controller.cpp
+++ b/src/core/javascript_dialog_controller.cpp
@@ -54,10 +54,12 @@ void JavaScriptDialogControllerPrivate::dialogFinished(bool accepted, const base
}
JavaScriptDialogControllerPrivate::JavaScriptDialogControllerPrivate(WebContentsAdapterClient::JavascriptDialogType t, const QString &msg, const QString &prompt
- , const content::JavaScriptDialogManager::DialogClosedCallback &cb, content::WebContents *c)
+ , const QUrl &securityOrigin, const content::JavaScriptDialogManager::DialogClosedCallback &cb
+ , content::WebContents *c)
: type(t)
, message(msg)
, defaultPrompt(prompt)
+ , securityOrigin(securityOrigin)
, callback(cb)
, contents(c)
{
@@ -82,6 +84,11 @@ WebContentsAdapterClient::JavascriptDialogType JavaScriptDialogController::type(
return d->type;
}
+QUrl JavaScriptDialogController::securityOrigin() const
+{
+ return d->securityOrigin;
+}
+
void JavaScriptDialogController::textProvided(const QString &text)
{
d->userInput = text;
diff --git a/src/core/javascript_dialog_controller.h b/src/core/javascript_dialog_controller.h
index b0d598afa..755a2712b 100644
--- a/src/core/javascript_dialog_controller.h
+++ b/src/core/javascript_dialog_controller.h
@@ -55,6 +55,7 @@ public:
QString message() const;
QString defaultPrompt() const;
WebContentsAdapterClient::JavascriptDialogType type() const;
+ QUrl securityOrigin() const;
public Q_SLOTS:
void textProvided(const QString &text);
diff --git a/src/core/javascript_dialog_controller_p.h b/src/core/javascript_dialog_controller_p.h
index 9e84b31a0..0d7552ce2 100644
--- a/src/core/javascript_dialog_controller_p.h
+++ b/src/core/javascript_dialog_controller_p.h
@@ -55,11 +55,13 @@ class JavaScriptDialogControllerPrivate {
public:
void dialogFinished(bool accepted, const base::string16 &promptValue);
JavaScriptDialogControllerPrivate(WebContentsAdapterClient::JavascriptDialogType, const QString &message, const QString &prompt
- , const content::JavaScriptDialogManager::DialogClosedCallback &, content::WebContents *);
+ , const QUrl &securityOrigin, const content::JavaScriptDialogManager::DialogClosedCallback &
+ , content::WebContents *);
WebContentsAdapterClient::JavascriptDialogType type;
QString message;
QString defaultPrompt;
+ QUrl securityOrigin;
QString userInput;
content::JavaScriptDialogManager::DialogClosedCallback callback;
content::WebContents *contents;
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp
index 1cde76a8f..1e37481b6 100644
--- a/src/core/javascript_dialog_manager_qt.cpp
+++ b/src/core/javascript_dialog_manager_qt.cpp
@@ -58,7 +58,6 @@ JavaScriptDialogManagerQt *JavaScriptDialogManagerQt::GetInstance()
void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webContents, const GURL &originUrl, const std::string &acceptLang, content::JavaScriptMessageType javascriptMessageType, const base::string16 &messageText, const base::string16 &defaultPromptText, const content::JavaScriptDialogManager::DialogClosedCallback &callback, bool *didSuppressMessage)
{
- Q_UNUSED(originUrl);
Q_UNUSED(acceptLang);
WebContentsAdapterClient *client = WebContentsViewQt::from(webContents->GetView())->client();
@@ -69,7 +68,7 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon
WebContentsAdapterClient::JavascriptDialogType dialogType = static_cast<WebContentsAdapterClient::JavascriptDialogType>(javascriptMessageType);
JavaScriptDialogControllerPrivate *dialogData = new JavaScriptDialogControllerPrivate(dialogType, toQt(messageText).toHtmlEscaped()
- , toQt(defaultPromptText).toHtmlEscaped(), callback, webContents);
+ , toQt(defaultPromptText).toHtmlEscaped(), toQt(originUrl), callback, webContents);
QSharedPointer<JavaScriptDialogController> dialog(new JavaScriptDialogController(dialogData));
// We shouldn't get new dialogs for a given WebContents until we gave back a result.
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 80f780dde..6fcababbf 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -583,14 +583,14 @@ void QWebEnginePagePrivate::javascriptDialog(QSharedPointer<JavaScriptDialogCont
QString promptResult;
switch (controller->type()) {
case AlertDialog:
- q->javaScriptAlert(0, controller->message());
+ q->javaScriptAlert(controller->securityOrigin(), controller->message());
accepted = true;
break;
case ConfirmDialog:
- accepted = q->javaScriptConfirm(0, controller->message());
+ accepted = q->javaScriptConfirm(controller->securityOrigin(), controller->message());
break;
case PromptDialog:
- accepted = q->javaScriptPrompt(0, controller->message(), controller->defaultPrompt(), &promptResult);
+ accepted = q->javaScriptPrompt(controller->securityOrigin(), controller->message(), controller->defaultPrompt(), &promptResult);
if (accepted)
controller->textProvided(promptResult);
break;
@@ -810,21 +810,21 @@ QStringList QWebEnginePage::chooseFiles(FileSelectionMode mode, const QStringLis
return ret;
}
-void QWebEnginePage::javaScriptAlert(QWebEngineFrame *originatingFrame, const QString &msg)
+void QWebEnginePage::javaScriptAlert(const QUrl &securityOrigin, const QString &msg)
{
- Q_UNUSED(originatingFrame);
+ Q_UNUSED(securityOrigin);
QMessageBox::information(view(), QStringLiteral("Javascript Alert - %1").arg(url().toString()), msg);
}
-bool QWebEnginePage::javaScriptConfirm(QWebEngineFrame *originatingFrame, const QString &msg)
+bool QWebEnginePage::javaScriptConfirm(const QUrl &securityOrigin, const QString &msg)
{
- Q_UNUSED(originatingFrame);
+ Q_UNUSED(securityOrigin);
return (QMessageBox::information(view(), QStringLiteral("Javascript Confirm - %1").arg(url().toString()), msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok);
}
-bool QWebEnginePage::javaScriptPrompt(QWebEngineFrame *originatingFrame, const QString &msg, const QString &defaultValue, QString *result)
+bool QWebEnginePage::javaScriptPrompt(const QUrl &securityOrigin, const QString &msg, const QString &defaultValue, QString *result)
{
- Q_UNUSED(originatingFrame);
+ Q_UNUSED(securityOrigin);
bool ret = false;
if (result)
*result = QInputDialog::getText(view(), QStringLiteral("Javascript Prompt - %1").arg(url().toString()), msg, QLineEdit::Normal, defaultValue, &ret);
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
index eea7b52d2..29ba140bc 100644
--- a/src/webenginewidgets/api/qwebenginepage.h
+++ b/src/webenginewidgets/api/qwebenginepage.h
@@ -574,9 +574,9 @@ protected:
virtual bool acceptNavigationRequest(QWebEngineFrame *frame, const QNetworkRequest &request, NavigationType type) { Q_UNUSED(frame); Q_UNUSED(&request); Q_UNUSED(type); Q_UNREACHABLE(); return false; }
virtual QStringList chooseFiles(FileSelectionMode mode, const QStringList &oldFiles, const QStringList &acceptedMimeTypes);
- virtual void javaScriptAlert(QWebEngineFrame *originatingFrame, const QString& msg);
- virtual bool javaScriptConfirm(QWebEngineFrame *originatingFrame, const QString& msg);
- virtual bool javaScriptPrompt(QWebEngineFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result);
+ virtual void javaScriptAlert(const QUrl &securityOrigin, const QString& msg);
+ virtual bool javaScriptConfirm(const QUrl &securityOrigin, const QString& msg);
+ virtual bool javaScriptPrompt(const QUrl &securityOrigin, const QString& msg, const QString& defaultValue, QString* result);
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID);
virtual QString userAgentForUrl(const QUrl& url) const { Q_UNUSED(url); Q_UNREACHABLE(); return QString(); }
diff --git a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
index 225ad5a48..a32406264 100644
--- a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
@@ -416,24 +416,24 @@
*/
/*!
- \fn void QWebEnginePage::javaScriptAlert(QWebEngineFrame *frame, const QString& msg)
- This function is called whenever a JavaScript program running inside \a frame calls the alert() function with
+ \fn void QWebEnginePage::javaScriptAlert(const QUrl &securityOrigin, const QString& msg)
+ This function is called whenever a JavaScript program running in a frame affiliated with \a securityOrigin calls the alert() function with
the message \a msg.
The default implementation shows the message, \a msg, with QMessageBox::information.
*/
/*!
- \fn bool QWebEnginePage::javaScriptConfirm(QWebEngineFrame *frame, const QString& msg)
- This function is called whenever a JavaScript program running inside \a frame calls the confirm() function
+ \fn bool QWebEnginePage::javaScriptConfirm(const QUrl &securityOrigin, const QString& msg)
+ This function is called whenever a JavaScript program running in a frame affiliated with \a securityOrigin calls the confirm() function
with the message, \a msg. Returns true if the user confirms the message; otherwise returns false.
The default implementation executes the query using QMessageBox::information with QMessageBox::Ok and QMessageBox::Cancel buttons.
*/
/*!
- \fn bool QWebEnginePage::javaScriptPrompt(QWebEngineFrame *frame, const QString& msg, const QString& defaultValue, QString* result)
- This function is called whenever a JavaScript program running inside \a frame tries to prompt the user for input.
+ \fn bool QWebEnginePage::javaScriptPrompt(const QUrl &securityOrigin, const QString& msg, const QString& defaultValue, QString* result)
+ This function is called whenever a JavaScript program running in a frame affiliated with \a securityOrigin tries to prompt the user for input.
The program may provide an optional message, \a msg, as well as a default value for the input in \a defaultValue.
If the prompt was cancelled by the user the implementation should return false; otherwise the
diff --git a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
index 5e1113765..55b30459f 100644
--- a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
+++ b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
@@ -547,9 +547,10 @@ public:
int alerts;
protected:
- virtual void javaScriptAlert(QWebEngineFrame*, const QString& msg)
+ virtual void javaScriptAlert(const QUrl &securityOrigin, const QString &msg)
{
alerts++;
+ QCOMPARE(securityOrigin, QUrl(QStringLiteral("http://test.origin.com/")));
QCOMPARE(msg, QString("foo"));
}
};
@@ -558,7 +559,7 @@ void tst_QWebEngineFrame::setHtmlWithJSAlert()
{
QString html("<html><head></head><body><script>alert('foo');</script><p>hello world</p></body></html>");
MyPage page;
- page.setHtml(html);
+ page.setHtml(html, QUrl(QStringLiteral("http://test.origin.com/path#fragment")));
waitForSignal(&page, SIGNAL(loadFinished(bool)));
QCOMPARE(page.alerts, 1);
QCOMPARE(toHtmlSync(&page), html);
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 3c2bbb67b..edfe2153b 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -3092,7 +3092,7 @@ public:
JSPromptPage()
{}
- bool javaScriptPrompt(QWebEngineFrame* frame, const QString& msg, const QString& defaultValue, QString* result)
+ bool javaScriptPrompt(const QUrl &securityOrigin, const QString& msg, const QString& defaultValue, QString* result)
{
if (msg == QLatin1String("test1")) {
*result = QString();
@@ -3109,7 +3109,7 @@ public:
}
qFatal("Unknown msg.");
- return QWebEnginePage::javaScriptPrompt(frame, msg, defaultValue, result);
+ return QWebEnginePage::javaScriptPrompt(securityOrigin, msg, defaultValue, result);
}
};