Update change log and spec for wrt-plugins-tizen_0.4.59
[framework/web/wrt-plugins-tizen.git] / src / Contact / JSContactManager.cpp
index 61ad0db..601d06d 100755 (executable)
 #include "JSContactManager.h"
 
 #include <string>
-#include <dpl/log/log.h>
 #include <CommonsJavaScript/JSCallbackManager.h>
 #include <CommonsJavaScript/Validator.h>
 #include <CommonsJavaScript/Converter.h>
 #include <CommonsJavaScript/JSUtils.h>
 #include <CommonsJavaScript/JSPendingOperation.h>
-#include <JSTizenExceptionFactory.h>
-#include <JSTizenException.h>
 #include <SecurityExceptions.h>
 #include <FilterConverter.h>
 #include "ContactFactory.h"
 #include "JSContactManagerChangeCallbackManager.h"
 #include "ContactFilterConverter.h"
 #include <ArgumentValidator.h>
-#include <JSWebAPIError.h>
+#include <JSWebAPIErrorFactory.h>
+#include <TimeTracer.h>
+#include <Logger.h>
+#include <Export.h>
+#include "ContactUtility.h"
 
 namespace DeviceAPI {
 namespace Contact {
@@ -101,7 +102,7 @@ JSStaticFunction JSContactManager::m_function[] = {
        { 0, 0, 0 }
 };
 
-JSClassRef JSContactManager::getClassRef()
+JSClassRef DLL_EXPORT JSContactManager::getClassRef()
 {
        if (!m_classRef) {
                m_classRef = JSClassCreate(&m_classInfo);
@@ -114,7 +115,7 @@ JSClassRef JSContactManager::m_classRef = JSClassCreate(JSContactManager::getCla
 void JSContactManager::Initialize(JSContextRef context,
                JSObjectRef object)
 {
-       LogDebug("Entered");
+       LoggerD("Entered");
        ContactManagerPtr contactManager = ContactFactory::getInstance().createContactManager();
 
        ContactManagerController *priv = new ContactManagerController(context, contactManager);
@@ -124,9 +125,9 @@ void JSContactManager::Initialize(JSContextRef context,
 
 void JSContactManager::Finalize(JSObjectRef object)
 {
-       LogDebug("entered");
+       LoggerD("entered");
        ContactManagerController *priv = static_cast<ContactManagerController*>(JSObjectGetPrivate(object));
-       LogInfo("Delete address book manager");
+       LoggerI("Delete address book manager");
        delete priv;
 }
 
@@ -137,7 +138,8 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("Entered");
+       LoggerD("Entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr contactManager;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -152,8 +154,8 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                contactManager = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_ADDRESS_BOOKS);
@@ -167,13 +169,13 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                if(errorObj)
                        js2ndParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
@@ -198,10 +200,11 @@ JSValueRef JSContactManager::getAddressBooks(JSContextRef context,
                contactManager->getAddressBooks(dplEvent);
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
 //     return JSObjectMake(gContext, JSPendingOperation::getClassRef(), gcPendingOperation);
        return JSValueMakeUndefined(context);
 }
@@ -213,12 +216,13 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("Entered");
+       LoggerD("Entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerController *priv =
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
-               LogError("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("private object is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_DEFAULT_ADDRESS_BOOK);
@@ -230,8 +234,8 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                contactManager = priv->getObject();
                gContext = priv->getContext();
        } Catch(Exception) {
-               LogError("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("contact manager or context is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -243,8 +247,8 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
        Try {
                contactManager->getDefaultAddressBook(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getDefaultAddressBookIsSet())
@@ -254,15 +258,15 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       LogError("Not Found error");
+                       LoggerE("Not Found error");
                        oss << "No default address book";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -273,10 +277,11 @@ JSValueRef JSContactManager::getDefaultAddressBook(JSContextRef context,
        Try {
                resultValue = converter->toJSValueRef(defaultAddressBook);
        } Catch(Exception){
-               LogError("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Conversion error.");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return resultValue;
 }
 
@@ -287,12 +292,13 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("Entered");
+       LoggerD("Entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerController *priv =
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
-               LogError("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("private object is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_UNIFIED_ADDRESS_BOOK);
@@ -304,8 +310,8 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                contactManager = priv->getObject();
                gContext = priv->getContext();
        } Catch(Exception) {
-               LogError("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("contact manager or context is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -317,8 +323,8 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
        Try {
                contactManager->getUnifiedAddressBook(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getUnifiedAddressBookIsSet())
@@ -328,15 +334,15 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       LogError("Not Found error");
+                       LoggerE("Not Found error");
                        oss << "No default address book";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -347,10 +353,11 @@ JSValueRef JSContactManager::getUnifiedAddressBook(JSContextRef context,
        Try {
                resultValue = converter->toJSValueRef(unifiedAddressBook);
        } Catch(Exception){
-               LogError("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Conversion error.");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return resultValue;
 }
 
@@ -361,12 +368,13 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("Entered");
+       LoggerD("Entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerController *priv =
                static_cast<ContactManagerController*>(JSObjectGetPrivate(thisObject));
        if (!priv) {
-               LogError("private object is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("private object is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET_ADDRESS_BOOK);
@@ -378,8 +386,8 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                contactManager = priv->getObject();
                gContext = priv->getContext();
        } Catch(Exception) {
-               LogError("contact manager or context is null");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("contact manager or context is null");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(gContext);
@@ -389,13 +397,13 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                addressBookId = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        EventContactManagerGetAddressBookPtr dplEvent(new EventContactManagerGetAddressBook());
@@ -406,8 +414,8 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
        Try {
                contactManager->getAddressBook(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getAddressBookIsSet())
@@ -417,15 +425,15 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       LogError("Not Found error : " << addressBookId);
-                       oss << "No Contact id '" << addressBookId << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       LoggerE("Not Found error : " << addressBookId);
+                       oss << "No addressBookId id '" << addressBookId << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -436,10 +444,11 @@ JSValueRef JSContactManager::getAddressBook(JSContextRef context,
        Try {
                resultValue = converter->toJSValueRef(addressBook);
        } Catch(Exception){
-               LogError("Conversion error.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Conversion error.");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return resultValue;
 }
 
@@ -450,7 +459,8 @@ JSValueRef JSContactManager::get(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        ContactManagerController *controller;
 
@@ -461,19 +471,13 @@ JSValueRef JSContactManager::get(JSContextRef context,
                }
                addressBook = controller->getObject();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_GET);
        TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
 
-       if (argumentCount < 1) {
-               /* 1st Argument must be string. */
-               LogError("1st argument must not be undefined.");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, "No Contact id 'undefined'");
-       }
-
        std::string id;
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -481,15 +485,18 @@ JSValueRef JSContactManager::get(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                id = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
+       if(!ContactUtility::checkStrIsUInt(id))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
+
        EventContactManagerGetPtr dplEvent(new EventContactManagerGet());
 
        dplEvent->setId(id);
@@ -498,8 +505,8 @@ JSValueRef JSContactManager::get(JSContextRef context,
        Try {
                addressBook->get(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getPersonIsSet())
@@ -509,15 +516,15 @@ JSValueRef JSContactManager::get(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       LogError("Not Found error : " << id);
+                       LoggerE("Not Found error : " << id);
                        oss << "No Person id '" << id << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -528,10 +535,11 @@ JSValueRef JSContactManager::get(JSContextRef context,
        Try {
                result = converter->toJSValueRef(person);
        } Catch(Exception) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return result;
 }
 
@@ -542,7 +550,8 @@ JSValueRef JSContactManager::update(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        ContactManagerController *controller;
 
@@ -553,8 +562,8 @@ JSValueRef JSContactManager::update(JSContextRef context,
                }
                addressBook = controller->getObject();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_UPDATE);
@@ -564,13 +573,13 @@ JSValueRef JSContactManager::update(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                validator.toObject(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        PersonPtr person(NULL);
@@ -581,8 +590,8 @@ JSValueRef JSContactManager::update(JSContextRef context,
                        ThrowMsg(InvalidArgumentException, "1st argument is not a 'Contact object'.");
                person = converter->toPerson(arguments[0]);
        } Catch(Exception) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "1st argument is not a 'Contact object'");
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "1st argument is not a 'Contact object'");
        }
 
        EventContactManagerUpdatePtr dplEvent(new EventContactManagerUpdate());
@@ -593,8 +602,8 @@ JSValueRef JSContactManager::update(JSContextRef context,
        Try {
                addressBook->update(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult())
@@ -604,18 +613,19 @@ JSValueRef JSContactManager::update(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       oss << "No Contact id '" << person->getId() << "'";
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       oss << "No id '" << person->getId() << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return JSValueMakeUndefined(context);
 }
 
@@ -626,7 +636,8 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -642,9 +653,9 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                addressBook = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_UPDATE_BATCH);
@@ -662,13 +673,13 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                if(errorObj)
                        js3rdParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -687,9 +698,9 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
        Try {
                dplEvent->setPersons(converter->toPersonArray(arguments[0]));
        } Catch(ConversionException) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be a 'function' or a 'null'");
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be a 'function' or a 'null'");
        }
 
        // set event handler's data
@@ -703,11 +714,12 @@ JSValueRef JSContactManager::updateBatch(JSContextRef context,
                addressBook->updateBatch(dplEvent);
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
 //     return JSObjectMake(gContext, JSPendingOperation::getClassRef(), gcPendingOperation);
        return JSValueMakeUndefined(context);
 }
@@ -719,7 +731,8 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        ContactManagerController *controller;
 
@@ -730,8 +743,8 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                }
                addressBook = controller->getObject();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE);
@@ -744,14 +757,16 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                ArgumentValidator validator(context, argumentCount, arguments);
                personId = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
+       if(!ContactUtility::checkStrIsUInt(personId))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
 
        EventContactManagerRemovePtr dplEvent(new EventContactManagerRemove());
 
@@ -761,9 +776,9 @@ JSValueRef JSContactManager::remove(JSContextRef context,
        Try {
                addressBook->remove(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception,
-                               JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception,
+                               JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult())
@@ -773,22 +788,23 @@ JSValueRef JSContactManager::remove(JSContextRef context,
                {
                case ExceptionCodes::NotFoundException:
                case ExceptionCodes::InvalidArgumentException:
-                       LogError("Not Found error : " << personId);
-                       oss << "No Contact id '" << personId << "'";
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::NOT_FOUND_ERROR, oss.str());
+                       LoggerE("Not Found error : " << personId);
+                       oss << "No id '" << personId << "'";
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::NOT_FOUND_ERROR, oss.str());
                        break;
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception,
-                                       JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception,
+                                       JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return JSValueMakeUndefined(context);
 }
 
@@ -799,7 +815,8 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -815,8 +832,8 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                addressBook = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE_BATCH);
@@ -834,13 +851,13 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                if(errorObj)
                        js3rdParamIsFunction = true;
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -859,8 +876,8 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
        Try {
                dplEvent->setPersonIds(converter->toStringArray(arguments[0]));
        } Catch(ConversionException) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be an array of 'Contact id'");
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an array of 'Contact id'");
        }
 
        // set event handler's data
@@ -874,10 +891,11 @@ JSValueRef JSContactManager::removeBatch(JSContextRef context,
                addressBook->removeBatch(dplEvent);
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
 //     return JSObjectMake(gContext, JSPendingOperation::getClassRef(), gcPendingOperation);
        return JSValueMakeUndefined(context);
 }
@@ -889,7 +907,8 @@ JSValueRef JSContactManager::find(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -906,8 +925,8 @@ JSValueRef JSContactManager::find(JSContextRef context,
                addressBook = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_FIND);
@@ -930,13 +949,13 @@ JSValueRef JSContactManager::find(JSContextRef context,
                        js4thParamIsObject = true;
 
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
@@ -953,19 +972,26 @@ JSValueRef JSContactManager::find(JSContextRef context,
 
        EventContactManagerFindPtr dplEvent(new EventContactManagerFind());
        Try {
-               if (js3rdParamIsObject)
-                       dplEvent->setFilter(filterConverter->toFilter(arguments[2]));
+               if (js3rdParamIsObject){
+                       FilterPtr filter = filterConverter->toFilter(arguments[2]);
+                       if(filter)
+                               dplEvent->setFilter(filter);
+                       else
+                               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an Correct 'Filter object' or 'null'");
+               }
        } Catch(Exception) {
-               LogError("Error on 3rd parameter conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "3rd argument must be an 'Filter object' or 'null'");
+               LoggerE("Error on 3rd parameter conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "3rd argument must be an 'Filter object' or 'null'");
        }
 
        Try {
-               if (js4thParamIsObject)
-                       dplEvent->setSortMode(filterConverter->toSortMode(arguments[3]));
+               if (js4thParamIsObject){
+                       SortModePtr sortMode = filterConverter->toSortMode(arguments[3]);
+                       dplEvent->setSortMode(sortMode);
+               }
        } Catch(Exception) {
-               LogError("Error on 4th parameter conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "4th argument must be an 'SortMode object' or 'null'");
+               LoggerE("Error on 4th parameter conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "4th argument must be an 'SortMode object' or 'null'");
        }
 
        // set event handler's data
@@ -979,10 +1005,11 @@ JSValueRef JSContactManager::find(JSContextRef context,
                addressBook->find(dplEvent);
                ContactAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
 //     return JSObjectMake(gContext, JSPendingOperation::getClassRef(), gcPendingOperation);
        return JSValueMakeUndefined(context);
 }
@@ -994,7 +1021,8 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -1009,8 +1037,8 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                addressBook = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_ADD_CHANGE_LISTENER);
@@ -1026,13 +1054,13 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                        js2ndParamIsFunction = true;
 
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
 
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
@@ -1065,11 +1093,11 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                }
 
                if (onpersonsadded == NULL && onpersonsupdated == NULL && onpersonsdeleted == NULL)
-                       ThrowMsg(ConversionException, "2nd argument must have at least one function");
+                       ThrowMsg(ConversionException, "invalid 2nd argument");
 
        } Catch(ConversionException) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, _rethrown_exception.GetMessage());
        }
 
        JSContactManagerChangeCallbackManagerPtr callbackManager = JSContactManagerChangeCallbackManager::createObject(gContext);
@@ -1093,8 +1121,8 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
        Try {
                addressBook->addChangeListener(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        if (!dplEvent->getResult() || !dplEvent->getIdIsSet())
@@ -1103,10 +1131,10 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
                {
                case ExceptionCodes::InvalidArgumentException:
                case ExceptionCodes::PlatformException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
@@ -1121,10 +1149,10 @@ JSValueRef JSContactManager::addChangeListener(JSContextRef context,
        Try {
                result = converter->toJSValueRefLong(watchId);
        } Catch(Exception) {
-               LogError("Error on conversion : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on conversion : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
-
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return result;
 }
 
@@ -1135,7 +1163,8 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                const JSValueRef arguments[],
                JSValueRef* exception)
 {
-       LogDebug("entered");
+       LoggerD("entered");
+       TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
        ContactManagerPtr addressBook;
        JSContextRef gContext;
        ContactManagerController *controller;
@@ -1148,8 +1177,8 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                addressBook = controller->getObject();
                gContext = controller->getContext();
        } Catch(Exception) {
-               LogError("No private object");
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Wrong object");
+               LoggerE("No private object");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "Wrong object");
        }
 
        AceSecurityStatus status = CONTACT_CHECK_ACCESS(CONTACT_FUNCTION_API_CONTACT_MANAGER_REMOVE_CHANGE_LISTENER);
@@ -1158,18 +1187,23 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
        ContactConverterFactory::ConverterType converter = ContactConverterFactory::getConverter(context);
 
        long watchId = 0;
+       std::string id;
+
        try {
                ArgumentValidator validator(context, argumentCount, arguments);
                watchId = validator.toLong(0, false, 0);
+               id = validator.toString(0, false);
        } catch (const TypeMismatchException& err ) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const BasePlatformException& err) {
-               return JSWebAPIError::throwException(context, exception, err);
+               return JSWebAPIErrorFactory::postException(context, exception, err);
        } catch(const ConversionException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        } catch(const NullPointerException& err) {
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "");
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::TYPE_MISMATCH_ERROR, "");
        }
+       if(!ContactUtility::checkStrIsUInt(id))
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::INVALID_VALUES_ERROR, "");
 
        EventContactManagerRemoveChangeListenerPtr dplEvent(new EventContactManagerRemoveChangeListener());
 
@@ -1179,8 +1213,8 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
        Try {
                addressBook->removeChangeListener(dplEvent);
        } Catch(Exception) {
-               LogError("Error on platform : " << _rethrown_exception.GetMessage());
-               return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+               LoggerE("Error on platform : " << _rethrown_exception.GetMessage());
+               return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
        }
 
        PersonsChangeListenerCancellerPtr canceller = PersonsChangeListenerCancellerPtr(new PersonsChangeListenerCanceller(gContext, thisObject, watchId));
@@ -1193,14 +1227,14 @@ JSValueRef JSContactManager::removeChangeListener(JSContextRef context,
                {
                case ExceptionCodes::InvalidArgumentException:
                case ExceptionCodes::NotFoundException:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::NOT_FOUND_ERROR, "Watch id not found");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, "Watch id not found");
                        break;
                default:
-                       return JSTizenExceptionFactory::postException(context, exception, JSTizenException::UNKNOWN_ERROR, "Internal error");
+                       return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR, "Internal error");
                        break;
                }
        }
-
+       TIME_TRACER_ITEM_END(__FUNCTION__, 0);
        return JSValueMakeUndefined(context);
 }