| Differences between
and this patch
- a/Source/WebCore/ChangeLog +19 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2014-07-16  Adrian Perez de Castro  <aperez@igalia.com>
2
3
        [GTK] Support script message handlers WebKitUserContentManager
4
        https://bugs.webkit.org/show_bug.cgi?id=133730
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Support user script message handlers in WebKitUserContentManager.
9
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
10
        an option is added to the CMake build files. The option is disabled
11
        globally by default, and the WebKitGTK port enables it. On the API
12
        level, two new methods to register and unregister names are provided
13
        in the "window.webkit" namespace, and on message reception the
14
        "WebKitUserContentManager::script-message-received" signal is
15
        emitted, using the registered names as signal detail.
16
17
        * CMakeLists.txt: Conditionally add the needed files to the build
18
        when the ENABLE_USER_MESSAGE_HANDLERS feature is enabled.
19
1
2014-07-15  Yusuke Suzuki  <utatane.tea@gmail.com>
20
2014-07-15  Yusuke Suzuki  <utatane.tea@gmail.com>
2
21
3
        CSS: Generalize CSS First Letter treatment
22
        CSS: Generalize CSS First Letter treatment
- a/Source/WebKit2/ChangeLog +36 lines
Lines 1-3 a/Source/WebKit2/ChangeLog_sec1
1
2014-07-16  Adrian Perez de Castro  <aperez@igalia.com>
2
3
        [GTK] Support script message handlers WebKitUserContentManager
4
        https://bugs.webkit.org/show_bug.cgi?id=133730
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Support user script message handlers in WebKitUserContentManager.
9
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
10
        an option is added to the CMake build files. The option is disabled
11
        globally by default, and the WebKitGTK port enables it. On the API
12
        level, two new methods to register and unregister names are provided
13
        in the "window.webkit" namespace, and on message reception the
14
        "WebKitUserContentManager::script-message-received" signal is
15
        emitted, using the registered names as signal detail.
16
17
        * UIProcess/API/gtk/WebKitJavascriptResult.cpp: Add a new private
18
        function to construct a WebKitJavascriptResult directly from a
19
        WebCore::SerializedScriptValue.
20
        (_WebKitJavascriptResult::_WebKitJavascriptResult): Ditto.
21
        (webkitJavascriptResultCreate): Ditto.
22
        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Ditto.
23
        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
24
        (webkit_user_content_manager_class_init): Install the
25
        "script-message-received" signal.
26
        (webkit_user_content_manager_register_script_message_handler):
27
        Added.
28
        (webkit_user_content_manager_unregister_script_message_handler):
29
        Added.
30
        * UIProcess/API/gtk/WebKitUserContentManager.h: Added the new
31
        public API methods.
32
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto.
33
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
34
        webkit_user_content_manager_get_type() to the list in order to make
35
        gtk-doc to generate documentation for signals.
36
1
2014-07-15  Benjamin Poulain  <bpoulain@apple.com>
37
2014-07-15  Benjamin Poulain  <bpoulain@apple.com>
2
38
3
        Fix r171124
39
        Fix r171124
- a/Source/WebCore/CMakeLists.txt +15 lines
Lines 3191-3196 if (ENABLE_WEB_REPLAY) a/Source/WebCore/CMakeLists.txt_sec1
3191
    )
3191
    )
3192
endif ()
3192
endif ()
3193
3193
3194
if (ENABLE_USER_MESSAGE_HANDLERS)
3195
    list(APPEND WebCore_IDL_FILES
3196
        page/UserMessageHandler.idl
3197
        page/UserMessageHandlersNamespace.idl
3198
        page/WebKitNamespace.idl
3199
    )
3200
    list(APPEND WebCore_SOURCES
3201
        bindings/js/JSUserMessageHandlersNamespaceCustom.cpp
3202
        page/UserMessageHandler.cpp
3203
        page/UserMessageHandlerDescriptor.cpp
3204
        page/UserMessageHandlersNamespace.cpp
3205
        page/WebKitNamespace.cpp
3206
    )
3207
endif ()
3208
3194
set(WebCoreTestSupport_INCLUDE_DIRECTORIES
3209
set(WebCoreTestSupport_INCLUDE_DIRECTORIES
3195
    "${WEBCORE_DIR}/platform/mock"
3210
    "${WEBCORE_DIR}/platform/mock"
3196
    "${WEBCORE_DIR}/testing"
3211
    "${WEBCORE_DIR}/testing"
- a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp +14 lines
Lines 34-39 struct _WebKitJavascriptResult { a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp_sec1
34
        value = serializedScriptValue->deserialize(webkit_web_view_get_javascript_global_context(view), 0);
34
        value = serializedScriptValue->deserialize(webkit_web_view_get_javascript_global_context(view), 0);
35
    }
35
    }
36
36
37
    _WebKitJavascriptResult(WebKitWebView* view, WebCore::SerializedScriptValue& serializedScriptValue)
38
        : webView(view)
39
        , referenceCount(1)
40
    {
41
        value = serializedScriptValue.deserialize(webkit_web_view_get_javascript_global_context(view), nullptr);
42
    }
43
37
    GRefPtr<WebKitWebView> webView;
44
    GRefPtr<WebKitWebView> webView;
38
    JSValueRef value;
45
    JSValueRef value;
39
46
Lines 49-54 WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView* webView, Web a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp_sec2
49
    return result;
56
    return result;
50
}
57
}
51
58
59
WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView* webView, WebCore::SerializedScriptValue& serializedScriptValue)
60
{
61
    WebKitJavascriptResult* result = g_slice_new(WebKitJavascriptResult);
62
    new (result) WebKitJavascriptResult(webView, serializedScriptValue);
63
    return result;
64
}
65
52
/**
66
/**
53
 * webkit_javascript_result_ref:
67
 * webkit_javascript_result_ref:
54
 * @js_result: a #WebKitJavascriptResult
68
 * @js_result: a #WebKitJavascriptResult
- a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h +2 lines
Lines 20-29 a/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h_sec1
20
#ifndef WebKitJavascriptResultPrivate_h
20
#ifndef WebKitJavascriptResultPrivate_h
21
#define WebKitJavascriptResultPrivate_h
21
#define WebKitJavascriptResultPrivate_h
22
22
23
#include <WebCore/SerializedScriptValue.h>
23
#include "WebKitJavascriptResult.h"
24
#include "WebKitJavascriptResult.h"
24
#include "WebKitPrivate.h"
25
#include "WebKitPrivate.h"
25
#include "WebKitWebView.h"
26
#include "WebKitWebView.h"
26
27
27
WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WebKit::WebSerializedScriptValue*);
28
WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WebKit::WebSerializedScriptValue*);
29
WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WebCore::SerializedScriptValue&);
28
30
29
#endif // WebKitJavascriptResultPrivate_h
31
#endif // WebKitJavascriptResultPrivate_h
- a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp -1 / +121 lines
Lines 20-28 a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp_sec1
20
#include "config.h"
20
#include "config.h"
21
#include "WebKitUserContentManager.h"
21
#include "WebKitUserContentManager.h"
22
22
23
#include "WebKitJavascriptResult.h"
24
#include "WebKitJavascriptResultPrivate.h"
23
#include "WebKitPrivate.h"
25
#include "WebKitPrivate.h"
24
#include "WebKitUserContentManagerPrivate.h"
26
#include "WebKitUserContentManagerPrivate.h"
25
#include "WebKitUserContentPrivate.h"
27
#include "WebKitUserContentPrivate.h"
28
#include "WebKitWebContextPrivate.h"
29
#include "WebScriptMessageHandler.h"
30
#include "WebSerializedScriptValue.h"
26
#include <wtf/gobject/GRefPtr.h>
31
#include <wtf/gobject/GRefPtr.h>
27
32
28
using namespace WebCore;
33
using namespace WebCore;
Lines 59-66 struct _WebKitUserContentManagerPrivate { a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp_sec2
59
64
60
WEBKIT_DEFINE_TYPE(WebKitUserContentManager, webkit_user_content_manager, G_TYPE_OBJECT)
65
WEBKIT_DEFINE_TYPE(WebKitUserContentManager, webkit_user_content_manager, G_TYPE_OBJECT)
61
66
62
static void webkit_user_content_manager_class_init(WebKitUserContentManagerClass*)
67
enum {
68
    SCRIPT_MESSAGE_RECEIVED,
69
70
    LAST_SIGNAL
71
};
72
73
static guint signals[LAST_SIGNAL] = { 0, };
74
75
static void webkit_user_content_manager_class_init(WebKitUserContentManagerClass* klass)
63
{
76
{
77
    GObjectClass* gObjectClass = G_OBJECT_CLASS(klass);
78
79
    /**
80
     * WebKitUserContentManager::script-message-received:
81
     * @manager: the #WebKitUserContentManager
82
     * @js_result: the #WebKitJavascriptResult holding the value received
83
     *     from the JavaScript world.
84
     *
85
     * This signal is emitted when JavaScript in a web view calls
86
     * <code>window.webkit.&lt;name&gt;.postMessage()</code>, after registering
87
     * <code>&lt;name&gt;</code> using
88
     * webkit_user_content_manager_register_script_message_handler()
89
     *
90
     * Since: 2.6
91
     */
92
    signals[SCRIPT_MESSAGE_RECEIVED] =
93
        g_signal_new(
94
            "script-message-received",
95
            G_TYPE_FROM_CLASS(gObjectClass),
96
            static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED),
97
            0, nullptr, nullptr,
98
            g_cclosure_marshal_VOID__BOXED,
99
            G_TYPE_NONE, 1,
100
            WEBKIT_TYPE_JAVASCRIPT_RESULT);
64
}
101
}
65
102
66
/**
103
/**
Lines 109-114 void webkit_user_content_manager_remove_all_style_sheets(WebKitUserContentManage a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.cpp_sec3
109
    manager->priv->userContentController->removeAllUserStyleSheets();
146
    manager->priv->userContentController->removeAllUserStyleSheets();
110
}
147
}
111
148
149
class ScriptMessageClientGtk final : public WebScriptMessageHandler::Client {
150
public:
151
    ScriptMessageClientGtk(WebKitUserContentManager* manager, const gchar* handlerName)
152
        : m_handlerName(g_quark_from_string(handlerName))
153
        , m_manager(manager)
154
    {
155
    }
156
157
    virtual void didPostMessage(WebPageProxy& page, WebFrameProxy&, WebCore::SerializedScriptValue& serializedScriptValue)
158
    {
159
        auto jsResult = adoptGRef(webkitJavascriptResultCreate(WEBKIT_WEB_VIEW(page.viewWidget()), serializedScriptValue));
160
        g_signal_emit(m_manager.get(), signals[SCRIPT_MESSAGE_RECEIVED], m_handlerName, jsResult.get());
161
    }
162
163
    virtual ~ScriptMessageClientGtk() { }
164
165
private:
166
    GQuark m_handlerName;
167
    GRefPtr<WebKitUserContentManager> m_manager;
168
};
169
170
/**
171
 * webkit_user_content_manager_register_script_message_handler:
172
 * @manager: A #WebKitUserContentManager
173
 * @name: Name of the script message channel
174
 *
175
 * Registers a new user script message handler name. After it is
176
 * registered, scripts can use `window.webkit.<name>.postMessage(value)`
177
 * to send messages. Those messages are received by connecting handlers
178
 * to the WebKitUserContentManager::script-message-received signal. The
179
 * handler name is used as the detail of the signal. To avoid race
180
 * conditions between registering the handler name, and starting to
181
 * receive the signals, it is recommended to connect to the signal
182
 * *before* registering the handler name:
183
 *
184
 * <informalexample><programlisting>
185
 * WebKitWebView *view = webkit_web_view_new ();
186
 * WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager ();
187
 * g_signal_connect (manager, "script-message-received::foobar",
188
 *                   G_CALLBACK (handle_script_message), NULL);
189
 * webkit_user_content_manager_register_script_message_handler (manager, "foobar");
190
 * </programlisting></informalexample>
191
 *
192
 * Registering a script message handler will fail if the requested
193
 * name has been already registered before.
194
 *
195
 * Returns: Whether the message channel was registered successfully.
196
 *
197
 * Since: 2.6
198
 */
199
gboolean webkit_user_content_manager_register_script_message_handler(WebKitUserContentManager* manager, const gchar* name)
200
{
201
    g_return_val_if_fail(WEBKIT_IS_USER_CONTENT_MANAGER(manager), FALSE);
202
    g_return_val_if_fail(name, FALSE);
203
204
    const auto handler_name = String::fromUTF8(name);
205
    auto handler = WebScriptMessageHandler::create(std::make_unique<ScriptMessageClientGtk>(manager, name), handler_name);
206
    return manager->priv->userContentController->addUserScriptMessageHandler(handler.get());
207
}
208
209
/**
210
 * webkit_user_content_manager_unregister_script_message_handler:
211
 * @manager: A #WebKitUserContentManager
212
 * @name: Name of the script message channel
213
 *
214
 * Unregisters a previously registered message handler name.
215
 *
216
 * Note that this does *not* disconnect handlers for the
217
 * WebKitUserContentManager::script-message-received signal:
218
 * the signal handlers will be kept connected, but the signal
219
 * will not be emitted unless the handler name is registered
220
 * again.
221
 *
222
 * See: webkit_user_content_manager_register_script_message_handler()
223
 *
224
 * Since: 2.6
225
 */
226
void webkit_user_content_manager_unregister_script_message_handler(WebKitUserContentManager* manager, const gchar* name)
227
{
228
    g_return_if_fail(WEBKIT_IS_USER_CONTENT_MANAGER(manager));
229
    manager->priv->userContentController->removeUserMessageHandlerForName(String::fromUTF8(name));
230
}
231
112
WebUserContentControllerProxy* webkitUserContentManagerGetUserContentControllerProxy(WebKitUserContentManager* manager)
232
WebUserContentControllerProxy* webkitUserContentManagerGetUserContentControllerProxy(WebKitUserContentManager* manager)
113
{
233
{
114
    return manager->priv->userContentController.get();
234
    return manager->priv->userContentController.get();
- a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h -5 / +12 lines
Lines 60-75 struct _WebKitUserContentManagerClass { a/Source/WebKit2/UIProcess/API/gtk/WebKitUserContentManager.h_sec1
60
60
61
61
62
WEBKIT_API GType
62
WEBKIT_API GType
63
webkit_user_content_manager_get_type                (void);
63
webkit_user_content_manager_get_type                          (void);
64
64
65
WEBKIT_API WebKitUserContentManager *
65
WEBKIT_API WebKitUserContentManager *
66
webkit_user_content_manager_new                     (void);
66
webkit_user_content_manager_new                               (void);
67
67
68
WEBKIT_API void
68
WEBKIT_API void
69
webkit_user_content_manager_add_style_sheet         (WebKitUserContentManager *manager,
69
webkit_user_content_manager_add_style_sheet                   (WebKitUserContentManager *manager,
70
                                                     WebKitUserStyleSheet     *stylesheet);
70
                                                               WebKitUserStyleSheet     *stylesheet);
71
WEBKIT_API void
71
WEBKIT_API void
72
webkit_user_content_manager_remove_all_style_sheets (WebKitUserContentManager *manager);
72
webkit_user_content_manager_remove_all_style_sheets           (WebKitUserContentManager *manager);
73
74
WEBKIT_API gboolean
75
webkit_user_content_manager_register_script_message_handler   (WebKitUserContentManager *manager,
76
                                                               const gchar              *name);
77
WEBKIT_API void
78
webkit_user_content_manager_unregister_script_message_handler (WebKitUserContentManager *manager,
79
                                                               const gchar              *name);
73
80
74
G_END_DECLS
81
G_END_DECLS
75
82
- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt +2 lines
Lines 96-101 WebKitUserContentManager a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt_sec1
96
webkit_user_content_manager_new
96
webkit_user_content_manager_new
97
webkit_user_content_manager_add_style_sheet
97
webkit_user_content_manager_add_style_sheet
98
webkit_user_content_manager_remove_all_style_sheets
98
webkit_user_content_manager_remove_all_style_sheets
99
webkit_user_content_manager_register_script_message_handler
100
webkit_user_content_manager_unregister_script_message_handler
99
101
100
<SUBSECTION Standard>
102
<SUBSECTION Standard>
101
WEBKIT_IS_USER_CONTENT_MANAGER
103
WEBKIT_IS_USER_CONTENT_MANAGER
- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types +1 lines
Lines 28-30 webkit_authentication_request_get_type a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types_sec1
28
webkit_credential_get_type
28
webkit_credential_get_type
29
webkit_frame_get_type
29
webkit_frame_get_type
30
webkit_certificate_info_get_type
30
webkit_certificate_info_get_type
31
webkit_user_content_manager_get_type
- a/Source/cmake/OptionsGTK.cmake +1 lines
Lines 129-134 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPELLCHECK ON) a/Source/cmake/OptionsGTK.cmake_sec1
129
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEMPLATE_ELEMENT ON)
129
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TEMPLATE_ELEMENT ON)
130
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS ON)
130
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS ON)
131
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USERSELECT_ALL ON)
131
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USERSELECT_ALL ON)
132
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_USER_MESSAGE_HANDLERS ON)
132
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION OFF)
133
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIBRATION OFF)
133
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO ON)
134
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO ON)
134
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK ON)
135
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK ON)
- a/Source/cmake/WebKitFeatures.cmake +1 lines
Lines 116-121 macro(WEBKIT_OPTION_BEGIN) a/Source/cmake/WebKitFeatures.cmake_sec1
116
    WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_SLIDER "Toggle Touch Slider support" OFF)
116
    WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_SLIDER "Toggle Touch Slider support" OFF)
117
    WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_ICON_LOADING "Toggle Touch Icon Loading Support" OFF)
117
    WEBKIT_OPTION_DEFINE(ENABLE_TOUCH_ICON_LOADING "Toggle Touch Icon Loading Support" OFF)
118
    WEBKIT_OPTION_DEFINE(ENABLE_USERSELECT_ALL "Toggle user-select:all support" OFF)
118
    WEBKIT_OPTION_DEFINE(ENABLE_USERSELECT_ALL "Toggle user-select:all support" OFF)
119
    WEBKIT_OPTION_DEFINE(ENABLE_USER_MESSAGE_HANDLERS "Toggle user script message handler support" OFF)
119
    WEBKIT_OPTION_DEFINE(ENABLE_USER_TIMING "Toggle User Timing support" OFF)
120
    WEBKIT_OPTION_DEFINE(ENABLE_USER_TIMING "Toggle User Timing support" OFF)
120
    WEBKIT_OPTION_DEFINE(ENABLE_VIBRATION "Toggle Vibration API support" OFF)
121
    WEBKIT_OPTION_DEFINE(ENABLE_VIBRATION "Toggle Vibration API support" OFF)
121
    WEBKIT_OPTION_DEFINE(ENABLE_VIDEO "Toggle Video support" OFF)
122
    WEBKIT_OPTION_DEFINE(ENABLE_VIDEO "Toggle Video support" OFF)
- a/Tools/ChangeLog +22 lines
Lines 1-3 a/Tools/ChangeLog_sec1
1
2014-07-16  Adrian Perez de Castro  <aperez@igalia.com>
2
3
        [GTK] Support script message handlers WebKitUserContentManager
4
        https://bugs.webkit.org/show_bug.cgi?id=133730
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Support user script message handlers in WebKitUserContentManager.
9
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
10
        an option is added to the CMake build files. The option is disabled
11
        globally by default, and the WebKitGTK port enables it. On the API
12
        level, two new methods to register and unregister names are provided
13
        in the "window.webkit" namespace, and on message reception the
14
        "WebKitUserContentManager::script-message-received" signal is
15
        emitted, using the registered names as signal detail.
16
17
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp:
18
        Add test case for user script message handlers.
19
        (scriptMessageReceived):
20
        (testUserContentManagerScriptMessageReceived):
21
        (beforeAll):
22
1
2014-07-15  Ryuan Choi  <ryuan.choi@samsung.com>
23
2014-07-15  Ryuan Choi  <ryuan.choi@samsung.com>
2
24
3
        [EFL] Remove EFL WK1 directory from the checker.py
25
        [EFL] Remove EFL WK1 directory from the checker.py
- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp +45 lines
Lines 150-155 static void testUserContentManagerInjectedStyleSheet(UserContentManagerTest* tes a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec1
150
    removeOldInjectedStyleSheetsAndResetLists(test->m_userContentManager.get(), whitelist, blacklist);
150
    removeOldInjectedStyleSheetsAndResetLists(test->m_userContentManager.get(), whitelist, blacklist);
151
}
151
}
152
152
153
#if ENABLE_USER_MESSAGE_HANDLERS
154
static void scriptMessageReceived(WebKitUserContentManager*, WebKitJavascriptResult* jsResult, gpointer refPtr)
155
{
156
    auto resultRefPtr = reinterpret_cast<GRefPtr<WebKitJavascriptResult>*>(refPtr);
157
    *resultRefPtr = jsResult;
158
}
159
160
static void testUserContentManagerScriptMessageReceived(UserContentManagerTest* test, gconstpointer)
161
{
162
    GRefPtr<WebKitJavascriptResult> message;
163
164
    g_signal_connect(test->m_userContentManager.get(), "script-message-received::msg", G_CALLBACK(scriptMessageReceived), &message);
165
    webkit_user_content_manager_register_message_handler(test->m_userContentManager.get(), "msg");
166
    test->loadHtml("<html></html>", nullptr);
167
    test->waitUntilLoadFinished();
168
169
    // Check that the "document.webkit" namespace exists
170
    GUniqueOutPtr<GError> error;
171
    WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit ? 'y' : 'n';", &error.outPtr());
172
    g_assert(javascriptResult);
173
    g_assert(!error.get());
174
    GUniquePtr<char> valueString(WebViewTest::javascriptResultToCString(javascriptResult));
175
    g_assert_cmpstr(valueString.get(), ==, "y");
176
177
    // Check that the "document.webkit.msg" namespace exists
178
    javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.msg ? 'y' : 'n';", &error.outPtr());
179
    g_assert(javascriptResult);
180
    g_assert(!error.get());
181
    valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult));
182
    g_assert_cmpstr(valueString.get(), ==, "y");
183
184
    // Call "document.webkit.msg.postMessage()" and check that the flag was flipped
185
    javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.msg.postMessage('user message');", &error.outPtr());
186
    g_assert(javascriptResult);
187
    g_assert(!error.get());
188
189
    g_assert(message.get());
190
    valueString.reset(WebViewTest::javascriptResultToCString(message));
191
    g_assert_cmpstr(valueString.get(), ==, "user message");
192
}
193
#endif
194
153
static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
195
static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
154
{
196
{
155
    soup_message_set_status(message, SOUP_STATUS_OK);
197
    soup_message_set_status(message, SOUP_STATUS_OK);
Lines 164-169 void beforeAll() a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec2
164
206
165
    Test::add("WebKitWebView", "new-with-user-content-manager", testWebViewNewWithUserContentManager);
207
    Test::add("WebKitWebView", "new-with-user-content-manager", testWebViewNewWithUserContentManager);
166
    UserContentManagerTest::add("WebKitUserContentManager", "injected-style-sheet", testUserContentManagerInjectedStyleSheet);
208
    UserContentManagerTest::add("WebKitUserContentManager", "injected-style-sheet", testUserContentManagerInjectedStyleSheet);
209
#if ENABLE_USER_MESSAGE_HANDLERS
210
    UserContentManagerTest::add("WebKitUserContentManager", "script-message-received", testUserContentManagerScriptMessageReceived);
211
#endif
167
}
212
}
168
213
169
void afterAll()
214
void afterAll()
- a/ChangeLog +21 lines
Lines 1-3 a/ChangeLog_sec1
1
2014-07-16  Adrian Perez de Castro  <aperez@igalia.com>
2
3
        [GTK] Support script message handlers WebKitUserContentManager
4
        https://bugs.webkit.org/show_bug.cgi?id=133730
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Support user script message handlers in WebKitUserContentManager.
9
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
10
        an option is added to the CMake build files. The option is disabled
11
        globally by default, and the WebKitGTK port enables it. On the API
12
        level, two new methods to register and unregister names are provided
13
        in the "window.webkit" namespace, and on message reception the
14
        "WebKitUserContentManager::script-message-received" signal is
15
        emitted, using the registered names as signal detail.
16
17
        * Source/cmake/OptionsGTK.cmake: For the GTK port, enable the
18
        ENABLE_USER_MESSAGE_HANDLERS feature by default.
19
        * Source/cmake/WebKitFeatures.cmake: Add feature description for
20
        ENABLE_USER_MESSAGE_HANDLERS, disabled by default.
21
1
2014-07-15  Ryuan Choi  <ryuan.choi@samsung.com>
22
2014-07-15  Ryuan Choi  <ryuan.choi@samsung.com>
2
23
3
        [CMAKE] ENABLE_ENCRYPTED_MEDIA_V2 should depend on ENABLE_VIDEO
24
        [CMAKE] ENABLE_ENCRYPTED_MEDIA_V2 should depend on ENABLE_VIDEO

Return to Bug 133730