WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-133730-20140716123647.patch (text/plain), 23.03 KB, created by
Adrian Perez
on 2014-07-16 02:34:31 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Adrian Perez
Created:
2014-07-16 02:34:31 PDT
Size:
23.03 KB
patch
obsolete
>Subversion Revision: 171139 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 0a6a8f24a2f577b0b03fb431c1a8dfcfec211d70..42be1c8a95b62df9a7c95b3396312524d677966f 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,22 @@ >+2014-07-16 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Support script message handlers WebKitUserContentManager >+ https://bugs.webkit.org/show_bug.cgi?id=133730 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support user script message handlers in WebKitUserContentManager. >+ This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which >+ an option is added to the CMake build files. The option is disabled >+ globally by default, and the WebKitGTK port enables it. On the API >+ level, two new methods to register and unregister names are provided >+ in the "window.webkit" namespace, and on message reception the >+ "WebKitUserContentManager::script-message-received" signal is >+ emitted, using the registered names as signal detail. >+ >+ * CMakeLists.txt: Conditionally add the needed files to the build >+ when the ENABLE_USER_MESSAGE_HANDLERS feature is enabled. >+ > 2014-07-15 Yusuke Suzuki <utatane.tea@gmail.com> > > CSS: Generalize CSS First Letter treatment >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index 8ed5afe8101e017fe7c8258325ec63e24bcaf721..76da53e0700cc7757481d7ca17fb222933b019a5 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,39 @@ >+2014-07-16 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Support script message handlers WebKitUserContentManager >+ https://bugs.webkit.org/show_bug.cgi?id=133730 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support user script message handlers in WebKitUserContentManager. >+ This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which >+ an option is added to the CMake build files. The option is disabled >+ globally by default, and the WebKitGTK port enables it. On the API >+ level, two new methods to register and unregister names are provided >+ in the "window.webkit" namespace, and on message reception the >+ "WebKitUserContentManager::script-message-received" signal is >+ emitted, using the registered names as signal detail. >+ >+ * UIProcess/API/gtk/WebKitJavascriptResult.cpp: Add a new private >+ function to construct a WebKitJavascriptResult directly from a >+ WebCore::SerializedScriptValue. >+ (_WebKitJavascriptResult::_WebKitJavascriptResult): Ditto. >+ (webkitJavascriptResultCreate): Ditto. >+ * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Ditto. >+ * UIProcess/API/gtk/WebKitUserContentManager.cpp: >+ (webkit_user_content_manager_class_init): Install the >+ "script-message-received" signal. >+ (webkit_user_content_manager_register_script_message_handler): >+ Added. >+ (webkit_user_content_manager_unregister_script_message_handler): >+ Added. >+ * UIProcess/API/gtk/WebKitUserContentManager.h: Added the new >+ public API methods. >+ * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto. >+ * UIProcess/API/gtk/docs/webkit2gtk.types: Add >+ webkit_user_content_manager_get_type() to the list in order to make >+ gtk-doc to generate documentation for signals. >+ > 2014-07-15 Benjamin Poulain <bpoulain@apple.com> > > Fix r171124 >diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt >index 1487471ff8faf77dfaad77b4ccf6e64629fb3cf4..c54a95015b3d20ea565463763099b486ddb694a2 100644 >--- a/Source/WebCore/CMakeLists.txt >+++ b/Source/WebCore/CMakeLists.txt >@@ -3191,6 +3191,21 @@ if (ENABLE_WEB_REPLAY) > ) > endif () > >+if (ENABLE_USER_MESSAGE_HANDLERS) >+ list(APPEND WebCore_IDL_FILES >+ page/UserMessageHandler.idl >+ page/UserMessageHandlersNamespace.idl >+ page/WebKitNamespace.idl >+ ) >+ list(APPEND WebCore_SOURCES >+ bindings/js/JSUserMessageHandlersNamespaceCustom.cpp >+ page/UserMessageHandler.cpp >+ page/UserMessageHandlerDescriptor.cpp >+ page/UserMessageHandlersNamespace.cpp >+ page/WebKitNamespace.cpp >+ ) >+endif () >+ > set(WebCoreTestSupport_INCLUDE_DIRECTORIES > "${WEBCORE_DIR}/platform/mock" > "${WEBCORE_DIR}/testing" >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp >index 9bbd3f4ed076875de84bb98505233015d87b48a0..e1a96a687ab423a4685d317672e18f50cd1b6b9b 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp >@@ -34,6 +34,13 @@ struct _WebKitJavascriptResult { > value = serializedScriptValue->deserialize(webkit_web_view_get_javascript_global_context(view), 0); > } > >+ _WebKitJavascriptResult(WebKitWebView* view, WebCore::SerializedScriptValue& serializedScriptValue) >+ : webView(view) >+ , referenceCount(1) >+ { >+ value = serializedScriptValue.deserialize(webkit_web_view_get_javascript_global_context(view), nullptr); >+ } >+ > GRefPtr<WebKitWebView> webView; > JSValueRef value; > >@@ -49,6 +56,13 @@ WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView* webView, Web > return result; > } > >+WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView* webView, WebCore::SerializedScriptValue& serializedScriptValue) >+{ >+ WebKitJavascriptResult* result = g_slice_new(WebKitJavascriptResult); >+ new (result) WebKitJavascriptResult(webView, serializedScriptValue); >+ return result; >+} >+ > /** > * webkit_javascript_result_ref: > * @js_result: a #WebKitJavascriptResult >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h >index e47e94c1b02548ff4f5ca248bcf05cd6f97f2956..2a1ba4194014fd54c46c648024a9be3d3850bd48 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h >@@ -20,10 +20,12 @@ > #ifndef WebKitJavascriptResultPrivate_h > #define WebKitJavascriptResultPrivate_h > >+#include <WebCore/SerializedScriptValue.h> > #include "WebKitJavascriptResult.h" > #include "WebKitPrivate.h" > #include "WebKitWebView.h" > > WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WebKit::WebSerializedScriptValue*); >+WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WebCore::SerializedScriptValue&); > > #endif // WebKitJavascriptResultPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp >index 9e1b4cc57da6852d281e7e3c07fcda57e98686e6..18be25d09806edf644594cc183e14b091acad049 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp >@@ -20,9 +20,14 @@ > #include "config.h" > #include "WebKitUserContentManager.h" > >+#include "WebKitJavascriptResult.h" >+#include "WebKitJavascriptResultPrivate.h" > #include "WebKitPrivate.h" > #include "WebKitUserContentManagerPrivate.h" > #include "WebKitUserContentPrivate.h" >+#include "WebKitWebContextPrivate.h" >+#include "WebScriptMessageHandler.h" >+#include "WebSerializedScriptValue.h" > #include <wtf/gobject/GRefPtr.h> > > using namespace WebCore; >@@ -59,8 +64,40 @@ struct _WebKitUserContentManagerPrivate { > > WEBKIT_DEFINE_TYPE(WebKitUserContentManager, webkit_user_content_manager, G_TYPE_OBJECT) > >-static void webkit_user_content_manager_class_init(WebKitUserContentManagerClass*) >+enum { >+ SCRIPT_MESSAGE_RECEIVED, >+ >+ LAST_SIGNAL >+}; >+ >+static guint signals[LAST_SIGNAL] = { 0, }; >+ >+static void webkit_user_content_manager_class_init(WebKitUserContentManagerClass* klass) > { >+ GObjectClass* gObjectClass = G_OBJECT_CLASS(klass); >+ >+ /** >+ * WebKitUserContentManager::script-message-received: >+ * @manager: the #WebKitUserContentManager >+ * @js_result: the #WebKitJavascriptResult holding the value received >+ * from the JavaScript world. >+ * >+ * This signal is emitted when JavaScript in a web view calls >+ * <code>window.webkit.<name>.postMessage()</code>, after registering >+ * <code><name></code> using >+ * webkit_user_content_manager_register_script_message_handler() >+ * >+ * Since: 2.6 >+ */ >+ signals[SCRIPT_MESSAGE_RECEIVED] = >+ g_signal_new( >+ "script-message-received", >+ G_TYPE_FROM_CLASS(gObjectClass), >+ static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED), >+ 0, nullptr, nullptr, >+ g_cclosure_marshal_VOID__BOXED, >+ G_TYPE_NONE, 1, >+ WEBKIT_TYPE_JAVASCRIPT_RESULT); > } > > /** >@@ -109,6 +146,89 @@ void webkit_user_content_manager_remove_all_style_sheets(WebKitUserContentManage > manager->priv->userContentController->removeAllUserStyleSheets(); > } > >+class ScriptMessageClientGtk final : public WebScriptMessageHandler::Client { >+public: >+ ScriptMessageClientGtk(WebKitUserContentManager* manager, const gchar* handlerName) >+ : m_handlerName(g_quark_from_string(handlerName)) >+ , m_manager(manager) >+ { >+ } >+ >+ virtual void didPostMessage(WebPageProxy& page, WebFrameProxy&, WebCore::SerializedScriptValue& serializedScriptValue) >+ { >+ auto jsResult = adoptGRef(webkitJavascriptResultCreate(WEBKIT_WEB_VIEW(page.viewWidget()), serializedScriptValue)); >+ g_signal_emit(m_manager.get(), signals[SCRIPT_MESSAGE_RECEIVED], m_handlerName, jsResult.get()); >+ } >+ >+ virtual ~ScriptMessageClientGtk() { } >+ >+private: >+ GQuark m_handlerName; >+ GRefPtr<WebKitUserContentManager> m_manager; >+}; >+ >+/** >+ * webkit_user_content_manager_register_script_message_handler: >+ * @manager: A #WebKitUserContentManager >+ * @name: Name of the script message channel >+ * >+ * Registers a new user script message handler name. After it is >+ * registered, scripts can use `window.webkit.<name>.postMessage(value)` >+ * to send messages. Those messages are received by connecting handlers >+ * to the WebKitUserContentManager::script-message-received signal. The >+ * handler name is used as the detail of the signal. To avoid race >+ * conditions between registering the handler name, and starting to >+ * receive the signals, it is recommended to connect to the signal >+ * *before* registering the handler name: >+ * >+ * <informalexample><programlisting> >+ * WebKitWebView *view = webkit_web_view_new (); >+ * WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager (); >+ * g_signal_connect (manager, "script-message-received::foobar", >+ * G_CALLBACK (handle_script_message), NULL); >+ * webkit_user_content_manager_register_script_message_handler (manager, "foobar"); >+ * </programlisting></informalexample> >+ * >+ * Registering a script message handler will fail if the requested >+ * name has been already registered before. >+ * >+ * Returns: Whether the message channel was registered successfully. >+ * >+ * Since: 2.6 >+ */ >+gboolean webkit_user_content_manager_register_script_message_handler(WebKitUserContentManager* manager, const gchar* name) >+{ >+ g_return_val_if_fail(WEBKIT_IS_USER_CONTENT_MANAGER(manager), FALSE); >+ g_return_val_if_fail(name, FALSE); >+ >+ const auto handler_name = String::fromUTF8(name); >+ auto handler = WebScriptMessageHandler::create(std::make_unique<ScriptMessageClientGtk>(manager, name), handler_name); >+ return manager->priv->userContentController->addUserScriptMessageHandler(handler.get()); >+} >+ >+/** >+ * webkit_user_content_manager_unregister_script_message_handler: >+ * @manager: A #WebKitUserContentManager >+ * @name: Name of the script message channel >+ * >+ * Unregisters a previously registered message handler name. >+ * >+ * Note that this does *not* disconnect handlers for the >+ * WebKitUserContentManager::script-message-received signal: >+ * the signal handlers will be kept connected, but the signal >+ * will not be emitted unless the handler name is registered >+ * again. >+ * >+ * See: webkit_user_content_manager_register_script_message_handler() >+ * >+ * Since: 2.6 >+ */ >+void webkit_user_content_manager_unregister_script_message_handler(WebKitUserContentManager* manager, const gchar* name) >+{ >+ g_return_if_fail(WEBKIT_IS_USER_CONTENT_MANAGER(manager)); >+ manager->priv->userContentController->removeUserMessageHandlerForName(String::fromUTF8(name)); >+} >+ > WebUserContentControllerProxy* webkitUserContentManagerGetUserContentControllerProxy(WebKitUserContentManager* manager) > { > return manager->priv->userContentController.get(); >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h b/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h >index b919500faef0c585f0ca4963642e6eb833a172ed..47c53238d6a0c58d253394c8105df0d1f506cbb6 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h >@@ -60,16 +60,23 @@ struct _WebKitUserContentManagerClass { > > > WEBKIT_API GType >-webkit_user_content_manager_get_type (void); >+webkit_user_content_manager_get_type (void); > > WEBKIT_API WebKitUserContentManager * >-webkit_user_content_manager_new (void); >+webkit_user_content_manager_new (void); > > WEBKIT_API void >-webkit_user_content_manager_add_style_sheet (WebKitUserContentManager *manager, >- WebKitUserStyleSheet *stylesheet); >+webkit_user_content_manager_add_style_sheet (WebKitUserContentManager *manager, >+ WebKitUserStyleSheet *stylesheet); > WEBKIT_API void >-webkit_user_content_manager_remove_all_style_sheets (WebKitUserContentManager *manager); >+webkit_user_content_manager_remove_all_style_sheets (WebKitUserContentManager *manager); >+ >+WEBKIT_API gboolean >+webkit_user_content_manager_register_script_message_handler (WebKitUserContentManager *manager, >+ const gchar *name); >+WEBKIT_API void >+webkit_user_content_manager_unregister_script_message_handler (WebKitUserContentManager *manager, >+ const gchar *name); > > G_END_DECLS > >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >index 063cb675bbfa92a8d570c3b01f685fb02ce56bea..683b0327c04221345281f94f0bfe5029f254707c 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >@@ -96,6 +96,8 @@ WebKitUserContentManager > webkit_user_content_manager_new > webkit_user_content_manager_add_style_sheet > webkit_user_content_manager_remove_all_style_sheets >+webkit_user_content_manager_register_script_message_handler >+webkit_user_content_manager_unregister_script_message_handler > > <SUBSECTION Standard> > WEBKIT_IS_USER_CONTENT_MANAGER >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types >index 4b583bad9b0a7a6ba102f7322e4c707af65c9c61..65abb9cc98e471d406e273d7f457ddc73708f2a8 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types >@@ -28,3 +28,4 @@ webkit_authentication_request_get_type > webkit_credential_get_type > webkit_frame_get_type > webkit_certificate_info_get_type >+webkit_user_content_manager_get_type >diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake >index 2f7fa2d1cb707eb7d042db6aea667dda3521278e..3d4ec4c0acf7862132f2b454bf5d0b3006fe33b1 100644 >--- a/Source/cmake/OptionsGTK.cmake >+++ b/Source/cmake/OptionsGTK.cmake >@@ -129,6 +129,7 @@ WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPELLCHECK ON) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEMPLATE_ELEMENT ON) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS ON) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USERSELECT_ALL ON) >+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_MESSAGE_HANDLERS ON) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION OFF) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO ON) > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK ON) >diff --git a/Source/cmake/WebKitFeatures.cmake b/Source/cmake/WebKitFeatures.cmake >index 242dd8800728b99937b9a46117e5770048377782..c70df510baaf929f349eacb9730155b48cbdaad6 100644 >--- a/Source/cmake/WebKitFeatures.cmake >+++ b/Source/cmake/WebKitFeatures.cmake >@@ -116,6 +116,7 @@ macro(WEBKIT_OPTION_BEGIN) > WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_SLIDER "Toggle Touch Slider support" OFF) > WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_ICON_LOADING "Toggle Touch Icon Loading Support" OFF) > WEBKIT_OPTION_DEFINE(ENABLE_USERSELECT_ALL "Toggle user-select:all support" OFF) >+ WEBKIT_OPTION_DEFINE(ENABLE_USER_MESSAGE_HANDLERS "Toggle user script message handler support" OFF) > WEBKIT_OPTION_DEFINE(ENABLE_USER_TIMING "Toggle User Timing support" OFF) > WEBKIT_OPTION_DEFINE(ENABLE_VIBRATION "Toggle Vibration API support" OFF) > WEBKIT_OPTION_DEFINE(ENABLE_VIDEO "Toggle Video support" OFF) >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index e36e16778afc258396460d214c020fedec2b85ac..85c9a77e593b28a454a1bfd35e5f2518cb71bd65 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,25 @@ >+2014-07-16 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Support script message handlers WebKitUserContentManager >+ https://bugs.webkit.org/show_bug.cgi?id=133730 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support user script message handlers in WebKitUserContentManager. >+ This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which >+ an option is added to the CMake build files. The option is disabled >+ globally by default, and the WebKitGTK port enables it. On the API >+ level, two new methods to register and unregister names are provided >+ in the "window.webkit" namespace, and on message reception the >+ "WebKitUserContentManager::script-message-received" signal is >+ emitted, using the registered names as signal detail. >+ >+ * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp: >+ Add test case for user script message handlers. >+ (scriptMessageReceived): >+ (testUserContentManagerScriptMessageReceived): >+ (beforeAll): >+ > 2014-07-15 Ryuan Choi <ryuan.choi@samsung.com> > > [EFL] Remove EFL WK1 directory from the checker.py >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp >index 104e367bce2419afd887f569f5d41b60ff84d5e9..51ba42558c6d87aed63617b26882606602e9a50b 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp >@@ -150,6 +150,48 @@ static void testUserContentManagerInjectedStyleSheet(UserContentManagerTest* tes > removeOldInjectedStyleSheetsAndResetLists(test->m_userContentManager.get(), whitelist, blacklist); > } > >+#if ENABLE_USER_MESSAGE_HANDLERS >+static void scriptMessageReceived(WebKitUserContentManager*, WebKitJavascriptResult* jsResult, gpointer refPtr) >+{ >+ auto resultRefPtr = reinterpret_cast<GRefPtr<WebKitJavascriptResult>*>(refPtr); >+ *resultRefPtr = jsResult; >+} >+ >+static void testUserContentManagerScriptMessageReceived(UserContentManagerTest* test, gconstpointer) >+{ >+ GRefPtr<WebKitJavascriptResult> message; >+ >+ g_signal_connect(test->m_userContentManager.get(), "script-message-received::msg", G_CALLBACK(scriptMessageReceived), &message); >+ webkit_user_content_manager_register_message_handler(test->m_userContentManager.get(), "msg"); >+ test->loadHtml("<html></html>", nullptr); >+ test->waitUntilLoadFinished(); >+ >+ // Check that the "document.webkit" namespace exists >+ GUniqueOutPtr<GError> error; >+ WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit ? 'y' : 'n';", &error.outPtr()); >+ g_assert(javascriptResult); >+ g_assert(!error.get()); >+ GUniquePtr<char> valueString(WebViewTest::javascriptResultToCString(javascriptResult)); >+ g_assert_cmpstr(valueString.get(), ==, "y"); >+ >+ // Check that the "document.webkit.msg" namespace exists >+ javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.msg ? 'y' : 'n';", &error.outPtr()); >+ g_assert(javascriptResult); >+ g_assert(!error.get()); >+ valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult)); >+ g_assert_cmpstr(valueString.get(), ==, "y"); >+ >+ // Call "document.webkit.msg.postMessage()" and check that the flag was flipped >+ javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.msg.postMessage('user message');", &error.outPtr()); >+ g_assert(javascriptResult); >+ g_assert(!error.get()); >+ >+ g_assert(message.get()); >+ valueString.reset(WebViewTest::javascriptResultToCString(message)); >+ g_assert_cmpstr(valueString.get(), ==, "user message"); >+} >+#endif >+ > static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) > { > soup_message_set_status(message, SOUP_STATUS_OK); >@@ -164,6 +206,9 @@ void beforeAll() > > Test::add("WebKitWebView", "new-with-user-content-manager", testWebViewNewWithUserContentManager); > UserContentManagerTest::add("WebKitUserContentManager", "injected-style-sheet", testUserContentManagerInjectedStyleSheet); >+#if ENABLE_USER_MESSAGE_HANDLERS >+ UserContentManagerTest::add("WebKitUserContentManager", "script-message-received", testUserContentManagerScriptMessageReceived); >+#endif > } > > void afterAll() >diff --git a/ChangeLog b/ChangeLog >index 4b6e06ae18213d8cf5cbee7c3c1f65a877d346b9..a2796dda587af9ebbbdf4071c115a0ad8faa47fc 100644 >--- a/ChangeLog >+++ b/ChangeLog >@@ -1,3 +1,24 @@ >+2014-07-16 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Support script message handlers WebKitUserContentManager >+ https://bugs.webkit.org/show_bug.cgi?id=133730 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support user script message handlers in WebKitUserContentManager. >+ This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which >+ an option is added to the CMake build files. The option is disabled >+ globally by default, and the WebKitGTK port enables it. On the API >+ level, two new methods to register and unregister names are provided >+ in the "window.webkit" namespace, and on message reception the >+ "WebKitUserContentManager::script-message-received" signal is >+ emitted, using the registered names as signal detail. >+ >+ * Source/cmake/OptionsGTK.cmake: For the GTK port, enable the >+ ENABLE_USER_MESSAGE_HANDLERS feature by default. >+ * Source/cmake/WebKitFeatures.cmake: Add feature description for >+ ENABLE_USER_MESSAGE_HANDLERS, disabled by default. >+ > 2014-07-15 Ryuan Choi <ryuan.choi@samsung.com> > > [CMAKE] ENABLE_ENCRYPTED_MEDIA_V2 should depend on ENABLE_VIDEO
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 133730
:
232952
|
233651
|
234981
|
234982
|
234986
|
240219
|
240479
|
240561
|
240666