[Cordova File-Transfer] Synchronously checking access to file 85/176085/2
authorPawel Kaczmarczyk <p.kaczmarczy@samsung.com>
Mon, 16 Apr 2018 10:40:02 +0000 (12:40 +0200)
committerPawel Kaczmarczyk <p.kaczmarczy@samsung.com>
Tue, 24 Apr 2018 08:58:20 +0000 (08:58 +0000)
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 <p.kaczmarczy@samsung.com>
src/lib/plugins/cordova-plugin-file-transfer/tizen/FileTransfer.js

index 692e75e..b503eed 100755 (executable)
@@ -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)));