Update change log and spec for wrt-plugins-tizen_0.4.46
[platform/framework/web/wrt-plugins-tizen.git] / src / Callhistory / JSCallHistory.cpp
index a9a89d1..ee4a63c 100755 (executable)
 #include "EventCallHistoryListener.h"
 #include "CallHistoryFactory.h"
 #include "ICallHistory.h"
-#include <JSTizenExceptionFactory.h>
-#include <JSTizenException.h>
 #include <SecurityExceptions.h>
 #include <JSUtil.h>
-#include <JSWebAPIError.h>
+#include <JSWebAPIErrorFactory.h>
 #include <ArgumentValidator.h>
 #include <TimeTracer.h>
 #include <Logger.h>
@@ -49,7 +47,7 @@
 
 
 using namespace std;
-using namespace DPL;
+
 using namespace WrtDeviceApis::Commons;
 using namespace WrtDeviceApis::CommonsJavaScript;
 using namespace DeviceAPI::Tizen;
@@ -149,17 +147,14 @@ JSValueRef JSCallHistory::find(JSContextRef context, JSObjectRef object, JSObjec
 
        TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
 
-       bool bSuccess = false;
-       bool bError = false;
-
        if (argumentCount < 1) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error");
        }
 
        JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
        if (!priv) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
        }
 
        JSContextRef gContext = priv->getContext();
@@ -173,38 +168,22 @@ JSValueRef JSCallHistory::find(JSContextRef context, JSObjectRef object, JSObjec
         ArgumentValidator validator(context, argumentCount, arguments);
 
                JSObjectRef successCB = validator.toFunction(0);
-               if(successCB)
-                       bSuccess = true;
 
                JSObjectRef errCB = validator.toFunction(1, true);
-               if(errCB)
-                       bError = true;
 
                unsigned long limit = validator.toULong(4, true);
                unsigned long offset = validator.toULong(5, true);
 
-               if (argumentCount >= 1) {
-                       if (JSValueIsNull(context, arguments[0]) || JSValueIsUndefined(context, arguments[0])) {
-                               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : success callback ");
-                       } else if (!JSObjectIsFunction(context, converter.toJSObjectRef(arguments[0]))) {
-                               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : success callback ");
-                       }
-                       cbm->setOnSuccess(arguments[0]);
-               }
+               if(successCB != NULL)
+                       cbm->setOnSuccess(successCB);
 
-               if (argumentCount >= 2) {
-                       if (!JSValueIsNull(context, arguments[1]) && !JSValueIsUndefined(context, arguments[1])) {
-                               if (!JSObjectIsFunction(context, converter.toJSObjectRef(arguments[1]))) {
-                                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : error callback ");
-                               }
-                               cbm->setOnError(arguments[1]);
-                       }
-               }
+               if(errCB != NULL)
+                       cbm->setOnError(errCB);
 
                if (argumentCount >= 3) {
                        if (!JSValueIsNull(context, arguments[2]) && !JSValueIsUndefined(context, arguments[2])) {
                                if (!JSValueIsObject(context, arguments[2])) {
-                                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : filter");
+                                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : filter");
                                }
                        }
                }
@@ -217,10 +196,14 @@ JSValueRef JSCallHistory::find(JSContextRef context, JSObjectRef object, JSObjec
                EventFindCallHistoryPtr event(new EventFindCallHistory());
                ICallHistoryPtr callHistory(priv->getObject());
 
-               event->setPrivateData(StaticPointerCast<IEventPrivateData> (cbm));
+               event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData> (cbm));
                event->setForAsynchronousCall(&ResponseDispatcher::getInstance());
 
                if (argumentCount >= 3) {
+                       if(JSValueIsUndefined(context, arguments[2])) {
+                                       throw DeviceAPI::Common::TypeMismatchException("Filter is undefined");
+                       }
+
                        if(!JSValueIsNull(context, arguments[2])){
                                FilterPtr filter = filterConverter->toFilter(arguments[2]);
 
@@ -229,12 +212,14 @@ JSValueRef JSCallHistory::find(JSContextRef context, JSObjectRef object, JSObjec
                                }else{
                                        event ->setFilter(filter);
                                }
-                       }else if(JSValueIsUndefined(context, arguments[2])) {
-                                       throw DeviceAPI::Common::TypeMismatchException("Filter is undefined");
                        }
                }
 
                if (argumentCount >= 4) {
+                       if(JSValueIsUndefined(context, arguments[3])) {
+                                       throw DeviceAPI::Common::TypeMismatchException("Sortmode is undefined");
+                       }
+
                        if (!JSValueIsNull(context, arguments[3])) {
                                DeviceAPI::Tizen::SortModePtr sortMode = filterConverter->toSortMode(arguments[3]);
 
@@ -243,36 +228,24 @@ JSValueRef JSCallHistory::find(JSContextRef context, JSObjectRef object, JSObjec
                                }else{
                                        event->setSortMode(filterConverter->toSortMode(arguments[3]));
                                }
-                       }else if(JSValueIsUndefined(context, arguments[3])) {
-                                       throw DeviceAPI::Common::TypeMismatchException("Sortmode is undefined");
                        }
                }
 
-               if (argumentCount >= 5) {
-                       if (!check.isNullOrUndefined(arguments[4])) {
-                               event->setLimit(converter.toULong(arguments[4]));
-                       }
-               }
+               event->setLimit(limit);
+               event->setOffset(offset);
 
-               if (argumentCount >= 6) {
-                       if (!check.isNullOrUndefined(arguments[5])) {
-                               event->setOffset(converter.toULong(arguments[5]));
-                       }
-               }
                callHistory->find(event);
                CallHistoryAsyncCallbackManagerSingleton::Instance().registerCallbackManager(cbm, gContext);
        } catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
-    } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
-       } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+        return JSWebAPIErrorFactory::postException(context, exception, err);
+    } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -294,19 +267,19 @@ JSValueRef JSCallHistory::remove(JSContextRef context, JSObjectRef object, JSObj
         JSObjectRef entryObj = validator.toObject(0);
 
                if (argumentCount < 1) {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error");
                }
 
                JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
                if (!priv) {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
                }
 
                Converter converter(context);
 
                if (!JSValueIsObjectOfClass(context, arguments[0], JSCallHistoryEntry::getClassRef())) {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : CallHistoryEntry");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : CallHistoryEntry");
                }
 
                ICallHistoryPtr callHistory(priv->getObject());
@@ -315,15 +288,15 @@ JSValueRef JSCallHistory::remove(JSContextRef context, JSObjectRef object, JSObj
                        callHistory->remove(entry->getEntryId());
                }
        } catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
+        return JSWebAPIErrorFactory::postException(context, exception, err);
     } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -340,13 +313,13 @@ JSValueRef JSCallHistory::removeBatch(JSContextRef context, JSObjectRef object,
        TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
 
        if (argumentCount < 1) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error");
        }
 
        JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
        if (!priv) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
        }
 
        JSContextRef gContext = priv->getContext();
@@ -362,17 +335,17 @@ JSValueRef JSCallHistory::removeBatch(JSContextRef context, JSObjectRef object,
         JSObjectRef errCB = validator.toFunction(2, true);
 
                if(successCB != NULL)
-                       cbm->setOnSuccess(arguments[1]);
+                       cbm->setOnSuccess(successCB);
 
                if(errCB != NULL)
-                       cbm->setOnError(arguments[2]);
+                       cbm->setOnError(errCB);
 
                cbm->setObject(thisObject);
 
                EventRemoveBatchPtr event(new EventRemoveBatch());
                ICallHistoryPtr callHistory(priv->getObject());
 
-               event->setPrivateData(StaticPointerCast<IEventPrivateData> (cbm));
+               event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData> (cbm));
                event->setForAsynchronousCall(&ResponseDispatcher::getInstance());
 
                CallHistoryEntryList entryList;
@@ -389,18 +362,18 @@ JSValueRef JSCallHistory::removeBatch(JSContextRef context, JSObjectRef object,
                        callHistory->removeBatch(event);
                        CallHistoryAsyncCallbackManagerSingleton::Instance().registerCallbackManager(cbm, gContext);
                } else {
-                       cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, "Invalid values error : Entry array is empty"));
+                       cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "Invalid values error : Entry array is empty"));
                }
        } catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
+        return JSWebAPIErrorFactory::postException(context, exception, err);
     } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
@@ -419,7 +392,7 @@ JSValueRef JSCallHistory::removeAll(JSContextRef context, JSObjectRef object, JS
        JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
        if (!priv) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
        }
 
        JSContextRef gContext = priv->getContext();
@@ -442,32 +415,26 @@ JSValueRef JSCallHistory::removeAll(JSContextRef context, JSObjectRef object, JS
                EventRemoveAllPtr event(new EventRemoveAll());
                ICallHistoryPtr callHistory(priv->getObject());
 
-               event->setPrivateData(StaticPointerCast<IEventPrivateData> (cbm));
+               event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData> (cbm));
                event->setForAsynchronousCall(&ResponseDispatcher::getInstance());
                callHistory->removeAll(event);
                CallHistoryAsyncCallbackManagerSingleton::Instance().registerCallbackManager(cbm, gContext);
        } catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
+        return JSWebAPIErrorFactory::postException(context, exception, err);
     } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR, ex.GetMessage()));
+               cbm->callOnError(JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage()));
        }
 
        TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return JSValueMakeUndefined(context);
 }
 
-JSValueRef JSCallHistory::deleteRecording(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
-       const JSValueRef arguments[], JSValueRef* exception) {
-
-       return JSValueMakeUndefined(context);
-}
-
 JSValueRef JSCallHistory::addChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
        const JSValueRef arguments[], JSValueRef* exception) {
 
@@ -479,16 +446,16 @@ JSValueRef JSCallHistory::addChangeListener(JSContextRef context, JSObjectRef ob
     try{
         ArgumentValidator validator(context, argumentCount, arguments);
 
-        JSObjectRef observerObj = validator.toObject(0);
+        JSObjectRef observerObj = validator.toCallbackObject(0, false,"onadded","onchanged","onremoved",NULL);
 
                if (argumentCount < 1) {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error");
                }
 
                JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
                if (!priv) {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
                }
 
                JSContextRef gContext = priv->getContext();
@@ -512,15 +479,15 @@ JSValueRef JSCallHistory::addChangeListener(JSContextRef context, JSObjectRef ob
                return JSUtil::toJSValueRef(context, id);
 
        } catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
+        return JSWebAPIErrorFactory::postException(context, exception, err);
     } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        }
 }
 
@@ -531,59 +498,41 @@ JSValueRef JSCallHistory::removeChangeListener(JSContextRef context, JSObjectRef
                        CALL_HISTORY_FUNCTION_API_REMOVELISTENER);
 
        TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
+       long handle = 0;
 
     try{
         ArgumentValidator validator(context, argumentCount, arguments);
 
-        long handle = validator.toLong(0);
-
-    }catch(const BasePlatformException& err){
-        return JSWebAPIError::throwException(context, exception, err);
-    }
-
-       if (argumentCount < 1) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error");
-       }
-
-       JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
+        handle = validator.toLong(0);
 
-       if (!priv) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
-       }
-
-       JSContextRef gContext = priv->getContext();
-       Converter converter(context);
-       Validator check(context, exception);
-
-       try {
-               long id = 0;
-
-               if (argumentCount >= 1) {
-                       if (check.isNullOrUndefined(arguments[0])) {
-                               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::INVALID_VALUES_ERROR, "Invalid values error : handle");
-                       }
+               JSCallHistoryPriv *priv = static_cast<JSCallHistoryPriv*> (JSObjectGetPrivate(thisObject));
 
-                       id=JSUtil::JSValueToLong(context, arguments[0]);
+               if (!priv) {
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Type missmatch error : Invalid private pointer");
                }
 
-               if (id != 0) {
+               JSContextRef gContext = priv->getContext();
+
+               if (handle != 0) {
                        ICallHistoryPtr callHistory(priv->getObject());
-                       callHistory->removeListener(id);
+                       callHistory->removeListener(handle);
                } else {
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::INVALID_VALUES_ERROR, "Invalid values error : handle");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "Invalid values error : handle");
                }
 
-               CallHistoryListenerCancellerPtr canceller = CallHistoryListenerCancellerPtr(new CallHistoryListenerCanceller(gContext, thisObject, id));
+               CallHistoryListenerCancellerPtr canceller = CallHistoryListenerCancellerPtr(new CallHistoryListenerCanceller(gContext, thisObject, handle));
                DeviceAPI::Common::IListenerItemPtr listenerItem = DPL::StaticPointerCast<DeviceAPI::Common::IListenerItem>(canceller);
                CallHistoryListenerManagerSingleton::Instance().unregisterListener(listenerItem);
-       } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, ex.GetMessage());
+       } catch(const BasePlatformException& err){
+        return JSWebAPIErrorFactory::postException(context, exception, err);
+    } catch(const WrtDeviceApis::Commons::ConversionException& ex) {
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::InvalidArgumentException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::INVALID_VALUES_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::PlatformException& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        } catch(const WrtDeviceApis::Commons::Exception& ex) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, ex.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, ex.GetMessage());
        }
 
        return JSValueMakeUndefined(context);