Update change log and spec for wrt-plugins-tizen_0.4.70
[framework/web/wrt-plugins-tizen.git] / src / NFC / JSNFCTarget.cpp
index c1eaa88..b00b6c4 100755 (executable)
@@ -36,7 +36,7 @@
 #include "NFCListenerManager.h"
 #include "NFCFactory.h"
 #include "EventTargetAction.h"
-#include "plugin_config.h"
+#include "plugin_config_impl.h"
 #include <Logger.h>
 
 
@@ -90,7 +90,7 @@ JSStaticFunction JSNFCTarget::m_function[] = {
 
 JSClassRef JSNFCTarget::m_jsClassRef = JSClassCreate(JSNFCTarget::getClassInfo());
 
-JSObjectRef JSNFCTarget::createJSObject(JSContextRef context, void *tagHandle) {
+JSObjectRef JSNFCTarget::createJSObject(JSContextRef context, void *tagHandle, EventNFCChangedPrivateDataPtr eventNFCChangedPriv) {
        LoggerD("entered");
 
        INFCTargetPtr nfcTarget = NFCFactory::getInstance().createNFCTargetObject(tagHandle);
@@ -101,6 +101,7 @@ JSObjectRef JSNFCTarget::createJSObject(JSContextRef context, void *tagHandle) {
                ThrowMsg(NullPointerException, "Can not new a NFCTarget object");
        }
 
+       priv->copyAceCheckAccessFunction(eventNFCChangedPriv.Get());
        return JSObjectMake(context, getClassRef(), priv);
 }
 
@@ -179,18 +180,14 @@ JSValueRef JSNFCTarget::setReceiveNDEFListener(JSContextRef context,
 {
        LoggerD("Entered ");
 
-       AceSecurityStatus status = NFC_CHECK_ACCESS(NFC_FUNCTION_API_P2P_FUNCS);
-       TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
-
-       JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
-
        NFCTargetPrivObject* privateObject = static_cast<NFCTargetPrivObject*>(JSObjectGetPrivate(thisObject));
        if (NULL == privateObject) {
                LoggerE("private object is null");
                return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type Mismatch");
        }
-       
-       INFCTargetPtr nfcTarget(privateObject->getObject());
+
+       TIZEN_CHECK_ACCESS(context, exception, privateObject,
+        NFC_FUNCTION_API_P2P_FUNCS);
 
        Try {
                ArgumentValidator validator(context, argumentCount, arguments);
@@ -199,11 +196,13 @@ JSValueRef JSNFCTarget::setReceiveNDEFListener(JSContextRef context,
                if (validator.toFunction(0))
                        onSuccessForCbm = arguments[0];
 
+               JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
                JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(global_context, onSuccessForCbm, NULL, true, true);
 
                EventTargetActionReceiveEmitterPtr emitter(new EventTargetActionReceiveEmitter);
                emitter->setListener(&NFCResponseDispatcher::getInstance());
                emitter->setEventPrivateData(DPL::StaticPointerCast<EventTargetActionReceive::PrivateDataType>(callbackManager));
+               INFCTargetPtr nfcTarget(privateObject->getObject());
                nfcTarget->setReceiveNDEFListener(emitter);
 
                NFCListenerCancellerPtr canceller = NFCListenerCancellerPtr(new NFCListenerCanceller(global_context, thisObject, static_cast<long>(ID_NFCPEER_RECEIVENDEF_LISTENER)));
@@ -238,20 +237,19 @@ JSValueRef JSNFCTarget::unsetReceiveNDEFListener(JSContextRef context,
 {
        LoggerD("Entered ");
        Try {
-               AceSecurityStatus status = NFC_CHECK_ACCESS(NFC_FUNCTION_API_P2P_FUNCS);
-               TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
-
-               JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
-
                NFCTargetPrivObject* privateObject = static_cast<NFCTargetPrivObject*>(JSObjectGetPrivate(thisObject));
                if (NULL == privateObject) {
                        LoggerE("private object is null");
                        return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type Mismatch");
                }
 
+               TIZEN_CHECK_ACCESS(context, exception, privateObject,
+               NFC_FUNCTION_API_P2P_FUNCS);
+
                INFCTargetPtr nfcTarget(privateObject->getObject());
                nfcTarget->unsetReceiveNDEFListener();
 
+               JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
                NFCListenerCancellerPtr canceller = NFCListenerCancellerPtr(new NFCListenerCanceller(global_context, thisObject,  static_cast<long>(ID_NFCPEER_RECEIVENDEF_LISTENER)));
                IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
                NFCListenerManagerSingleton::Instance().unregisterListener(listenerItem);
@@ -281,20 +279,17 @@ JSValueRef JSNFCTarget::sendNDEF(JSContextRef context,
 {
        LoggerD("Entered ");
 
-       AceSecurityStatus status = NFC_CHECK_ACCESS(NFC_FUNCTION_API_P2P_FUNCS);
-       TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
-
-       JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
-       
-       NFCConverter convert(context);
-
        NFCTargetPrivObject* privateObject = static_cast<NFCTargetPrivObject*>(JSObjectGetPrivate(thisObject));
        if (NULL == privateObject) {
                LoggerE("private object is null");
                return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type Mismatch");
        }
 
-       INFCTargetPtr nfcTarget(privateObject->getObject());
+       TIZEN_CHECK_ACCESS(context, exception, privateObject,
+        NFC_FUNCTION_API_P2P_FUNCS);
+
+       JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
+
        JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(global_context, NULL, NULL, true, true);
        Try {
                ArgumentValidator validator(context, argumentCount, arguments);
@@ -308,8 +303,6 @@ JSValueRef JSNFCTarget::sendNDEF(JSContextRef context,
                if (validator.toFunction(2, true))
                        callbackManager->setOnError(arguments[2]);
 
-               JSContextRef global_context = GlobalContextManager::getInstance()->getGlobalContext(context);
-               NFCConverter convert(global_context);
                void *messageHandle = NULL;
                try {
                        NdefMessagePrivObject* ndefMessagePrivateObj = static_cast<NdefMessagePrivObject*>(JSObjectGetPrivate(ndefMessageObj));
@@ -319,6 +312,7 @@ JSValueRef JSNFCTarget::sendNDEF(JSContextRef context,
                        }
                        INdefMessagePtr ndefMessage(ndefMessagePrivateObj->getObject());
                        JSValueRef recordsValue = (ndefMessage->mLocalProperty).getProperty(global_context, TIZEN_NDEFMESSAGE_RECORDS);
+                       NFCConverter convert(global_context);
                        std::vector<void *> records = convert.toVectorOfRecordHandles(recordsValue);
                        messageHandle = ndefMessage->makeNdefMessageHandle(records);
                } catch (WrtDeviceApis::Commons::Exception& err) {
@@ -330,8 +324,9 @@ JSValueRef JSNFCTarget::sendNDEF(JSContextRef context,
        
                EventTargetActionSendPtr event(new EventTargetActionSend(messageHandle));
                callbackManager->setObject(thisObject);
-               event->setPrivateData( DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
+               event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
                event->setForAsynchronousCall(&NFCResponseDispatcher::getInstance());
+               INFCTargetPtr nfcTarget(privateObject->getObject());
                nfcTarget->sendNDEF(event);
                NFCAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, global_context);
                return JSValueMakeUndefined(context);