|
Lines 1-5
a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec1
|
| 1 |
/* |
1 |
/* |
| 2 |
* Copyright (C) 2013 Igalia S.L. |
2 |
* Copyright (C) 2013-2014 Igalia S.L. |
| 3 |
* |
3 |
* |
| 4 |
* This library is free software; you can redistribute it and/or |
4 |
* This library is free software; you can redistribute it and/or |
| 5 |
* modify it under the terms of the GNU Lesser General Public |
5 |
* modify it under the terms of the GNU Lesser General Public |
|
Lines 25-30
a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec2
|
| 25 |
#include <gtk/gtk.h> |
25 |
#include <gtk/gtk.h> |
| 26 |
#include <webkit2/webkit2.h> |
26 |
#include <webkit2/webkit2.h> |
| 27 |
#include <wtf/gobject/GRefPtr.h> |
27 |
#include <wtf/gobject/GRefPtr.h> |
|
|
28 |
#include <wtf/gobject/GUniquePtr.h> |
| 28 |
|
29 |
|
| 29 |
class UserContentManagerTest : public WebViewTest { |
30 |
class UserContentManagerTest : public WebViewTest { |
| 30 |
public: |
31 |
public: |
|
Lines 212-217
static void testUserContentManagerInjectedScript(UserContentManagerTest* test, g
a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec3
|
| 212 |
removeOldInjectedContentAndResetLists(test->m_userContentManager.get(), whitelist, blacklist); |
213 |
removeOldInjectedContentAndResetLists(test->m_userContentManager.get(), whitelist, blacklist); |
| 213 |
} |
214 |
} |
| 214 |
|
215 |
|
|
|
216 |
class UserScriptMessageTest : public UserContentManagerTest { |
| 217 |
public: |
| 218 |
MAKE_GLIB_TEST_FIXTURE(UserScriptMessageTest); |
| 219 |
|
| 220 |
UserScriptMessageTest() |
| 221 |
: UserContentManagerTest() |
| 222 |
, m_userScriptMessage(nullptr) |
| 223 |
{ |
| 224 |
} |
| 225 |
|
| 226 |
~UserScriptMessageTest() |
| 227 |
{ |
| 228 |
} |
| 229 |
|
| 230 |
bool registerHandler(const char* handlerName) |
| 231 |
{ |
| 232 |
return webkit_user_content_manager_register_script_message_handler(m_userContentManager.get(), handlerName); |
| 233 |
} |
| 234 |
|
| 235 |
void unregisterHandler(const char* handlerName) |
| 236 |
{ |
| 237 |
webkit_user_content_manager_unregister_script_message_handler(m_userContentManager.get(), handlerName); |
| 238 |
} |
| 239 |
|
| 240 |
static void scriptMessageReceived(WebKitUserContentManager* userContentManager, WebKitJavascriptResult* jsResult, UserScriptMessageTest* test) |
| 241 |
{ |
| 242 |
g_signal_handlers_disconnect_by_func(userContentManager, reinterpret_cast<gpointer>(scriptMessageReceived), test); |
| 243 |
g_main_loop_quit(test->m_mainLoop); |
| 244 |
|
| 245 |
g_assert(!test->m_userScriptMessage); |
| 246 |
test->m_userScriptMessage = webkit_javascript_result_ref(jsResult); |
| 247 |
} |
| 248 |
|
| 249 |
WebKitJavascriptResult* postMessageAndWaitUntilReceived(const char* handlerName, const char* javascriptValueAsText) |
| 250 |
{ |
| 251 |
if (m_userScriptMessage) { |
| 252 |
webkit_javascript_result_unref(m_userScriptMessage); |
| 253 |
m_userScriptMessage = nullptr; |
| 254 |
} |
| 255 |
|
| 256 |
GUniquePtr<char> signalName(g_strdup_printf("script-message-received::%s", handlerName)); |
| 257 |
g_signal_connect(m_userContentManager.get(), signalName.get(), G_CALLBACK(scriptMessageReceived), this); |
| 258 |
|
| 259 |
GUniquePtr<char> javascriptSnippet(g_strdup_printf("window.webkit.messageHandlers.%s.postMessage(%s);", handlerName, javascriptValueAsText)); |
| 260 |
webkit_web_view_run_javascript(m_webView, javascriptSnippet.get(), nullptr, nullptr, nullptr); |
| 261 |
g_main_loop_run(m_mainLoop); |
| 262 |
|
| 263 |
g_assert(m_userScriptMessage); |
| 264 |
WebKitJavascriptResult* result = m_userScriptMessage; |
| 265 |
m_userScriptMessage = nullptr; |
| 266 |
return result; |
| 267 |
} |
| 268 |
|
| 269 |
private: |
| 270 |
WebKitJavascriptResult* m_userScriptMessage; |
| 271 |
}; |
| 272 |
|
| 273 |
static void testUserContentManagerScriptMessageReceived(UserScriptMessageTest* test, gconstpointer) |
| 274 |
{ |
| 275 |
g_assert(test->registerHandler("msg")); |
| 276 |
|
| 277 |
// Trying to register the same handler a second time must fail |
| 278 |
g_assert(!test->registerHandler("msg")); |
| 279 |
|
| 280 |
test->loadHtml("<html></html>", nullptr); |
| 281 |
test->waitUntilLoadFinished(); |
| 282 |
|
| 283 |
// Check that the "window.webkit.messageHandlers" namespace exists |
| 284 |
GUniqueOutPtr<GError> error; |
| 285 |
WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.messageHandlers ? 'y' : 'n';", &error.outPtr()); |
| 286 |
g_assert(javascriptResult); |
| 287 |
g_assert(!error.get()); |
| 288 |
GUniquePtr<char> valueString(WebViewTest::javascriptResultToCString(javascriptResult)); |
| 289 |
g_assert_cmpstr(valueString.get(), ==, "y"); |
| 290 |
|
| 291 |
// Check that the "document.webkit.messageHandlers.msg" namespace exists |
| 292 |
javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.messageHandlers.msg ? 'y' : 'n';", &error.outPtr()); |
| 293 |
g_assert(javascriptResult); |
| 294 |
g_assert(!error.get()); |
| 295 |
valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult)); |
| 296 |
g_assert_cmpstr(valueString.get(), ==, "y"); |
| 297 |
|
| 298 |
WebKitJavascriptResult* message = test->postMessageAndWaitUntilReceived("msg", "'user message'"); |
| 299 |
valueString.reset(WebViewTest::javascriptResultToCString(message)); |
| 300 |
webkit_javascript_result_unref(message); |
| 301 |
g_assert_cmpstr(valueString.get(), ==, "user message"); |
| 302 |
|
| 303 |
// Messages should arrive despite of other handlers being registered |
| 304 |
g_assert(test->registerHandler("anotherHandler")); |
| 305 |
|
| 306 |
// Check that the "document.webkit.messageHandlers.msg" namespace still exists |
| 307 |
javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.messageHandlers.msg ? 'y' : 'n';", &error.outPtr()); |
| 308 |
g_assert(javascriptResult); |
| 309 |
g_assert(!error.get()); |
| 310 |
valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult)); |
| 311 |
g_assert_cmpstr(valueString.get(), ==, "y"); |
| 312 |
|
| 313 |
// Check that the "document.webkit.messageHandlers.anotherHandler" namespace exists |
| 314 |
javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.messageHandlers.anotherHandler ? 'y' : 'n';", &error.outPtr()); |
| 315 |
g_assert(javascriptResult); |
| 316 |
g_assert(!error.get()); |
| 317 |
valueString.reset(WebViewTest::javascriptResultToCString(javascriptResult)); |
| 318 |
g_assert_cmpstr(valueString.get(), ==, "y"); |
| 319 |
|
| 320 |
message = test->postMessageAndWaitUntilReceived("msg", "'handler: msg'"); |
| 321 |
valueString.reset(WebViewTest::javascriptResultToCString(message)); |
| 322 |
webkit_javascript_result_unref(message); |
| 323 |
g_assert_cmpstr(valueString.get(), ==, "handler: msg"); |
| 324 |
|
| 325 |
message = test->postMessageAndWaitUntilReceived("anotherHandler", "'handler: anotherHandler'"); |
| 326 |
valueString.reset(WebViewTest::javascriptResultToCString(message)); |
| 327 |
webkit_javascript_result_unref(message); |
| 328 |
g_assert_cmpstr(valueString.get(), ==, "handler: anotherHandler"); |
| 329 |
|
| 330 |
// Unregistering a handler and re-registering again under the same name should work. |
| 331 |
// TODO Enable after https://bugs.webkit.org/show_bug.cgi?id=138142 gets fixed. |
| 332 |
#if 0 |
| 333 |
test->unregisterHandler("msg"); |
| 334 |
javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.webkit.messageHandlers.msg.postMessage('42');", &error.outPtr()); |
| 335 |
g_assert(!javascriptResult); |
| 336 |
g_assert(error.get()); |
| 337 |
|
| 338 |
// Re-registering a handler that has been unregistered must work |
| 339 |
g_assert(test->registerHandler("msg")); |
| 340 |
message = test->postMessageAndWaitUntilReceived("msg", "'handler: msg'"); |
| 341 |
valueString.reset(WebViewTest::javascriptResultToCString(message)); |
| 342 |
webkit_javascript_result_unref(message); |
| 343 |
g_assert_cmpstr(valueString.get(), ==, "handler: msg"); |
| 344 |
#endif |
| 345 |
} |
| 346 |
|
| 215 |
static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) |
347 |
static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer) |
| 216 |
{ |
348 |
{ |
| 217 |
soup_message_set_status(message, SOUP_STATUS_OK); |
349 |
soup_message_set_status(message, SOUP_STATUS_OK); |
|
Lines 227-232
void beforeAll()
a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitUserContentManager.cpp_sec4
|
| 227 |
Test::add("WebKitWebView", "new-with-user-content-manager", testWebViewNewWithUserContentManager); |
359 |
Test::add("WebKitWebView", "new-with-user-content-manager", testWebViewNewWithUserContentManager); |
| 228 |
UserContentManagerTest::add("WebKitUserContentManager", "injected-style-sheet", testUserContentManagerInjectedStyleSheet); |
360 |
UserContentManagerTest::add("WebKitUserContentManager", "injected-style-sheet", testUserContentManagerInjectedStyleSheet); |
| 229 |
UserContentManagerTest::add("WebKitUserContentManager", "injected-script", testUserContentManagerInjectedScript); |
361 |
UserContentManagerTest::add("WebKitUserContentManager", "injected-script", testUserContentManagerInjectedScript); |
|
|
362 |
UserScriptMessageTest::add("WebKitUserContentManager", "script-message-received", testUserContentManagerScriptMessageReceived); |
| 230 |
} |
363 |
} |
| 231 |
|
364 |
|
| 232 |
void afterAll() |
365 |
void afterAll() |