Title: [218743] trunk/Tools
Revision
218743
Author
[email protected]
Date
2017-06-23 05:03:10 -0700 (Fri, 23 Jun 2017)

Log Message

[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.

Modified Paths

Diff

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
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to