From 7684a1985ff891173702cb299bbbb1376a027d31 Mon Sep 17 00:00:00 2001 From: Pawel Kaczmarczyk Date: Mon, 16 Apr 2018 12:40:02 +0200 Subject: [PATCH] [Cordova File-Transfer] Synchronously checking access to file ACR: http://suprem.sec.samsung.net/jira/browse/TWDAPI-187 [Verification] Tested in Chromium console, tct-file-transfer-cordova-tests passrate: 100% This change requires webapi-plugins with: https://review.tizen.org/gerrit/167437/ Change-Id: Ia6e5739b7259be845ab2775cc62e02aa3242213a Signed-off-by: Pawel Kaczmarczyk --- .../tizen/FileTransfer.js | 96 ++++++++++++---------- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/src/lib/plugins/cordova-plugin-file-transfer/tizen/FileTransfer.js b/src/lib/plugins/cordova-plugin-file-transfer/tizen/FileTransfer.js index 692e75e..b503eed 100755 --- a/src/lib/plugins/cordova-plugin-file-transfer/tizen/FileTransfer.js +++ b/src/lib/plugins/cordova-plugin-file-transfer/tizen/FileTransfer.js @@ -49,6 +49,15 @@ function TizenErrCodeToErrCode(err_code) { } } +function FileErrorCodeToErrCode(err_code) { + switch(err_code) { + case FileError.SECURITY_ERR: + return FileTransferError.ABORT_ERR; + default: + return FileError.FILE_NOT_FOUND_ERR; + } +} + function checkURL(url) { return url.indexOf(' ') === -1; } @@ -160,8 +169,8 @@ exports = { } } - function errorCB() { - fail(FileTransferError.FILE_NOT_FOUND_ERR); + function errorCB(error) { + fail(FileErrorCodeToErrCode(error.code)); } resolveLocalFileSystemURL(filePath, successCB, errorCB); @@ -207,49 +216,52 @@ exports = { xhr.addEventListener('load', function (evt) { if ((xhr.status === 200 || xhr.status === 0) && xhr.response) { + try { + tizen.filesystem.resolve(dirPath, function (dir) { + if (dir.isFile) { + fail(FileTransferError.FILE_NOT_FOUND_ERR); + return; + } - tizen.filesystem.resolve(dirPath, function (dir) { - if (dir.isFile) { - fail(FileTransferError.FILE_NOT_FOUND_ERR); - return; - } - - function writeFile(dir) { - var file = dir.createFile(fileName); - - file.openStream( - 'rw', - function (stream) { - stream.writeBytes(Array.prototype.slice.call(new Uint8Array(xhr.response))); - - delete downloads[id]; + function writeFile(dir) { + var file = dir.createFile(fileName); + + file.openStream( + 'rw', + function (stream) { + stream.writeBytes(Array.prototype.slice.call(new Uint8Array(xhr.response))); + + delete downloads[id]; + + resolveLocalFileSystemURL( + filePath, + function (fileEntry) { + fileEntry.filesystemName = fileEntry.filesystem.name; + successCallback(fileEntry); + }, function (err) { + fail(TizenErrCodeToErrCode(err.code)); + }); + }, function (err) { + fail(TizenErrCodeToErrCode(err.code)); + } + ); + } - resolveLocalFileSystemURL( - filePath, - function (fileEntry) { - fileEntry.filesystemName = fileEntry.filesystem.name; - successCallback(fileEntry); - }, function (err) { - fail(TizenErrCodeToErrCode(err.code)); - }); + dir.deleteFile( + filePath, + function() { + writeFile(dir); }, function (err) { - fail(TizenErrCodeToErrCode(err.code)); - } - ); - } - - dir.deleteFile( - filePath, - function() { - writeFile(dir); - }, function (err) { - writeFile(dir); - }); - - }, function (err) { - fail(TizenErrCodeToErrCode(err.code)); - }, - 'rw'); + writeFile(dir); + }); + + }, function (err) { + fail(TizenErrCodeToErrCode(err.code)); + }, + 'rw'); + } catch(e) { + fail(FileTransferError.ABORT_ERR); + } } else if (xhr.status === 404) { fail(FileTransferError.INVALID_URL_ERR, String.fromCharCode.apply(null, new Uint8Array(xhr.response))); -- 2.7.4