Title: [261370] trunk/Source/WebKit
- Revision
- 261370
- Author
- [email protected]
- Date
- 2020-05-08 01:21:55 -0700 (Fri, 08 May 2020)
Log Message
[WPE][WebDriver] Implement user prompt support
https://bugs.webkit.org/show_bug.cgi?id=207372
Reviewed by Carlos Garcia Campos.
Provide a default implementation for WebDriver dialog commands.
This implementation will mimic the expected browser behavior of
accepting/dismissing the dialogs, while not exposing any new API.
* UIProcess/API/glib/WebKitScriptDialogPrivate.h:
- Expose new private function to check whether the dialog is using a
default implementation or is handled by the user.
* UIProcess/API/glib/WebKitWebView.cpp:
- Avoid default WebDriver behavior if the dialog is user-handled.
(webkitWebViewSetCurrentScriptDialogUserInput):
(webkitWebViewAcceptCurrentScriptDialog):
(webkitWebViewDismissCurrentScriptDialog):
* UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
(webkitScriptDialogIsUserHandled):
- Return whether the dialog is user handled.
* UIProcess/API/wpe/WebKitScriptDialogWPE.cpp:
- Added basic behavior for the WebDriver dialog callbacks for WPE.
(webkitScriptDialogAccept):
(webkitScriptDialogDismiss):
(webkitScriptDialogSetUserInput):
(webkitScriptDialogIsUserHandled):
* UIProcess/API/wpe/WebKitWebViewWPE.cpp:
(webkitWebViewScriptDialog):
- Hold a dialog ref if the webview is controlled by automation and ends
up calling the default "script-dialog" event handler.
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (261369 => 261370)
--- trunk/Source/WebKit/ChangeLog 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/ChangeLog 2020-05-08 08:21:55 UTC (rev 261370)
@@ -1,3 +1,37 @@
+2020-05-08 Lauro Moura <[email protected]>
+
+ [WPE][WebDriver] Implement user prompt support
+ https://bugs.webkit.org/show_bug.cgi?id=207372
+
+ Reviewed by Carlos Garcia Campos.
+
+ Provide a default implementation for WebDriver dialog commands.
+ This implementation will mimic the expected browser behavior of
+ accepting/dismissing the dialogs, while not exposing any new API.
+
+ * UIProcess/API/glib/WebKitScriptDialogPrivate.h:
+ - Expose new private function to check whether the dialog is using a
+ default implementation or is handled by the user.
+ * UIProcess/API/glib/WebKitWebView.cpp:
+ - Avoid default WebDriver behavior if the dialog is user-handled.
+ (webkitWebViewSetCurrentScriptDialogUserInput):
+ (webkitWebViewAcceptCurrentScriptDialog):
+ (webkitWebViewDismissCurrentScriptDialog):
+ * UIProcess/API/gtk/WebKitScriptDialogGtk.cpp:
+ (webkitScriptDialogIsUserHandled):
+ - Return whether the dialog is user handled.
+ * UIProcess/API/wpe/WebKitScriptDialogWPE.cpp:
+ - Added basic behavior for the WebDriver dialog callbacks for WPE.
+ (webkitScriptDialogAccept):
+ (webkitScriptDialogDismiss):
+ (webkitScriptDialogSetUserInput):
+ (webkitScriptDialogIsUserHandled):
+
+ * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
+ (webkitWebViewScriptDialog):
+ - Hold a dialog ref if the webview is controlled by automation and ends
+ up calling the default "script-dialog" event handler.
+
2020-05-07 Jiewen Tan <[email protected]>
[WebAuthn] Roll back newly created credentials if an error occurs
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitScriptDialogPrivate.h (261369 => 261370)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitScriptDialogPrivate.h 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitScriptDialogPrivate.h 2020-05-08 08:21:55 UTC (rev 261370)
@@ -45,6 +45,10 @@
GtkWidget* nativeDialog { nullptr };
#endif
+#if PLATFORM(WPE)
+ bool isUserHandled { true };
+#endif
+
int referenceCount { 1 };
};
@@ -53,3 +57,4 @@
void webkitScriptDialogAccept(WebKitScriptDialog*);
void webkitScriptDialogDismiss(WebKitScriptDialog*);
void webkitScriptDialogSetUserInput(WebKitScriptDialog*, const String&);
+bool webkitScriptDialogIsUserHandled(WebKitScriptDialog *);
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (261369 => 261370)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp 2020-05-08 08:21:55 UTC (rev 261370)
@@ -2438,7 +2438,11 @@
if (!webView->priv->currentScriptDialog)
return;
- // FIXME: Add API to ask the user in case default implementation is not being used.
+ if (webkitScriptDialogIsUserHandled(webView->priv->currentScriptDialog)) {
+ // FIXME: Add API to ask the user in case default implementation is not being used.
+ return;
+ }
+
if (webkitScriptDialogIsRunning(webView->priv->currentScriptDialog))
webkitScriptDialogSetUserInput(webView->priv->currentScriptDialog, userInput);
}
@@ -2448,7 +2452,11 @@
if (!webView->priv->currentScriptDialog)
return;
- // FIXME: Add API to ask the user in case default implementation is not being used.
+ if (webkitScriptDialogIsUserHandled(webView->priv->currentScriptDialog)) {
+ // FIXME: Add API to ask the user in case default implementation is not being used.
+ return;
+ }
+
if (webkitScriptDialogIsRunning(webView->priv->currentScriptDialog))
webkitScriptDialogAccept(webView->priv->currentScriptDialog);
}
@@ -2458,7 +2466,11 @@
if (!webView->priv->currentScriptDialog)
return;
- // FIXME: Add API to ask the user in case default implementation is not being used.
+ if (webkitScriptDialogIsUserHandled(webView->priv->currentScriptDialog)) {
+ // FIXME: Add API to ask the user in case default implementation is not being used.
+ return;
+ }
+
if (webkitScriptDialogIsRunning(webView->priv->currentScriptDialog))
webkitScriptDialogDismiss(webView->priv->currentScriptDialog);
}
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogGtk.cpp (261369 => 261370)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogGtk.cpp 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogGtk.cpp 2020-05-08 08:21:55 UTC (rev 261370)
@@ -50,3 +50,8 @@
webkitScriptDialogImplSetEntryText(WEBKIT_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog), userInput);
#endif
}
+
+bool webkitScriptDialogIsUserHandled(WebKitScriptDialog* scriptDialog)
+{
+ return !WEBKIT_IS_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog);
+}
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitScriptDialogWPE.cpp (261369 => 261370)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitScriptDialogWPE.cpp 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitScriptDialogWPE.cpp 2020-05-08 08:21:55 UTC (rev 261370)
@@ -22,14 +22,37 @@
#include "WebKitScriptDialogPrivate.h"
-void webkitScriptDialogAccept(WebKitScriptDialog*)
+// Callbacks invoked by WebDriver commands
+// As WPE has currently no public API to allow the browser to respond to these commands,
+// we mimic the expected behavior in these callbacks like one would do in a reference browser.
+void webkitScriptDialogAccept(WebKitScriptDialog* dialog)
{
+ auto dialog_type = webkit_script_dialog_get_dialog_type(dialog);
+ if (dialog_type == WEBKIT_SCRIPT_DIALOG_CONFIRM || dialog_type == WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM)
+ webkit_script_dialog_confirm_set_confirmed(dialog, TRUE);
+ // W3C WebDriver tests expect an empty string instead of a null one when the prompt is accepted.
+ if (dialog_type == WEBKIT_SCRIPT_DIALOG_PROMPT && dialog->text.isNull())
+ webkit_script_dialog_prompt_set_text(dialog, dialog->defaultText.isNull() ? "" : dialog->defaultText.data());
+ webkit_script_dialog_unref(dialog);
}
-void webkitScriptDialogDismiss(WebKitScriptDialog*)
+void webkitScriptDialogDismiss(WebKitScriptDialog* dialog)
{
+ auto dialog_type = webkit_script_dialog_get_dialog_type(dialog);
+ if (dialog_type == WEBKIT_SCRIPT_DIALOG_CONFIRM || dialog_type == WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM)
+ webkit_script_dialog_confirm_set_confirmed(dialog, FALSE);
+ webkit_script_dialog_unref(dialog);
}
-void webkitScriptDialogSetUserInput(WebKitScriptDialog*, const String&)
+void webkitScriptDialogSetUserInput(WebKitScriptDialog* dialog, const String& input)
{
+ if (webkit_script_dialog_get_dialog_type(dialog) != WEBKIT_SCRIPT_DIALOG_PROMPT)
+ return;
+
+ webkit_script_dialog_prompt_set_text(dialog, input.utf8().data());
}
+
+bool webkitScriptDialogIsUserHandled(WebKitScriptDialog* dialog)
+{
+ return dialog->isUserHandled;
+}
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp (261369 => 261370)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp 2020-05-08 08:06:44 UTC (rev 261369)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp 2020-05-08 08:21:55 UTC (rev 261370)
@@ -21,15 +21,22 @@
#include "WebKitWebView.h"
#include "WebKitColorPrivate.h"
+#include "WebKitScriptDialogPrivate.h"
#include "WebKitWebViewPrivate.h"
+
gboolean webkitWebViewAuthenticate(WebKitWebView*, WebKitAuthenticationRequest*)
{
return FALSE;
}
-gboolean webkitWebViewScriptDialog(WebKitWebView*, WebKitScriptDialog*)
+gboolean webkitWebViewScriptDialog(WebKitWebView* webview, WebKitScriptDialog* dialog)
{
+ if (webkit_web_view_is_controlled_by_automation(webview)) {
+ webkit_script_dialog_ref(dialog);
+ dialog->isUserHandled = false;
+ }
+
return FALSE;
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes