2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
21 #include <CommonsJavaScript/Converter.h>
23 //#include <CommonsJavaScript/Validator.h>
24 #include <CommonsJavaScript/JSUtils.h>
26 #include <CommonsJavaScript/JSCallbackManager.h>
27 #include <CommonsJavaScript/Utils.h>
28 #include <CommonsJavaScript/ScopedJSStringRef.h>
30 #include <ArgumentValidator.h>
33 #include <SecurityExceptions.h>
34 //#include <Commons/Exception.h>
35 #include <JSWebAPIErrorFactory.h>
37 #include "ApplicationFactory.h"
38 #include "plugin_config.h"
39 #include "ApplicationController.h"
40 #include "JSApplicationManager.h"
41 #include "ApplicationConverter.h"
42 #include "ApplicationUtil.h"
43 #include "JSApplicationControl.h"
44 #include "ApplicationAsyncCallbackManager.h"
45 #include "ApplicationListenerManager.h"
46 #include "ApplicationInformationEventPrivateData.h"
47 #include "JSApplicationEventCallbackManager.h"
48 #include "JSApplication.h"
49 #include "ApplicationManager.h"
51 #include <TimeTracer.h>
55 #include <plugins-ipc-message/ipc_message_support.h>
58 namespace Application {
60 using namespace DeviceAPI::Common;
62 using namespace WrtDeviceApis::Commons;
63 using namespace WrtDeviceApis::CommonsJavaScript;
65 JSClassRef JSApplicationManager::m_jsClassRef = NULL;
67 JSClassDefinition JSApplicationManager::m_classInfo = {
69 kJSClassAttributeNone,
70 TIZEN_INTERFACE_APPLICATION_MANAGER,
79 NULL, //deleteProperty,
80 NULL, //getPropertyNames,
87 JSStaticFunction JSApplicationManager::m_function[] = {
88 { APPLICATION_FUNCTION_API_GET_CURRENT_APP, JSApplicationManager::getCurrentApplication, kJSPropertyAttributeNone },
89 { APPLICATION_FUNCTION_API_LAUNCH, JSApplicationManager::launch, kJSPropertyAttributeNone },
90 { APPLICATION_FUNCTION_API_KILL, JSApplicationManager::kill, kJSPropertyAttributeNone },
91 { APPLICATION_FUNCTION_API_SET_USER_AGENT, JSApplicationManager::setUserAgent, kJSPropertyAttributeNone },
92 { APPLICATION_FUNCTION_API_GET_APPS_INFO, JSApplicationManager::getAppsInfo, kJSPropertyAttributeNone },
93 { APPLICATION_FUNCTION_API_GET_APPS_CONTEXT, JSApplicationManager::getAppsContext, kJSPropertyAttributeNone },
94 { APPLICATION_FUNCTION_API_GET_APP_INFO, JSApplicationManager::getAppInfo, kJSPropertyAttributeNone },
95 { APPLICATION_FUNCTION_API_GET_APP_CONTEXT, JSApplicationManager::getAppContext, kJSPropertyAttributeNone },
96 { APPLICATION_FUNCTION_API_ADD_APP_INFO_EVENT_LISTENER, JSApplicationManager::addAppInfoEventListener, kJSPropertyAttributeNone },
97 { APPLICATION_FUNCTION_API_REMOVE_APP_INFO_EVENT_LISTENER, JSApplicationManager::removeAppInfoEventListener, kJSPropertyAttributeNone },
98 { APPLICATION_FUNCTION_API_LAUNCH_APP_CONTROL, JSApplicationManager::launchAppControl, kJSPropertyAttributeNone },
99 { APPLICATION_FUNCTION_API_FIND_APP_CONTROL, JSApplicationManager::findAppControl, kJSPropertyAttributeNone },
100 { APPLICATION_FUNCTION_API_GET_APP_CERTS, JSApplicationManager::getAppCerts, kJSPropertyAttributeNone },
101 { APPLICATION_FUNCTION_API_GET_APP_SHARED_URI, JSApplicationManager::getAppSharedURI, kJSPropertyAttributeNone },
102 { APPLICATION_FUNCTION_API_GET_APP_META_DATA, JSApplicationManager::getAppMetaData, kJSPropertyAttributeNone },
106 const JSClassRef DLL_EXPORT JSApplicationManager::getClassRef()
109 m_jsClassRef = JSClassCreate(&m_classInfo);
115 const JSClassDefinition* JSApplicationManager::getClassInfo()
120 void JSApplicationManager::initialize(JSContextRef context, JSObjectRef object)
122 ApplicationController* priv = static_cast<ApplicationController*>(JSObjectGetPrivate(object));
125 IApplicationManagerPtr applications(ApplicationFactory::getInstance().createApplication());
126 priv = new ApplicationController(context, applications);
128 if (!JSObjectSetPrivate(object, static_cast<void*>(priv))) {
132 LoggerD("private date is already exist");
136 void JSApplicationManager::finalize(JSObjectRef object)
138 ApplicationController* priv = static_cast<ApplicationController*> (JSObjectGetPrivate(object));
139 JSObjectSetPrivate(object, NULL);
143 JSValueRef JSApplicationManager::getCurrentApplication(JSContextRef context,
145 JSObjectRef thisObject,
146 size_t argumentCount,
147 const JSValueRef arguments[],
148 JSValueRef* exception)
150 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
153 ApplicationController *controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
155 throw TypeMismatchException("No private object.");
157 JSContextRef gContext = controller->getContext();
159 ApplicationPtr result = ApplicationManager::getCurrentApplication();
161 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
162 return JSApplication::makeObject(gContext, result);
165 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getCurrentApplication().");
166 return JSWebAPIErrorFactory::postException(context, exception, err);
171 JSValueRef JSApplicationManager::launch(JSContextRef context,
173 JSObjectRef thisObject,
174 size_t argumentCount,
175 const JSValueRef arguments[],
176 JSValueRef* exception)
178 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
179 TIME_TRACER_ITEM_BEGIN("launch(async)", 0);
181 TIME_TRACER_ITEM_BEGIN("launch(ACE)", 0);
182 AceSecurityStatus status = APPLICATION_CHECK_ACCESS(APPLICATION_FUNCTION_API_LAUNCH);
183 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
184 TIME_TRACER_ITEM_END("launch(ACE)", 0);
187 IApplicationManagerPtr appmgr;
188 JSContextRef gContext;
189 ApplicationController *controller;
191 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
193 throw TypeMismatchException("No private object.");
195 appmgr = controller->getObject();
196 gContext = controller->getContext();
198 EventApplicationLaunchPtr event(new EventApplicationLaunch());
199 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
201 ArgumentValidator validator(context, argumentCount, arguments);
204 std::string id = validator.toString(0);
207 IPCMessageSupport::sendAsyncMessageToUiProcess(IPCMessageSupport::TIZEN_LAUNCH, NULL, NULL, NULL);
210 JSObjectRef successCallback = validator.toFunction(1, true);
212 callbackManager->setOnSuccess(successCallback);
215 JSObjectRef errorCallback = validator.toFunction(2, true);
217 callbackManager->setOnError(errorCallback);
219 callbackManager->setObject(thisObject);
220 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
222 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
223 event->setForAsynchronousCall(controller);
225 appmgr->launch(event);
226 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
227 return JSValueMakeUndefined(context);
229 } catch (const BasePlatformException &err) {
230 return JSWebAPIErrorFactory::postException(context, exception, err);
232 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.launch().");
233 return JSWebAPIErrorFactory::postException(context, exception, err);
237 JSValueRef JSApplicationManager::kill(JSContextRef context,
239 JSObjectRef thisObject,
240 size_t argumentCount,
241 const JSValueRef arguments[],
242 JSValueRef* exception)
244 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
245 TIME_TRACER_ITEM_BEGIN("kill(async)", 0);
247 TIME_TRACER_ITEM_BEGIN("kill(ACE)", 0);
248 AceSecurityStatus status = APPLICATION_CHECK_ACCESS(APPLICATION_FUNCTION_API_KILL);
249 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
250 TIME_TRACER_ITEM_END("kill(ACE)", 0);
253 IApplicationManagerPtr appmgr;
254 JSContextRef gContext;
255 ApplicationController *controller;
257 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
259 throw TypeMismatchException("No private object.");
261 appmgr = controller->getObject();
262 gContext = controller->getContext();
264 EventApplicationKillPtr event(new EventApplicationKill());
265 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
266 ArgumentValidator validator(context, argumentCount, arguments);
269 std::string contextId = validator.toString(0);
270 event->setContextId(contextId);
273 JSObjectRef successCallback = validator.toFunction(1, true);
275 callbackManager->setOnSuccess(successCallback);
278 JSObjectRef errorCallback = validator.toFunction(2, true);
280 callbackManager->setOnError(errorCallback);
282 callbackManager->setObject(thisObject);
283 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
285 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
286 event->setForAsynchronousCall(controller);
289 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
290 return JSValueMakeUndefined(context);
292 } catch (const BasePlatformException &err) {
293 return JSWebAPIErrorFactory::postException(context, exception, err);
295 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.kill().");
296 return JSWebAPIErrorFactory::postException(context, exception, err);
301 JSValueRef JSApplicationManager::setUserAgent(JSContextRef context,
303 JSObjectRef thisObject,
304 size_t argumentCount,
305 const JSValueRef arguments[],
306 JSValueRef* exception)
308 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
311 ArgumentValidator validator(context, argumentCount, arguments);
314 std::string userAgent = validator.toString(0);
317 IPCMessageSupport::sendAsyncMessageToUiProcess(IPCMessageSupport::TIZEN_CHANGE_USERAGENT, userAgent.c_str(), NULL, NULL);
319 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
320 return JSValueMakeUndefined(context);
322 } catch (const BasePlatformException &err) {
323 return JSWebAPIErrorFactory::postException(context, exception, err);
325 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.removeAppInfoEventListener().");
326 return JSWebAPIErrorFactory::postException(context, exception, err);
331 JSValueRef JSApplicationManager::launchAppControl(JSContextRef context,
333 JSObjectRef thisObject,
334 size_t argumentCount,
335 const JSValueRef arguments[],
336 JSValueRef* exception)
338 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
339 TIME_TRACER_ITEM_BEGIN("launchAppControlReply", 0);
340 TIME_TRACER_ITEM_BEGIN("launchAppControl(async)", 0);
341 TIME_TRACER_ITEM_BEGIN("launchAppControlReply(async)", 0);
343 TIME_TRACER_ITEM_BEGIN("launchAppControl(ACE)", 0);
344 AceSecurityStatus status = APPLICATION_CHECK_ACCESS(APPLICATION_FUNCTION_API_LAUNCH_APP_CONTROL);
345 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
346 TIME_TRACER_ITEM_END("launchAppControl(ACE)", 0);
349 IApplicationManagerPtr appmgr;
350 JSContextRef gContext;
351 ApplicationController *controller;
353 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
355 throw TypeMismatchException("No private object.");
357 appmgr = controller->getObject();
358 gContext = controller->getContext();
361 EventApplicationLaunchAppControlPtr event(new EventApplicationLaunchAppControl());
362 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
363 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
365 ArgumentValidator validator(context, argumentCount, arguments);
368 JSObjectRef appControlObj = validator.toObject(0);
369 ApplicationControlPtr appControl = converter->toApplicationControl(appControlObj);
371 throw TypeMismatchException("ApplicationControl's private object is NULL.");
373 event->setAppControl(appControl);
376 std::string id = validator.toString(1, true, "");
380 JSObjectRef successCallback = validator.toFunction(2, true);
382 callbackManager->setOnSuccess(successCallback);
385 JSObjectRef errorCallback = validator.toFunction(3, true);
387 callbackManager->setOnError(errorCallback);
389 callbackManager->setObject(thisObject);
390 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
393 JSCallbackManagerPtr callbackManagerReply;
394 JSObjectRef replyCallbackObj = validator.toCallbackObject(4, true, "onsuccess", "onfailure", NULL);
396 if (replyCallbackObj) {
397 callbackManagerReply = JSCallbackManager::createObject(gContext);
400 JSValueRef onsuccess = JSUtil::getProperty(context, replyCallbackObj, "onsuccess", exception);
401 if (!JSValueIsUndefined(context, onsuccess)) {
402 callbackManagerReply->setOnSuccess(onsuccess);
406 JSValueRef onfailure = JSUtil::getProperty(context, replyCallbackObj, "onfailure", exception);
407 if (!JSValueIsUndefined(context, onfailure)) {
408 callbackManagerReply->setOnError(onfailure);
411 callbackManagerReply->setObject(thisObject);
412 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManagerReply, gContext);
414 EventApplicationLaunchAppControlReplyPtr eventReply(new EventApplicationLaunchAppControlReply());
415 eventReply->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManagerReply));
416 eventReply->setForAsynchronousCall(controller);
418 event->setEventReply(eventReply);
421 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
422 event->setForAsynchronousCall(controller);
424 appmgr->launchAppControl(event);
426 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
427 TIME_TRACER_ITEM_END("launchAppControlReply", 0);
428 return JSValueMakeUndefined(context);
429 } catch (const BasePlatformException &err) {
430 return JSWebAPIErrorFactory::postException(context, exception, err);
432 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.launchAppControl().");
433 return JSWebAPIErrorFactory::postException(context, exception, err);
439 JSValueRef JSApplicationManager::findAppControl(JSContextRef context,
441 JSObjectRef thisObject,
442 size_t argumentCount,
443 const JSValueRef arguments[],
444 JSValueRef* exception)
446 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
447 TIME_TRACER_ITEM_BEGIN("findAppControl(async)", 0);
450 IApplicationManagerPtr appmgr;
451 JSContextRef gContext;
452 ApplicationController *controller;
454 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
456 throw TypeMismatchException("No private object.");
458 appmgr = controller->getObject();
459 gContext = controller->getContext();
461 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
462 EventApplicationFindAppControlPtr event(new EventApplicationFindAppControl());
463 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
465 ArgumentValidator validator(context, argumentCount, arguments);
468 JSObjectRef appControlObj = validator.toObject(0);
470 ApplicationControlPtr appControl = converter->toApplicationControl(appControlObj);
472 throw TypeMismatchException("ApplicationControl's private object is NULL.");
474 event->setAppControl(appControl);
477 JSObjectRef successCallbackObj = validator.toFunction(1);
478 if (successCallbackObj) {
479 callbackManager->setOnSuccess(successCallbackObj);
483 JSObjectRef errorCallback = validator.toFunction(2, true);
485 callbackManager->setOnError(errorCallback);
488 callbackManager->setObject(thisObject);
489 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
491 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
492 event->setForAsynchronousCall(controller);
494 appmgr->findAppControl(event);
495 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
496 return JSValueMakeUndefined(context);
498 } catch (const BasePlatformException &err) {
499 return JSWebAPIErrorFactory::postException(context, exception, err);
501 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.findAppControl().");
502 return JSWebAPIErrorFactory::postException(context, exception, err);
507 JSValueRef JSApplicationManager::getAppsContext(JSContextRef context,
509 JSObjectRef thisObject,
510 size_t argumentCount,
511 const JSValueRef arguments[],
512 JSValueRef* exception)
514 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
515 TIME_TRACER_ITEM_BEGIN("getAppsContext(async)", 0);
518 IApplicationManagerPtr appmgr;
519 JSContextRef gContext;
520 ApplicationController *controller;
522 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
524 throw TypeMismatchException("No private object.");
526 appmgr = controller->getObject();
527 gContext = controller->getContext();
529 EventApplicationGetAppsContextPtr event(new EventApplicationGetAppsContext());
530 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
532 ArgumentValidator validator(context, argumentCount, arguments);
535 JSObjectRef successCallbackObj = validator.toFunction(0);
536 callbackManager->setOnSuccess(successCallbackObj);
539 JSObjectRef errorCallbackObj = validator.toFunction(1, true);
540 if (errorCallbackObj)
541 callbackManager->setOnError(errorCallbackObj);
543 callbackManager->setObject(thisObject);
544 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
546 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
547 event->setForAsynchronousCall(controller);
549 appmgr->getAppsContext(event);
550 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
551 return JSValueMakeUndefined(context);
553 } catch (const BasePlatformException &err) {
554 LoggerE("BasePlatformException");
555 return JSWebAPIErrorFactory::postException(context, exception, err);
558 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppsContext().");
559 return JSWebAPIErrorFactory::postException(context, exception, err);
564 JSValueRef JSApplicationManager::getAppContext(JSContextRef context,
566 JSObjectRef thisObject,
567 size_t argumentCount,
568 const JSValueRef arguments[],
569 JSValueRef* exception)
571 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
574 ArgumentValidator validator(context, argumentCount, arguments);
576 ApplicationContextPtr result = ApplicationManager::getAppContext(validator.toString(0, true, ""));
577 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
579 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
580 return converter->toJSValueRefFromApplicationContext(result);
582 } catch (const BasePlatformException &err) {
583 return JSWebAPIErrorFactory::postException(context, exception, err);
584 } catch (const WrtDeviceApis::Commons::NotFoundException& ex) {
585 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, ex.GetMessage());
587 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppContext().");
588 return JSWebAPIErrorFactory::postException(context, exception, err);
593 JSValueRef JSApplicationManager::getAppsInfo(JSContextRef context,
595 JSObjectRef thisObject,
596 size_t argumentCount,
597 const JSValueRef arguments[],
598 JSValueRef* exception)
600 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
601 TIME_TRACER_ITEM_BEGIN("getAppsInfo(async)", 0);
604 IApplicationManagerPtr appmgr;
605 JSContextRef gContext;
606 ApplicationController *controller;
608 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
610 throw TypeMismatchException("No private object.");
612 appmgr = controller->getObject();
613 gContext = controller->getContext();
615 EventApplicationGetAppsInfoPtr event(new EventApplicationGetAppsInfo());
616 JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(gContext);
618 ArgumentValidator validator(context, argumentCount, arguments);
621 JSObjectRef successCallbackObj = validator.toFunction(0);
622 callbackManager->setOnSuccess(successCallbackObj);
625 JSObjectRef errorCallbackObj = validator.toFunction(1, true);
626 if (errorCallbackObj) {
627 callbackManager->setOnError(errorCallbackObj);
630 callbackManager->setObject(thisObject);
631 ApplicationAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, gContext);
633 event->setPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
634 event->setForAsynchronousCall(controller);
636 appmgr->getAppsInfo(event);
637 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
638 return JSValueMakeUndefined(context);
640 } catch (const BasePlatformException &err) {
641 return JSWebAPIErrorFactory::postException(context, exception, err);
643 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppsInfo().");
644 return JSWebAPIErrorFactory::postException(context, exception, err);
649 JSValueRef JSApplicationManager::getAppInfo(JSContextRef context,
651 JSObjectRef thisObject,
652 size_t argumentCount,
653 const JSValueRef arguments[],
654 JSValueRef* exception)
656 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
659 ApplicationController *controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
661 throw TypeMismatchException("No private object.");
663 JSContextRef gContext = controller->getContext();
665 ArgumentValidator validator(context, argumentCount, arguments);
667 ApplicationInformationPtr result = ApplicationManager::getAppInfo(validator.toString(0, true, ""));
668 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(gContext);
670 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
671 return converter->toJSValueRefFromApplicationInformation(result);
673 } catch (const BasePlatformException &err) {
674 return JSWebAPIErrorFactory::postException(context, exception, err);
675 } catch (const WrtDeviceApis::Commons::NotFoundException& ex) {
676 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, ex.GetMessage());
678 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppInfo().");
679 return JSWebAPIErrorFactory::postException(context, exception, err);
683 JSValueRef JSApplicationManager::addAppInfoEventListener(JSContextRef context,
685 JSObjectRef thisObject,
686 size_t argumentCount,
687 const JSValueRef arguments[],
688 JSValueRef* exception)
690 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
693 IApplicationManagerPtr appmgr;
694 JSContextRef gContext;
695 ApplicationController *controller;
697 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
699 throw TypeMismatchException("No private object.");
701 appmgr = controller->getObject();
702 gContext = controller->getContext();
704 EventApplicationAddAppInfoEventListenerPtr event(new EventApplicationAddAppInfoEventListener());
706 ArgumentValidator validator(context, argumentCount, arguments);
709 JSObjectRef eventCBObj = validator.toCallbackObject(0, false, "oninstalled", "onupdated", "onuninstalled", NULL);
710 JSApplicationEventCallbackManagerPtr callbackManager = JSApplicationEventCallbackManager::createObject(gContext);
712 JSValueRef oninstalled = JSUtil::getProperty(context, eventCBObj, "oninstalled", exception);
713 if (!JSValueIsUndefined(context, oninstalled)) {
714 callbackManager->setOnInstalled(oninstalled);
717 JSValueRef onupdated = JSUtil::getProperty(context, eventCBObj, "onupdated", exception);
718 if (!JSValueIsUndefined(context, onupdated)) {
719 callbackManager->setOnUpdated(onupdated);
722 JSValueRef onuninstalled = JSUtil::getProperty(context, eventCBObj, "onuninstalled", exception);
723 if (!JSValueIsUndefined(context, onuninstalled)) {
724 callbackManager->setOnUninstalled(onuninstalled);
727 EventApplicationAppInfoEventListenerEmitterPtr emitter(new EventApplicationAppInfoEventListenerEmitter());
729 emitter->setEventPrivateData(DPL::StaticPointerCast<IEventPrivateData>(callbackManager));
730 emitter->setListener(controller);
732 event->setEmitter(emitter);
733 event->setForSynchronousCall();
735 appmgr->addAppInfoEventListener(event);
737 if (event->getExceptionCode() != ExceptionCodes::None) {
738 throw UnknownException("Unknown Exception Occured");
741 unsigned long id = event->getWatchId();
743 ApplicationListenerCancellerPtr canceller = ApplicationListenerCancellerPtr(new ApplicationListenerCanceller(gContext, thisObject, id));
744 DeviceAPI::Common::IListenerItemPtr listenerItem = DPL::StaticPointerCast<DeviceAPI::Common::IListenerItem>(canceller);
745 ApplicationListenerManagerSingleton::Instance().registerListener(listenerItem, gContext);
747 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
748 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
749 return converter->toJSValueRef(id);
751 } catch (const BasePlatformException &err) {
752 return JSWebAPIErrorFactory::postException(context, exception, err);
754 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.addAppInfoEventListener().");
755 return JSWebAPIErrorFactory::postException(context, exception, err);
759 JSValueRef JSApplicationManager::removeAppInfoEventListener(JSContextRef context,
761 JSObjectRef thisObject,
762 size_t argumentCount,
763 const JSValueRef arguments[],
764 JSValueRef* exception)
766 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
769 IApplicationManagerPtr appmgr;
770 JSContextRef gContext;
771 ApplicationController *controller;
773 controller = static_cast<ApplicationController*>(JSObjectGetPrivate(thisObject));
775 throw TypeMismatchException("No private object.");
777 appmgr = controller->getObject();
778 gContext = controller->getContext();
780 EventApplicationRemoveAppInfoEventListenerPtr event(new EventApplicationRemoveAppInfoEventListener());
782 ArgumentValidator validator(context, argumentCount, arguments);
785 long watchId = validator.toLong(0);
786 event->setWatchId(watchId);
788 event->setForSynchronousCall();
790 appmgr->removeAppInfoEventListener(event);
792 ApplicationListenerCancellerPtr canceller = ApplicationListenerCancellerPtr(new ApplicationListenerCanceller(gContext, thisObject, watchId));
793 DeviceAPI::Common::IListenerItemPtr listenerItem = DPL::StaticPointerCast<DeviceAPI::Common::IListenerItem>(canceller);
794 ApplicationListenerManagerSingleton::Instance().unregisterListener(listenerItem);
796 if (event->getExceptionCode() == ExceptionCodes::NotFoundException) {
797 throw NotFoundException("Watch id not found");
799 else if (event->getExceptionCode() != ExceptionCodes::None) {
800 throw UnknownException("UnknownException Occured");
803 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
804 return JSValueMakeUndefined(context);
806 } catch (const BasePlatformException &err) {
807 return JSWebAPIErrorFactory::postException(context, exception, err);
809 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.removeAppInfoEventListener().");
810 return JSWebAPIErrorFactory::postException(context, exception, err);
815 JSValueRef JSApplicationManager::getAppCerts(JSContextRef context,
817 JSObjectRef thisObject,
818 size_t argumentCount,
819 const JSValueRef arguments[],
820 JSValueRef* exception)
822 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
824 TIME_TRACER_ITEM_BEGIN("(getAppCerts)ACE", 0);
825 AceSecurityStatus status = APPLICATION_CHECK_ACCESS(APPLICATION_FUNCTION_API_GET_APP_CERTS);
826 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
827 TIME_TRACER_ITEM_END("(getAppCerts)ACE", 0);
830 ArgumentValidator validator(context, argumentCount, arguments);
832 ApplicationCertArrayPtr result = ApplicationManager::getAppCerts(validator.toString(0, true, ""));
833 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
835 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
836 return converter->toJSValueRefFromApplicationCerts(result);
838 } catch (const BasePlatformException &err) {
839 return JSWebAPIErrorFactory::postException(context, exception, err);
840 } catch (const WrtDeviceApis::Commons::NotFoundException& ex) {
841 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, ex.GetMessage());
843 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppCerts().");
844 return JSWebAPIErrorFactory::postException(context, exception, err);
849 JSValueRef JSApplicationManager::getAppSharedURI(JSContextRef context,
851 JSObjectRef thisObject,
852 size_t argumentCount,
853 const JSValueRef arguments[],
854 JSValueRef* exception)
856 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
859 ArgumentValidator validator(context, argumentCount, arguments);
861 std::string result = ApplicationManager::getAppSharedURI(validator.toString(0, true, ""));
862 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
864 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
865 return converter->toJSValueRef(result);
867 } catch (const BasePlatformException &err) {
868 return JSWebAPIErrorFactory::postException(context, exception, err);
869 } catch (const WrtDeviceApis::Commons::NotFoundException& ex) {
870 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, ex.GetMessage());
872 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppSharedURI().");
873 return JSWebAPIErrorFactory::postException(context, exception, err);
877 JSValueRef JSApplicationManager::getAppMetaData(JSContextRef context,
879 JSObjectRef thisObject,
880 size_t argumentCount,
881 const JSValueRef arguments[],
882 JSValueRef* exception)
884 TIME_TRACER_ITEM_BEGIN(__FUNCTION__, 0);
886 TIME_TRACER_ITEM_BEGIN("(getAppMetaData)ACE", 0);
887 AceSecurityStatus status = APPLICATION_CHECK_ACCESS(APPLICATION_FUNCTION_API_GET_APP_META_DATA);
888 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
889 TIME_TRACER_ITEM_END("(getAppMetaData)ACE", 0);
892 ArgumentValidator validator(context, argumentCount, arguments);
894 ApplicationMetaDataArrayPtr result = ApplicationManager::getAppMetaData(validator.toString(0, true, ""));
895 ApplicationConverterFactory::ConverterType converter = ApplicationConverterFactory::getConverter(context);
897 TIME_TRACER_ITEM_END(__FUNCTION__, 0);
898 return converter->toJSValueRefFromApplicationMetaDataArray(result);
900 } catch (const BasePlatformException &err) {
901 return JSWebAPIErrorFactory::postException(context, exception, err);
902 } catch (const WrtDeviceApis::Commons::NotFoundException& ex) {
903 return JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::NOT_FOUND_ERROR, ex.GetMessage());
905 DeviceAPI::Common::UnknownException err("Unknown Error in ApplicationManager.getAppCerts().");
906 return JSWebAPIErrorFactory::postException(context, exception, err);
911 /* scheme-callback using title is not working on iframe. So, use IPC API instead of below API.
912 void JSApplicationManager::setTitleProperty(JSContextRef context, std::string propertyValue){
914 WrtDeviceApis::CommonsJavaScript::Converter converter(context);
916 JSObjectRef windowObject = JSContextGetGlobalObject(context);
919 JSObjectRef documentObject = converter.toJSObjectRef(JSObjectGetProperty(context,
921 ScopedJSStringRef(JSStringCreateWithUTF8CString("document")).get(),
924 JSObjectSetProperty(context,
926 ScopedJSStringRef(JSStringCreateWithUTF8CString("title")).get(),
927 JSValueMakeString(context, JSStringCreateWithUTF8CString("tizen://dummy#$#@##")),
928 kJSPropertyAttributeNone,
931 JSObjectSetProperty(context,
933 ScopedJSStringRef(JSStringCreateWithUTF8CString("title")).get(),
934 JSValueMakeString(context, JSStringCreateWithUTF8CString(propertyValue.c_str())),
935 kJSPropertyAttributeNone,