[Package] refactor module 49/170249/2
authorLukasz Bardeli <l.bardeli@samsung.com>
Tue, 20 Feb 2018 08:54:28 +0000 (09:54 +0100)
committerLukasz Bardeli <l.bardeli@samsung.com>
Tue, 20 Feb 2018 08:54:28 +0000 (09:54 +0100)
Remove setMessageListener from package_api.js and start using from utils_api.js

[Verification] Code compiles without error. TCT passrate 100%

Change-Id: I5e5f96a4a836dd85e11c3989233092407d681d28

src/package/package_api.js
src/package/package_instance.cc
src/package/package_instance.h

index fcc9fc47c1bd0fd7c6cd5580d35826465e7b0f51..ce00dbab47e4ec07490375238a2d1e7f99eeabe3 100644 (file)
  *    limitations under the License.
  */
 
-var JSON_ = xwalk.JSON;
 var validator_ = xwalk.utils.validator;
 var types_ = validator_.Types;
-
+var native_ = new xwalk.utils.NativeManager(extension);
 
 var callbackId = 0;
 var callbacks = {};
-var infoEventListenerId = -1;
-
-function invokeListener(result) {
-  if (result.listener === 'infoEvent') {
-    var listener = callbacks[infoEventListenerId];
-    listener(result);
+var listener;
+var PACKAGE_INFO_LISTENER_ID = 'PackageInfoListener';
+var PACKAGE_PROGRESS_LISTENER_ID = 'PackageProgressListener_';
+
+function PackageInfoChangeCallback(result) {
+  if (result.status == 'installed') {
+    listener.oninstalled(new PackageInformation(result.info));
+  } else if (result.status == 'updated') {
+    listener.onupdated(new PackageInformation(result.info));
+  } else if (result.status == 'uninstalled') {
+    listener.onuninstalled(result.id);
   }
 }
 
-extension.setMessageListener(function(json) {
-  var result = JSON_.parse(json);
-
-  if (result.hasOwnProperty('listener')) {
-    setTimeout(function() {
-      invokeListener(result);
-    }, 0);
-  } else {
-    var callback = callbacks[result['callbackId']];
-    setTimeout(function() {
-      callback(result);
-    }, 0);
-  }
-});
-
-function nextCallbackId() {
-  return callbackId++;
-}
-
-function callNative(cmd, args) {
-  var json = {'cmd': cmd, 'args': args};
-  var argjson = JSON_.stringify(json);
-  var resultString = extension.internal.sendSyncMessage(argjson);
-  var result = JSON_.parse(resultString);
-
-  if (typeof result !== 'object') {
-    throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
-  }
-
-  if (result['status'] == 'success') {
-    if (undefined !== result['result']) {
-      return result['result'];
-    }
-    return true;
-  } else if (result['status'] == 'error') {
+function PackageProgressCallback(result) {
+  if (result.status == 'progress') {
+    callbacks[result['progressCallbackId']].progressCallback.onprogress(
+        result.id, result.progress);
+  } else if (result.status == 'complete') {
+    callbacks[result['progressCallbackId']].progressCallback.oncomplete(result.id);
+    delete callbacks[result['progressCallbackId']];
+    native_.removeListener(PACKAGE_PROGRESS_LISTENER_ID + result['progressCallbackId']);
+  } else if (result.status == 'error') {
     var err = result['error'];
     if (err) {
-      throw new WebAPIException(err);
+      callbacks[result['progressCallbackId']].errorCallback(new WebAPIException(err));
+      delete callbacks[result['progressCallbackId']];
+      native_.removeListener(PACKAGE_PROGRESS_LISTENER_ID + result['progressCallbackId']);
     }
-    return false;
   }
 }
 
-function callNativeWithCallback(cmd, args, callback) {
-  if (callback) {
-    var id = nextCallbackId();
-    args['callbackId'] = id;
-    callbacks[id] = callback;
-  }
-
-  return callNative(cmd, args);
+function nextCallbackId() {
+  return callbackId++;
 }
 
 function SetReadOnlyProperty(obj, n, v) {
@@ -88,21 +61,22 @@ function SetReadOnlyProperty(obj, n, v) {
     Object.defineProperty(
         obj, n, {value: v, writable: false, enumerable: true, configurable: true});
   else
-    Object.defineProperty(obj, n, {writable: false, enumerable: true, configurable: true});
+    Object.defineProperty(
+        obj, n, {writable: false, enumerable: true, configurable: true});
 }
 
 function PackageInformation(obj) {
   var lastModified = obj.lastModified;
   obj.lastModified = new Date(lastModified);
 
-  SetReadOnlyProperty(this, 'id', obj.id); // read only property
-  SetReadOnlyProperty(this, 'name', obj.name); // read only property
-  SetReadOnlyProperty(this, 'iconPath', obj.iconPath); // read only property
-  SetReadOnlyProperty(this, 'version', obj.version); // read only property
-  SetReadOnlyProperty(this, 'lastModified', obj.lastModified); // read only property
-  SetReadOnlyProperty(this, 'author', obj.author); // read only property
-  SetReadOnlyProperty(this, 'description', obj.description); // read only property
-  SetReadOnlyProperty(this, 'appIds', obj.appIds); // read only property
+  SetReadOnlyProperty(this, 'id', obj.id);                      // read only property
+  SetReadOnlyProperty(this, 'name', obj.name);                  // read only property
+  SetReadOnlyProperty(this, 'iconPath', obj.iconPath);          // read only property
+  SetReadOnlyProperty(this, 'version', obj.version);            // read only property
+  SetReadOnlyProperty(this, 'lastModified', obj.lastModified);  // read only property
+  SetReadOnlyProperty(this, 'author', obj.author);              // read only property
+  SetReadOnlyProperty(this, 'description', obj.description);    // read only property
+  SetReadOnlyProperty(this, 'appIds', obj.appIds);              // read only property
 
   var totalSize;
   var dataSize;
@@ -112,9 +86,10 @@ function PackageInformation(obj) {
     set: function() {},
     get: function() {
       if (undefined === totalSize) {
-        try {
-          totalSize = callNative('PackageManager_getTotalSize', {id: this.id});
-        } catch (e) {
+        var result = native_.callSync('PackageManager_getTotalSize', {id: this.id});
+        if (native_.isSuccess(result)) {
+          totalSize = native_.getResultObject(result);
+        } else {
           totalSize = -1;
         }
       }
@@ -127,9 +102,10 @@ function PackageInformation(obj) {
     set: function() {},
     get: function() {
       if (undefined === dataSize) {
-        try {
-          dataSize = callNative('PackageManager_getDataSize', {id: this.id});
-        } catch (e) {
+        var result = native_.callSync('PackageManager_getDataSize', {id: this.id});
+        if (native_.isSuccess(result)) {
+          dataSize = native_.getResultObject(result);
+        } else {
           dataSize = -1;
         }
       }
@@ -144,45 +120,41 @@ function PackageManager() {
 
 var PackageManagerInstall = function() {
   var args = validator_.validateArgs(arguments, [
-    {'name' : 'packageFileURI', 'type' : types_.STRING},
-    {'name' : 'progressCallback',
-      'type' : types_.LISTENER,
-      'values' : ['onprogress', 'oncomplete']},
-    {'name' : 'errorCallback', 'type' : types_.FUNCTION, 'optional' : true, 'nullable' : true}
+    {'name': 'packageFileURI', 'type': types_.STRING}, {
+      'name': 'progressCallback',
+      'type': types_.LISTENER,
+      'values': ['onprogress', 'oncomplete']
+    },
+    {
+      'name': 'errorCallback',
+      'type': types_.FUNCTION,
+      'optional': true,
+      'nullable': true
+    }
   ]);
 
+  var progressCallbackId = nextCallbackId();
+  callbacks[progressCallbackId] = args;
+
   var nativeParam = {
-    'packageFileURI': args.packageFileURI
+    'packageFileURI': args.packageFileURI,
+    'progressCallbackId': progressCallbackId
   };
 
-  try {
-    var syncResult = callNativeWithCallback(
-        'PackageManager_install',
-        nativeParam,
-        function(result) {
-          if (result.status == 'progress') {
-            if (args.progressCallback.onprogress) {
-              args.progressCallback.onprogress(result.id, result.progress);
-            }
-          } else if (result.status == 'complete') {
-            if (args.progressCallback.oncomplete) {
-              args.progressCallback.oncomplete(result.id);
-            }
-          } else if (result.status == 'error') {
-            var err = result['error'];
-            if (err) {
-              args.errorCallback(new WebAPIException(err));
-              return;
-            }
-          }
-
-          if (result.status == 'complete' || result.status == 'error') {
-            delete callbacks[result['callbackId']];
-          }
-        });
-  } catch (e) {
-    throw e;
+  var result = native_.call('PackageManager_install', nativeParam, function(result) {
+    if (native_.isFailure(result)) {
+      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+      delete callbacks[result['progressCallbackId']];
+    }
+  });
+
+  if (native_.isFailure(result)) {
+    delete callbacks[progressCallbackId];
+    throw native_.getErrorObject(result);
   }
+
+  native_.addListener(
+      PACKAGE_PROGRESS_LISTENER_ID + progressCallbackId, PackageProgressCallback);
 };
 
 PackageManager.prototype.install = function(packageFileURI, progressCallback) {
@@ -191,47 +163,39 @@ PackageManager.prototype.install = function(packageFileURI, progressCallback) {
 
 var PackageManagerUninstall = function() {
   var args = validator_.validateArgs(arguments, [
-    {'name' : 'id', 'type' : types_.STRING},
-    {'name' : 'progressCallback',
-      'type' : types_.LISTENER,
-      'values' : ['onprogress', 'oncomplete']},
-    {'name' : 'errorCallback', 'type' : types_.FUNCTION, 'optional' : true, 'nullable' : true}
+    {'name': 'id', 'type': types_.STRING}, {
+      'name': 'progressCallback',
+      'type': types_.LISTENER,
+      'values': ['onprogress', 'oncomplete']
+    },
+    {
+      'name': 'errorCallback',
+      'type': types_.FUNCTION,
+      'optional': true,
+      'nullable': true
+    }
   ]);
 
-  var nativeParam = {
-    'id': args.id
-  };
+  var progressCallbackId = nextCallbackId();
+  callbacks[progressCallbackId] = args;
+
+  var nativeParam = {'id': args.id, 'progressCallbackId': progressCallbackId};
 
-  try {
-    var syncResult = callNativeWithCallback(
-        'PackageManager_uninstall',
-        nativeParam,
-        function(result) {
-          if (result.status == 'progress') {
-            if (args.progressCallback.onprogress) {
-              args.progressCallback.onprogress(result.id, result.progress);
-            }
-          } else if (result.status == 'complete') {
-            if (args.progressCallback.oncomplete) {
-              args.progressCallback.oncomplete(result.id);
-            }
-          } else if (result.status == 'error') {
-            var err = result['error'];
-            if (err) {
-              args.errorCallback(new WebAPIException(err));
-              return;
-            }
-          }
-
-          if (result.status == 'complete' || result.status == 'error') {
-            delete callbacks[result['callbackId']];
-          }
-        });
-  } catch (e) {
-    throw e;
+  var result = native_.call('PackageManager_uninstall', nativeParam, function(result) {
+    if (native_.isFailure(result)) {
+      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+      delete callbacks[result['progressCallbackId']];
+    }
+  });
+
+  if (native_.isFailure(result)) {
+    delete callbacks[result['progressCallbackId']];
+    throw native_.getErrorObject(result);
   }
-};
 
+  native_.addListener(
+      PACKAGE_PROGRESS_LISTENER_ID + progressCallbackId, PackageProgressCallback);
+};
 
 PackageManager.prototype.uninstall = function(id, progressCallback) {
   PackageManagerUninstall.apply(this, arguments);
@@ -239,110 +203,82 @@ PackageManager.prototype.uninstall = function(id, progressCallback) {
 
 PackageManager.prototype.getPackagesInfo = function(successCallback, errorCallback) {
   var args = validator_.validateArgs(arguments, [
-    {'name' : 'successCallback', 'type' : types_.FUNCTION},
-    {'name' : 'errorCallback', 'type' : types_.FUNCTION, 'optional' : true, 'nullable' : true}
+    {'name': 'successCallback', 'type': types_.FUNCTION}, {
+      'name': 'errorCallback',
+      'type': types_.FUNCTION,
+      'optional': true,
+      'nullable': true
+    }
   ]);
 
-  var nativeParam = {
-  };
+  var result = native_.call('PackageManager_getPackagesInfo', {}, function(result) {
+    if (native_.isSuccess(result)) {
+      for (var i = 0; i < result.informationArray.length; i++) {
+        result.informationArray[i] = new PackageInformation(result.informationArray[i]);
+      }
+      args.successCallback(result.informationArray);
+    } else if (native_.isFailure(result)) {
+      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+    }
+  });
 
-  try {
-    var syncMsg = callNativeWithCallback(
-        'PackageManager_getPackagesInfo',
-        nativeParam,
-        function(result) {
-          if (result.status == 'success') {
-            for (var i = 0; i < result.informationArray.length; i++) {
-              result.informationArray[i] = new PackageInformation(result.informationArray[i]);
-            }
-            args.successCallback(result.informationArray);
-          } else if (result.status == 'error') {
-            var err = result['error'];
-            if (err) {
-              args.errorCallback(new WebAPIException(err));
-              return;
-            }
-          }
-
-          delete callbacks[result['callbackId']];
-        });
-  } catch (e) {
-    throw e;
+  if (native_.isFailure(result)) {
+    throw native_.getErrorObject(result);
   }
 };
 
 PackageManager.prototype.getPackageInfo = function() {
-  var args = validator_.validateArgs(arguments, [
-    {'name': 'id', 'type': types_.STRING, 'optional' : true, 'nullable' : true}
-  ]);
+  var args = validator_.validateArgs(
+      arguments,
+      [{'name': 'id', 'type': types_.STRING, 'optional': true, 'nullable': true}]);
 
-  var nativeParam = {
-  };
+  var nativeParam = {};
 
   if (args['id']) {
     nativeParam['id'] = args.id;
   }
 
-  try {
-    var syncResult = callNative('PackageManager_getPackageInfo', nativeParam);
-    return new PackageInformation(syncResult);
-  } catch (e) {
-    throw e;
+  var result = native_.callSync('PackageManager_getPackageInfo', nativeParam);
+  if (native_.isSuccess(result)) {
+    return new PackageInformation(native_.getResultObject(result));
+  } else {
+    throw native_.getErrorObject(result);
   }
 };
 
 PackageManager.prototype.setPackageInfoEventListener = function(eventCallback) {
   var args = validator_.validateArgs(
-      arguments,
-      [
-        {'name' : 'eventCallback',
-          'type' : types_.LISTENER,
-          'values' : ['oninstalled', 'onupdated', 'onuninstalled']}
-      ]);
+      arguments, [{
+        'name': 'eventCallback',
+        'type': types_.LISTENER,
+        'values': ['oninstalled', 'onupdated', 'onuninstalled']
+      }]);
 
-  var nativeParam = {
-  };
+  var result = native_.callSync('PackageManager_setPackageInfoEventListener', {});
 
-  try {
-    var syncResult = callNativeWithCallback(
-        'PackageManager_setPackageInfoEventListener',
-        nativeParam,
-        function(result) {
-          if (result.status == 'installed') {
-            args.eventCallback.oninstalled(new PackageInformation(result.info));
-          } else if (result.status == 'updated') {
-            args.eventCallback.onupdated(new PackageInformation(result.info));
-          } else if (result.status == 'uninstalled') {
-            args.eventCallback.onuninstalled(result.id);
-          }
-        });
-
-    if (infoEventListenerId === -1) {
-      infoEventListenerId = nativeParam.callbackId;
-    } else {
-      delete callbacks[infoEventListenerId];
-      infoEventListenerId = nativeParam.callbackId;
-    }
+  if (native_.isFailure(result)) {
+    throw native_.getErrorObject(result);
+  }
 
-  } catch (e) {
-    throw e;
+  if (!native_.isListenerSet(PACKAGE_INFO_LISTENER_ID)) {
+    native_.addListener(PACKAGE_INFO_LISTENER_ID, PackageInfoChangeCallback);
   }
+  listener = args.eventCallback;
 };
 
 PackageManager.prototype.unsetPackageInfoEventListener = function() {
-  var nativeParam = {
-  };
+  var nativeParam = {};
 
-  try {
-    var syncResult = callNative('PackageManager_unsetPackageInfoEventListener', nativeParam);
-    if (syncResult === true) {
-      delete callbacks[infoEventListenerId];
-      infoEventListenerId = -1;
-    }
-  } catch (e) {
-    throw e;
+  var result =
+      native_.callSync('PackageManager_unsetPackageInfoEventListener', nativeParam);
+
+  if (native_.isFailure(result)) {
+    throw native_.getErrorObject(result);
+  }
+
+  if (native_.isListenerSet(PACKAGE_INFO_LISTENER_ID)) {
+    native_.removeListener(PACKAGE_INFO_LISTENER_ID);
   }
 };
 
 exports = new PackageManager();
-
index d0a11470687deffa97a8558d7502d9d540c59b16..a44cbda13902fab0b33e1d0bf5938c9ddb9f0c47 100644 (file)
@@ -51,16 +51,16 @@ typedef enum _PackageThreadWorkType {
 
 class PackageUserData {
  public:
-  PackageUserData(PackageInstance* ins, int id, PackageThreadWorkType task) {
+  PackageUserData(PackageInstance* ins, int id, PackageThreadWorkType task,
+                  int progress_callback_id = 0)
+      : instance_(ins), callback_id_(id), work_(task), progress_callback_id_(progress_callback_id) {
     ScopeLogger();
-    instance_ = ins;
-    callback_id_ = id;
-    work_ = task;
   }
 
   PackageInstance* instance_;
   int callback_id_;
   PackageThreadWorkType work_;
+  int progress_callback_id_;
   picojson::object data_;
 };
 typedef std::shared_ptr<PackageUserData> PackageUserDataPtr;
@@ -85,6 +85,10 @@ static gboolean PackageAfterWork(const PackageUserDataPtr& userData) {
   ScopeLogger();
 
   userData->data_["callbackId"] = picojson::value(static_cast<double>(userData->callback_id_));
+  if (PackageThreadWorkNone == userData->work_) {
+    userData->data_["progressCallbackId"] =
+        picojson::value(static_cast<double>(userData->progress_callback_id_));
+  }
   picojson::value result = picojson::value(userData->data_);
   common::Instance::PostMessage(userData->instance_, result.serialize().c_str());
 
@@ -150,7 +154,7 @@ static void PackageListenerCb(const char* type, const char* package,
   }
 
   picojson::object param;
-  param["listener"] = picojson::value("infoEvent");
+  param["listenerId"] = picojson::value("PackageInfoListener");
 
   LoggerD("Listener type: %d , state: %d, progress: %d", event_type, event_state, progress);
   if (event_type == PACKAGE_MANAGER_EVENT_TYPE_INSTALL &&
@@ -280,7 +284,9 @@ void PackageInstance::InvokeCallback(int request_id, picojson::object& param) {
 
   int callback_id = callbacks_map_[request_id];
 
-  param["callbackId"] = picojson::value(static_cast<double>(callback_id));
+  std::string listenerId = "PackageProgressListener_" + std::to_string(callback_id);
+  param["listenerId"] = picojson::value(listenerId);
+  param["progressCallbackId"] = picojson::value(static_cast<double>(callback_id));
   picojson::value result = picojson::value(param);
   Instance::PostMessage(this, result.serialize().c_str());
 }
@@ -292,14 +298,16 @@ void PackageInstance::PackageManagerInstall(const picojson::value& args, picojso
 
   CHECK_EXIST(args, "callbackId", out)
   CHECK_EXIST(args, "packageFileURI", out)
+  CHECK_EXIST(args, "progressCallbackId", out)
 
   int callback_id = static_cast<int>(args.get("callbackId").get<double>());
   const std::string& packageFileURI =
       convertUriToPath(args.get("packageFileURI").get<std::string>());
+  int progress_callback_id = static_cast<int>(args.get("progressCallbackId").get<double>());
 
   if (!request_) {
     LoggerE("package_manager_request_h is NULL");
-    InvokeErrorCallbackAsync(callback_id,
+    InvokeErrorCallbackAsync(callback_id, progress_callback_id,
                              UnknownException("It is not allowed to install the package by "
                                               "the platform or any other platform error occurs"));
     return;
@@ -311,15 +319,16 @@ void PackageInstance::PackageManagerInstall(const picojson::value& args, picojso
     if (ret == PACKAGE_MANAGER_ERROR_INVALID_PARAMETER) {
       LoggerE("The package is not found at the specified location");
       InvokeErrorCallbackAsync(
-          callback_id, NotFoundException("The package is not found at the specified location"));
+          callback_id, progress_callback_id,
+          NotFoundException("The package is not found at the specified location"));
     } else {
       LoggerE("Failed to install package: %d (%s)", ret, get_error_message(ret));
-      InvokeErrorCallbackAsync(callback_id,
+      InvokeErrorCallbackAsync(callback_id, progress_callback_id,
                                UnknownException("It is not allowed to install the package by "
                                                 "the platform or any other platform error occurs"));
     }
   } else {
-    RegisterCallback(request_id, callback_id);
+    RegisterCallback(request_id, progress_callback_id);
   }
 
   ReportSuccess(out);
@@ -332,13 +341,15 @@ void PackageInstance::PackageManagerUninstall(const picojson::value& args, picoj
 
   CHECK_EXIST(args, "callbackId", out)
   CHECK_EXIST(args, "id", out)
+  CHECK_EXIST(args, "progressCallbackId", out)
 
   int callback_id = static_cast<int>(args.get("callbackId").get<double>());
   const std::string& id = args.get("id").get<std::string>();
+  int progress_callback_id = static_cast<int>(args.get("progressCallbackId").get<double>());
 
   if (!request_) {
     LoggerE("package_manager_request_h is NULL");
-    InvokeErrorCallbackAsync(callback_id,
+    InvokeErrorCallbackAsync(callback_id, progress_callback_id,
                              UnknownException("It is not allowed to install the package by "
                                               "the platform or any other platform error occurs"));
     return;
@@ -350,11 +361,12 @@ void PackageInstance::PackageManagerUninstall(const picojson::value& args, picoj
     if (ret == PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE) {
       LoggerE("The package is not found at the specified location");
       InvokeErrorCallbackAsync(
-          callback_id, NotFoundException("The package is not found at the specified location"));
+          callback_id, progress_callback_id,
+          NotFoundException("The package is not found at the specified location"));
     } else {
       LoggerE("Failed to get package info: %d (%s)", ret, get_error_message(ret));
       InvokeErrorCallbackAsync(
-          callback_id,
+          callback_id, progress_callback_id,
           UnknownException("It is not allowed to get package information by the platform or "
                            "any other platform error occurs"));
     }
@@ -366,11 +378,11 @@ void PackageInstance::PackageManagerUninstall(const picojson::value& args, picoj
     if (ret != PACKAGE_MANAGER_ERROR_NONE) {
       LoggerE("Failed to uninstall package: %d (%s)", ret, get_error_message(ret));
       InvokeErrorCallbackAsync(
-          callback_id,
+          callback_id, progress_callback_id,
           UnknownException("It is not allowed to install the package by the platform or "
                            "any other platform error occurs"));
     } else {
-      RegisterCallback(request_id, callback_id);
+      RegisterCallback(request_id, progress_callback_id);
     }
   }
 
@@ -442,8 +454,6 @@ void PackageInstance::PackageManagerSetpackageinfoeventlistener(const picojson::
 
   CHECK_PRIVILEGE_ACCESS(kPrivilegePackageInfo, &out);
 
-  CHECK_EXIST(args, "callbackId", out)
-
   if (is_package_info_listener_set_) {
     LoggerD("Already set");
     ReportSuccess(out);
@@ -501,12 +511,14 @@ void PackageInstance::PackageManagerUnsetpackageinfoeventlistener(const picojson
   ReportSuccess(out);
 }
 
-void PackageInstance::InvokeErrorCallbackAsync(int callback_id, const PlatformException& ex) {
+void PackageInstance::InvokeErrorCallbackAsync(int callback_id, int progress_callback_id,
+                                               const PlatformException& ex) {
   ScopeLogger();
 
   picojson::object param;
   LogAndReportError(ex, param);
-  PackageUserDataPtr userData(new PackageUserData(this, callback_id, PackageThreadWorkNone));
+  PackageUserDataPtr userData(
+      new PackageUserData(this, callback_id, PackageThreadWorkNone, progress_callback_id));
   userData->data_ = param;
   TaskQueue::GetInstance().Async<PackageUserData>(PackageAfterWork, userData);
 }
index 3ae7163ba7d529c245feec025c5b5e0e36d07668..772d4cb1a007fa73a0caa2d8410e7c8793f98cad 100644 (file)
@@ -43,7 +43,8 @@ class PackageInstance : public common::ParsedInstance {
   std::map<int, int> callbacks_map_;  // <request_id, callbackId>
 
   void RegisterCallback(int request_id, int callback_id);
-  void InvokeErrorCallbackAsync(int callback_id, const common::PlatformException& ex);
+  void InvokeErrorCallbackAsync(int callback_id, int progress_callback_id,
+                                const common::PlatformException& ex);
 
   void PackageManagerInstall(const picojson::value& args, picojson::object& out);
   void PackageManagerUninstall(const picojson::value& args, picojson::object& out);