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