*
* @file AddEventListenerSupport.cpp
* @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
+ * @author Yunchan Cho (yunchan.cho@samsung.com)
* @version 0.1
* @brief
*/
-#include "AddEventListenerSupport.h"
#include <string>
#include <dpl/log/log.h>
#include <dpl/foreach.h>
#include <CommonsJavaScript/Converter.h>
+#include <js_overlay_addEventListener.h>
+#include <js_overlay_types.h>
#include "JSStorageEvent.h"
+#include "JSTizenServiceEvent.h"
namespace WrtPlugins {
namespace W3C {
JSContextRef AddEventListenerSupport::m_context = NULL;
-void AddEventListenerSupport::initializeContext(JSContextRef context)
+void AddEventListenerSupport::initialize(JSContextRef context)
{
if(!m_context) m_context = context;
}
-bool AddEventListenerSupport::isInitialized() {return m_context!=NULL;}
+void AddEventListenerSupport::deinitialize()
+{
+ if(!m_context) {
+ LogDebug("Not yet initialized");
+ }
+
+ m_listeners.clear();
+ m_context = NULL;
+}
+
+bool AddEventListenerSupport::isInitialized()
+{
+ return m_context!=NULL;
+}
JSValueRef AddEventListenerSupport::
AddEventListener(JSContextRef context,
std::string eventName = WrtDeviceApis::CommonsJavaScript::
Converter(context).toString(arguments[0]);
+ LogDebug("Event name: " << eventName);
- if(eventName != "storage"){
+ if(eventName != "storage" &&
+ eventName != "appservice"){
LogDebug("Event type not supported");
return JSValueMakeUndefined(context);
}
return JSValueMakeUndefined(context);
}
//add object to Listeners
- CallbackData data = {objectCb, thisObject};
- getIFrameListeners(thisObject)->push_back(data);
+
+ //set event information according to each event type
+ if(eventName == "storage") {
+ CallbackData data = {
+ StorageCustomEvent,
+ objectCb,
+ thisObject};
+ getIFrameListeners(thisObject)->push_back(data);
+ } else if (eventName == "appservice") {
+ CallbackData data = {
+ ServiceCustomEvent,
+ objectCb,
+ thisObject};
+ getIFrameListeners(thisObject)->push_back(data);
+ }
return JSValueMakeUndefined(context);
}
-void AddEventListenerSupport::CallListenersFromDifferentIFrames(
+void AddEventListenerSupport::
+CallStorageListenersFromDifferentIFrames(
JSObjectRef iframe,
const WrtDeviceApis::StorageEvent::Api::IStorageEventPtr& event)
{
LogDebug("Invoked callbacks");
+ LogInfo("Context: " << m_context);
FOREACH(it, m_listeners)
{
{
LogDebug("Call");
+ if (listener->eventType ==
+ StorageCustomEvent)
+ {
+ JSObjectCallAsFunction(
+ m_context,
+ listener->object,
+ NULL,
+ argc,
+ argv,
+ NULL);
+ }
+ }
+
+ JSValueUnprotect(m_context, eventObject);
+ }
+
+ LogDebug("Done");
+};
+
+void AddEventListenerSupport::
+CallServiceListenersFromIFrame(JSObjectRef iframe,
+ const WrtDeviceApis::TizenServiceEvent::Api::ITizenServiceEventPtr& event)
+{
+ using namespace WrtPlugins::Tizen;
+ LogDebug("Invoked callbacks");
+
+ IFramesListeners::iterator it = m_listeners.find(iframe);
+ if (it == m_listeners.end()) {
+ LogDebug("This frame object not existed");
+ return;
+ }
+
+ auto eventPriv =
+ new JSTizenServiceEventPrivateObject(m_context, event);
+
+ JSObjectRef eventObject =
+ JSObjectMake(m_context, JSTizenServiceEvent::getClassRef(), eventPriv);
+ const size_t argc = 1;
+ JSValueRef argv[argc] = {eventObject};
+
+ JSValueProtect(m_context, eventObject);
+ FOREACH(listener, *it->second)
+ {
+ if (listener->eventType ==
+ ServiceCustomEvent)
+ {
+ LogDebug("Call");
JSObjectCallAsFunction(
m_context,
listener->object,
- NULL,
+ iframe,
argc,
argv,
NULL);
}
-
- JSValueUnprotect(m_context, eventObject);
}
-
+ JSValueUnprotect(m_context, eventObject);
LogDebug("Done");
};