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.
18 #include <JSWebAPIError.h>
19 #include <PlatformException.h>
22 #include "DownloadCallback.h"
24 using namespace WrtDeviceApis::Commons;
25 using namespace WrtDeviceApis::CommonsJavaScript;
27 using namespace DeviceAPI::Common;
32 DownloadCallback::DownloadCallback(JSContextRef globalCtx, JSObjectRef object)
34 mCallbackUserData = new MultiCallbackUserData(globalCtx);
37 JSStringRef onprogress = JSStringCreateWithUTF8CString("onprogress");
38 bool has_onprogress = JSObjectHasProperty(globalCtx, object, onprogress);
39 JSStringRelease(onprogress);
41 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onprogress"));
42 if( JSObjectIsFunction(globalCtx, cbObj) ){
43 mCallbackUserData->setCallback("onprogress", cbObj);
45 throw TypeMismatchException("onprogress is not a callback function.");
50 JSStringRef onpaused = JSStringCreateWithUTF8CString("onpaused");
51 bool has_onpaused = JSObjectHasProperty(globalCtx, object, onpaused);
52 JSStringRelease(onpaused);
54 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onpaused"));
55 if( JSObjectIsFunction(globalCtx, cbObj) ){
56 mCallbackUserData->setCallback("onpaused", cbObj);
58 throw TypeMismatchException("onpaused is not a callback function.");
63 JSStringRef oncanceled = JSStringCreateWithUTF8CString("oncanceled");
64 bool has_oncanceled = JSObjectHasProperty(globalCtx, object, oncanceled);
65 JSStringRelease(oncanceled);
67 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "oncanceled"));
68 if( JSObjectIsFunction(globalCtx, cbObj) ){
69 mCallbackUserData->setCallback("oncanceled", cbObj);
71 throw TypeMismatchException("oncanceled is not a callback function.");
76 JSStringRef oncompleted = JSStringCreateWithUTF8CString("oncompleted");
77 bool has_oncompleted = JSObjectHasProperty(globalCtx, object, oncompleted);
78 JSStringRelease(oncompleted);
79 if (has_oncompleted) {
80 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "oncompleted"));
81 if( JSObjectIsFunction(globalCtx, cbObj) ){
82 mCallbackUserData->setCallback("oncompleted", cbObj);
84 throw TypeMismatchException("oncompleted is not a callback function.");
89 JSStringRef onfailed = JSStringCreateWithUTF8CString("onfailed");
90 bool has_onfailed = JSObjectHasProperty(globalCtx, object, onfailed);
91 JSStringRelease(onfailed);
93 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onfailed"));
94 if( JSObjectIsFunction(globalCtx, cbObj) ){
95 mCallbackUserData->setCallback("onfailed", cbObj);
97 throw TypeMismatchException("onfailed is not a callback function.");
103 DownloadCallback::~DownloadCallback() {
104 if (mCallbackUserData)
105 delete mCallbackUserData;
108 void DownloadCallback::onprogress(long downloadId, unsigned long long int receivedSize, unsigned long long int totalSize)
110 JSContextRef context = mCallbackUserData->getContext();
112 JSValueRef objParam[3] = {
113 JSUtil::toJSValueRef(context, downloadId),
114 JSUtil::toJSValueRef(context, (long)receivedSize),
115 JSUtil::toJSValueRef(context, (long)totalSize)
117 mCallbackUserData->invokeCallback("onprogress", 3, objParam);
120 void DownloadCallback::onpaused(long downloadId)
122 JSContextRef context = mCallbackUserData->getContext();
123 mCallbackUserData->invokeCallback("onpaused", JSUtil::toJSValueRef(context, downloadId));
126 void DownloadCallback::oncanceled(long downloadId)
128 JSContextRef context = mCallbackUserData->getContext();
129 mCallbackUserData->invokeCallback("oncanceled", JSUtil::toJSValueRef(context, downloadId));
132 void DownloadCallback::oncompleted(long downloadId, std::string fullPath)
134 JSContextRef context = mCallbackUserData->getContext();
136 JSValueRef objParam[2] = {
137 JSUtil::toJSValueRef(context, downloadId),
138 JSUtil::toJSValueRef(context, fullPath)
140 mCallbackUserData->invokeCallback("oncompleted", 2, objParam);
143 void DownloadCallback::onfailed(long downloadId, BasePlatformException &error)
145 JSContextRef context = mCallbackUserData->getContext();
147 JSValueRef objParam[2] = {
148 JSUtil::toJSValueRef(context, downloadId),
149 JSWebAPIError::makeJSWebAPIError(context, error)
151 mCallbackUserData->invokeCallback("onfailed", 2, objParam);