var validator_ = xwalk.utils.validator;
var types_ = validator_.Types;
-
-var callbackId = 0;
-var callbacks = {};
-
-extension.setMessageListener(function(json) {
- var result = JSON.parse(json);
- var callback = callbacks[result['callbackId']];
- callback(result);
-});
-
-function nextCallbackId() {
- return callbackId++;
-}
+var native_ = new xwalk.utils.NativeManager(extension);
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);
+ var result = native_.callSync(cmd, args);
if (typeof result !== 'object') {
throw new WebAPIException(WebAPIException.UNKNOWN_ERR);
}
- if (result['status'] === 'success') {
- if (result['result']) {
- return result['result'];
+ if (native_.isSuccess(result)) {
+ if (native_.getResultObject(result)) {
+ return native_.getResultObject(result);
}
return true;
- } else if (result['status'] === 'error') {
- var err = result['error'];
- if (err) {
- throw new WebAPIException(err.name, err.message);
+ } else {
+ if (result.error) {
+ throw native_.getErrorObject(result);
}
return false;
}
}
function callNativeWithCallback(cmd, args, callback) {
- if (callback) {
- var id = nextCallbackId();
- args['callbackId'] = id;
- callbacks[id] = callback;
- }
-
- return callNative(cmd, args);
+ return native_.call(cmd, args, callback);
}
function setReadOnlyProperty(obj, n, v) {
try {
var syncResult =
callNativeWithCallback('ApplicationManager_kill', nativeParam, function(result) {
- if (result.status === 'success') {
- if (args.successCallback) {
- args.successCallback();
- }
- }
- if (result.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(result.error);
- }
+ if (native_.isSuccess(result)) {
+ native_.callIfPossible(args.successCallback);
+ } else {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
try {
var syncResult =
callNativeWithCallback('ApplicationManager_launch', nativeParam, function(result) {
- if (result.status === 'success') {
- if (args.successCallback) {
- args.successCallback();
- }
- }
- if (result.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(result.error);
- }
+ if (native_.isSuccess(result)) {
+ native_.callIfPossible(args.successCallback);
+ } else {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
if (args['appControl']) {
nativeParam['appControl'] = args.appControl;
}
+
+ //Try to find application
+ try {
+ if (args['id']) {
+ this.getAppInfo(args.id);
+ }
+ } catch(e) {
+ //If app cannot be found, it should all errorCallback with NotFoundException.
+ setTimeout(function() {
+ native_.callIfPossible(args.errorCallback, e);
+ }, 0);
+ }
+
try {
var syncResult =
callNativeWithCallback('ApplicationManager_launchAppControl', nativeParam, function(ret) {
}
}
else if (ret.status === 'success') {
- if (args.successCallback) {
- args.successCallback();
- }
+ native_.callIfPossible(args.successCallback);
}
else if (ret.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(ret.error);
- }
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(ret));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
try {
var syncResult =
callNativeWithCallback('ApplicationManager_findAppControl', nativeParam, function(result) {
- if (result.status === 'success') {
+ if (native_.isSuccess(result)) {
var returnArray = [];
for (var i = 0; i < result.informationArray.length; i++) {
var appInfo = getAppInfoWithReadOnly(result.informationArray[i]);
}
args.successCallback(returnArray, result.appControl);
- } else if (result.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(result.error);
- }
+ } else if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
try {
var syncResult =
callNativeWithCallback('ApplicationManager_getAppsContext', nativeParam, function(result) {
- if (result.status === 'success') {
+ if (native_.isSuccess(result)) {
var returnArray = [];
for (var index = 0; index < result.contexts.length; index++) {
var appContext = new ApplicationContext();
args.successCallback(returnArray);
}
else if (result.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(result.error);
- }
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
try {
var syncResult =
callNativeWithCallback('ApplicationManager_getAppsInfo', nativeParam, function(result) {
- if (result.status === 'success') {
+ if (native_.isSuccess(result)) {
var returnArray = [];
for (var i = 0; i < result.informationArray.length; i++) {
var appInfo = getAppInfoWithReadOnly(result.informationArray[i]);
}
args.successCallback(returnArray);
}
- else if (result.status === 'error') {
- if (args.errorCallback) {
- args.errorCallback(result.error);
- }
+ else if (native_.isFailure(result)) {
+ native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;
} else if (ret.type === 'onuninstalled') {
args.eventCallback.onuninstalled(ret.id);
}
- delete callbacks[result['callbackId']];
});
} catch (e) {
throw e;