Changeset 163370 in webkit
- Timestamp:
- Feb 4, 2014 2:25:11 AM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r163367 r163370 1 2014-02-04 Eunmi Lee <eunmi15.lee@samsung.com> 2 3 [EFL][WK2] ewk_context needs to route InjectedBundle messages correctly. 4 https://bugs.webkit.org/show_bug.cgi?id=90772 5 6 Reviewed by Gyuyoung Kim. 7 8 Add APIs to post message to injected bundle and register callback to 9 get message from injected bundle. When callback is registered, 10 WKContextInjectedBundleClient is set to get messages from injected bundle. 11 12 * UIProcess/API/efl/ewk_context.cpp: 13 (EwkContext::EwkContext): 14 (toEwkContext): 15 (EwkContext::didReceiveMessageFromInjectedBundle): 16 (EwkContext::didReceiveSynchronousMessageFromInjectedBundle): 17 (EwkContext::setMessageFromInjectedBundleCallback): register callback to get message from injected bundle. 18 (EwkContext::processReceivedMessageFromInjectedBundle): process message from injected bundle. 19 (ewk_context_message_post_to_injected_bundle): 20 (ewk_context_message_from_injected_bundle_callback_set): 21 * UIProcess/API/efl/ewk_context.h: 22 * UIProcess/API/efl/ewk_context_private.h: 23 1 24 2014-02-04 Jinwoo Song <jinwoo7.song@samsung.com> 2 25 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp
r163367 r163370 95 95 TextCheckerClientEfl::instance().ensureSpellCheckingLanguage(); 96 96 #endif 97 98 m_callbackForMessageFromInjectedBundle.callback = nullptr; 99 m_callbackForMessageFromInjectedBundle.userData = nullptr; 97 100 } 98 101 … … 292 295 } 293 296 297 static inline EwkContext* toEwkContext(const void* clientInfo) 298 { 299 return static_cast<EwkContext*>(const_cast<void*>(clientInfo)); 300 } 301 302 void EwkContext::didReceiveMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo) 303 { 304 toEwkContext(clientInfo)->processReceivedMessageFromInjectedBundle(messageName, messageBody, nullptr); 305 } 306 307 void EwkContext::didReceiveSynchronousMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void* clientInfo) 308 { 309 toEwkContext(clientInfo)->processReceivedMessageFromInjectedBundle(messageName, messageBody, returnData); 310 } 311 312 void EwkContext::setMessageFromInjectedBundleCallback(Ewk_Context_Message_From_Injected_Bundle_Cb callback, void* userData) 313 { 314 m_callbackForMessageFromInjectedBundle.userData = userData; 315 316 if (m_callbackForMessageFromInjectedBundle.callback == callback) 317 return; 318 319 if (!m_callbackForMessageFromInjectedBundle.callback) { 320 WKContextInjectedBundleClientV1 client; 321 memset(&client, 0, sizeof(client)); 322 323 client.base.version = 1; 324 client.base.clientInfo = this; 325 client.didReceiveMessageFromInjectedBundle = didReceiveMessageFromInjectedBundle; 326 client.didReceiveSynchronousMessageFromInjectedBundle = didReceiveSynchronousMessageFromInjectedBundle; 327 328 WKContextSetInjectedBundleClient(m_context.get(), &client.base); 329 } else if (!callback) 330 WKContextSetInjectedBundleClient(m_context.get(), nullptr); 331 332 m_callbackForMessageFromInjectedBundle.callback = callback; 333 } 334 335 void EwkContext::processReceivedMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData) 336 { 337 if (!m_callbackForMessageFromInjectedBundle.callback) 338 return; 339 340 CString name = toImpl(messageName)->string().utf8(); 341 CString body; 342 if (messageBody && WKStringGetTypeID() == WKGetTypeID(messageBody)) 343 body = toImpl(static_cast<WKStringRef>(messageBody))->string().utf8(); 344 345 if (returnData) { 346 char* returnString = nullptr; 347 m_callbackForMessageFromInjectedBundle.callback(name.data(), body.data(), &returnString, m_callbackForMessageFromInjectedBundle.userData); 348 if (returnString) { 349 *returnData = WKStringCreateWithUTF8CString(returnString); 350 free(returnString); 351 } else 352 *returnData = WKStringCreateWithUTF8CString(""); 353 } else 354 m_callbackForMessageFromInjectedBundle.callback(name.data(), body.data(), nullptr, m_callbackForMessageFromInjectedBundle.userData); 355 } 356 294 357 Ewk_Context* ewk_context_default_get() 295 358 { … … 373 436 } 374 437 438 void ewk_context_message_post_to_injected_bundle(Ewk_Context* ewkContext, const char* name, const char* body) 439 { 440 EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl); 441 EINA_SAFETY_ON_NULL_RETURN(name); 442 EINA_SAFETY_ON_NULL_RETURN(body); 443 444 WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString(name)); 445 WKRetainPtr<WKStringRef> messageBody(AdoptWK, WKStringCreateWithUTF8CString(body)); 446 WKContextPostMessageToInjectedBundle(impl->wkContext(), messageName.get(), messageBody.get()); 447 } 448 449 void ewk_context_message_from_injected_bundle_callback_set(Ewk_Context* ewkContext, Ewk_Context_Message_From_Injected_Bundle_Cb callback, void* userData) 450 { 451 EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl); 452 453 impl->setMessageFromInjectedBundleCallback(callback, userData); 454 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h
r138554 r163370 111 111 */ 112 112 typedef void (*Ewk_History_Populate_Visited_Links_Cb)(void *user_data); 113 114 /** 115 * Callback for didReceiveMessageFromInjectedBundle and didReceiveSynchronousMessageFromInjectedBundle 116 * 117 * User should allocate new string for return_data before setting it. 118 * The return_data string will be freed on WebKit side. 119 * 120 * @param name name of message from injected bundle 121 * @param body body of message from injected bundle 122 * @param return_data return_data string from application 123 * @param user_data user_data will be passsed when receiving message from injected bundle 124 */ 125 typedef void (*Ewk_Context_Message_From_Injected_Bundle_Cb)(const char *name, const char *body, char **return_data, void *user_data); 113 126 114 127 /** … … 320 333 EAPI void ewk_context_resource_cache_clear(Ewk_Context *context); 321 334 335 /** 336 * Posts message to injected bundle. 337 * 338 * @param context context object to post message to injected bundle 339 * @param name message name 340 * @param body message body 341 */ 342 EAPI void ewk_context_message_post_to_injected_bundle(Ewk_Context *context, const char *name, const char *body); 343 344 /** 345 * Sets callback for received injected bundle message. 346 * 347 * Client can pass @c NULL for callback to stop listening for messages. 348 * 349 * @param context context object 350 * @param callback callback for received injected bundle message or @c NULL 351 * @param user_data user data 352 */ 353 EAPI void ewk_context_message_from_injected_bundle_callback_set(Ewk_Context *context, Ewk_Context_Message_From_Injected_Bundle_Cb callback, void *user_data); 354 322 355 #ifdef __cplusplus 323 356 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_context_private.h
r161527 r163370 89 89 JSGlobalContextRef jsGlobalContext(); 90 90 91 static void didReceiveMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, const void* clientInfo); 92 static void didReceiveSynchronousMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void* clientInfo); 93 void setMessageFromInjectedBundleCallback(Ewk_Context_Message_From_Injected_Bundle_Cb, void*); 94 void processReceivedMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData); 95 91 96 private: 92 97 explicit EwkContext(WKContextRef); … … 112 117 113 118 JSGlobalContextRef m_jsGlobalContext; 119 120 struct { 121 Ewk_Context_Message_From_Injected_Bundle_Cb callback; 122 void* userData; 123 } m_callbackForMessageFromInjectedBundle; 114 124 }; 115 125
Note: See TracChangeset
for help on using the changeset viewer.