Modified: trunk/Tools/ChangeLog (218742 => 218743)
--- trunk/Tools/ChangeLog 2017-06-23 11:48:47 UTC (rev 218742)
+++ trunk/Tools/ChangeLog 2017-06-23 12:03:10 UTC (rev 218743)
@@ -1,5 +1,31 @@
2017-06-23 Carlos Garcia Campos <[email protected]>
+ [WPE] Use JSC API to send script messages from web extension in tests
+ https://bugs.webkit.org/show_bug.cgi?id=173757
+
+ Reviewed by Žan Doberšek.
+
+ The GTK+ uses DOM bindings to send the messages. We can just build the message string and use JSEvaluateScript
+ to run postMessage().
+
+ Fixes: /wpe/WebKitSecurityManager/file-xhr
+ /wpe/WebKitConsoleMessage/console-api
+ /wpe/WebKitConsoleMessage/js-exception
+ /wpe/WebKitConsoleMessage/network-error
+ /wpe/WebKitConsoleMessage/security-error
+
+ * TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp:
+ (testWebKitConsoleMessageSecurityError): Remove ifdefs.
+ (beforeAll): Ditto.
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
+ (testWebContextSecurityFileXHR): Ditto.
+ (beforeAll): Ditto.
+ * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp:
+ (consoleMessageSentCallback): Use JSEvaluateScript in WPE. We need to escape the '"' in the message string.
+ (pageCreatedCallback): Remove ifdefs.
+
+2017-06-23 Carlos Garcia Campos <[email protected]>
+
Unreviewed. Fix WPE /wpe/WebKitWebView/_javascript_-dialogs and /wpe/WebKitWebView/window-properties
Skip onbeforeunload dialog tests for now in WPE since we don't have a implemention for
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp (218742 => 218743)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp 2017-06-23 11:48:47 UTC (rev 218742)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestConsoleMessage.cpp 2017-06-23 12:03:10 UTC (rev 218743)
@@ -21,7 +21,6 @@
#include "WebViewTest.h"
-#if PLATFORM(GTK)
class ConsoleMessageTest : public WebViewTest {
public:
MAKE_GLIB_TEST_FIXTURE(ConsoleMessageTest);
@@ -140,17 +139,13 @@
test->waitUntilConsoleMessageReceived();
g_assert(test->m_consoleMessage == referenceMessage);
}
-#endif // PLATFORM(GTK)
void beforeAll()
{
- // FIXME: Use JSC API to send script messages from _javascript_.
-#if PLATFORM(GTK)
ConsoleMessageTest::add("WebKitConsoleMessage", "console-api", testWebKitConsoleMessageConsoleAPI);
ConsoleMessageTest::add("WebKitConsoleMessage", "js-exception", testWebKitConsoleMessageJavaScriptException);
ConsoleMessageTest::add("WebKitConsoleMessage", "network-error", testWebKitConsoleMessageNetworkError);
ConsoleMessageTest::add("WebKitConsoleMessage", "security-error", testWebKitConsoleMessageSecurityError);
-#endif
}
void afterAll()
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp (218742 => 218743)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp 2017-06-23 11:48:47 UTC (rev 218742)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp 2017-06-23 12:03:10 UTC (rev 218743)
@@ -580,7 +580,6 @@
| SecurityPolicyTest::CORSEnabled | SecurityPolicyTest::EmptyDocument);
}
-#if PLATFORM(GTK)
static void consoleMessageReceivedCallback(WebKitUserContentManager*, WebKitJavascriptResult* message, WebKitJavascriptResult** result)
{
g_assert(result);
@@ -649,7 +648,6 @@
webkit_settings_set_allow_file_access_from_file_urls(webkit_web_view_get_settings(test->m_webView), FALSE);
}
-#endif // PLATFORM(GTK)
class ProxyTest : public WebViewTest {
public:
@@ -784,10 +782,7 @@
#endif
WebViewTest::add("WebKitWebContext", "languages", testWebContextLanguages);
SecurityPolicyTest::add("WebKitSecurityManager", "security-policy", testWebContextSecurityPolicy);
- // FIXME: fix script messages in WPE.
-#if PLATFORM(GTK)
WebViewTest::add("WebKitSecurityManager", "file-xhr", testWebContextSecurityFileXHR);
-#endif
ProxyTest::add("WebKitWebContext", "proxy", testWebContextProxySettings);
}
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp (218742 => 218743)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp 2017-06-23 11:48:47 UTC (rev 218742)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp 2017-06-23 12:03:10 UTC (rev 218743)
@@ -240,8 +240,6 @@
}
#endif // PLATFORM(GTK)
-// FIXME: Use JSC API to send script messages from _javascript_.
-#if PLATFORM(GTK)
static void consoleMessageSentCallback(WebKitWebPage* webPage, WebKitConsoleMessage* consoleMessage)
{
g_assert(consoleMessage);
@@ -249,11 +247,29 @@
webkit_console_message_get_level(consoleMessage), webkit_console_message_get_text(consoleMessage),
webkit_console_message_get_line(consoleMessage), webkit_console_message_get_source_id(consoleMessage));
GUniquePtr<char> messageString(g_variant_print(variant.get(), FALSE));
+#if PLATFORM(GTK)
GRefPtr<WebKitDOMDOMWindow> window = adoptGRef(webkit_dom_document_get_default_view(webkit_web_page_get_dom_document(webPage)));
g_assert(WEBKIT_DOM_IS_DOM_WINDOW(window.get()));
webkit_dom_dom_window_webkit_message_handlers_post_message(window.get(), "console", messageString.get());
+#else
+ GUniquePtr<char> escapedMessageString(static_cast<char*>(g_malloc(strlen(messageString.get()) * 2 + 1)));
+ char* src = ""
+ char* dest = escapedMessageString.get();
+ while (*src) {
+ if (*src == '"') {
+ *dest++ = '\\';
+ *dest++ = '"';
+ } else
+ *dest++ = *src;
+ ++src;
+ }
+ *dest = '\0';
+ GUniquePtr<char> script(g_strdup_printf("window.webkit.messageHandlers.console.postMessage(\"%s\");", escapedMessageString.get()));
+ JSGlobalContextRef jsContext = webkit_frame_get_javascript_global_context(webkit_web_page_get_main_frame(webPage));
+ JSRetainPtr<JSStringRef> jsScript(Adopt, JSStringCreateWithUTF8CString(script.get()));
+ JSEvaluateScript(jsContext, jsScript.get(), nullptr, nullptr, 1, nullptr);
+#endif
}
-#endif
#if PLATFORM(GTK)
static void emitFormControlsAssociated(GDBusConnection* connection, const char* formIds)
@@ -297,9 +313,9 @@
g_signal_connect(webPage, "document-loaded", G_CALLBACK(documentLoadedCallback), extension);
g_signal_connect(webPage, "notify::uri", G_CALLBACK(uriChangedCallback), extension);
g_signal_connect(webPage, "send-request", G_CALLBACK(sendRequestCallback), nullptr);
+ g_signal_connect(webPage, "console-message-sent", G_CALLBACK(consoleMessageSentCallback), nullptr);
#if PLATFORM(GTK)
g_signal_connect(webPage, "context-menu", G_CALLBACK(contextMenuCallback), nullptr);
- g_signal_connect(webPage, "console-message-sent", G_CALLBACK(consoleMessageSentCallback), nullptr);
g_signal_connect(webPage, "form-controls-associated", G_CALLBACK(formControlsAssociatedCallback), extension);
#endif
}