Updated Branches: refs/heads/dev 6a2565dcb -> 73a8604dd
[CB-2901] [BlackBerry10] Automatically unsandbox filesystem if path is not in app sandbox Reviewed by Bryan Higgins <[email protected]> Tested by Tracy Li <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/commit/73a8604d Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/tree/73a8604d Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/diff/73a8604d Branch: refs/heads/dev Commit: 73a8604dd4e7ef7700adaef723babcdf550ecf34 Parents: 6a2565d Author: Hasan Ahmad <[email protected]> Authored: Mon Jul 8 12:35:29 2013 -0400 Committer: Bryan Higgins <[email protected]> Committed: Fri Sep 6 09:00:35 2013 -0400 ---------------------------------------------------------------------- plugin.xml | 41 +++++++------ src/blackberry10/index.js | 10 +++ www/blackberry10/DirectoryEntry.js | 71 +++++++++++++++++++--- www/blackberry10/DirectoryReader.js | 19 ++++-- www/blackberry10/Entry.js | 12 +++- www/blackberry10/File.js | 54 ++++++++++++++++ www/blackberry10/FileEntry.js | 10 +-- www/blackberry10/FileReader.js | 2 +- www/blackberry10/FileWriter.js | 2 +- www/blackberry10/fileUtils.js | 19 +++--- www/blackberry10/requestFileSystem.js | 8 ++- www/blackberry10/resolveLocalFileSystemURI.js | 54 ++++++++-------- 12 files changed, 227 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/plugin.xml ---------------------------------------------------------------------- diff --git a/plugin.xml b/plugin.xml index d378c36..f08ca60 100644 --- a/plugin.xml +++ b/plugin.xml @@ -12,14 +12,14 @@ xmlns:android="http://schemas.android.com/apk/res/android" <js-module src="www/DirectoryEntry.js" name="DirectoryEntry"> <clobbers target="window.DirectoryEntry" /> </js-module> - + <js-module src="www/DirectoryReader.js" name="DirectoryReader"> <clobbers target="window.DirectoryReader" /> - </js-module> - + </js-module> + <js-module src="www/Entry.js" name="Entry"> <clobbers target="window.Entry" /> - </js-module> + </js-module> <js-module src="www/File.js" name="File"> <clobbers target="window.File" /> @@ -40,11 +40,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" <js-module src="www/FileSystem.js" name="FileSystem"> <clobbers target="window.FileSystem" /> </js-module> - + <js-module src="www/FileUploadOptions.js" name="FileUploadOptions"> <clobbers target="window.FileUploadOptions" /> </js-module> - + <js-module src="www/FileUploadResult.js" name="FileUploadResult"> <clobbers target="window.FileUploadResult" /> </js-module> @@ -52,15 +52,15 @@ xmlns:android="http://schemas.android.com/apk/res/android" <js-module src="www/FileWriter.js" name="FileWriter"> <clobbers target="window.FileWriter" /> </js-module> - + <js-module src="www/Flags.js" name="Flags"> <clobbers target="window.Flags" /> - </js-module> + </js-module> <js-module src="www/LocalFileSystem.js" name="LocalFileSystem"> <clobbers target="window.LocalFileSystem" /> </js-module> - + <js-module src="www/Metadata.js" name="Metadata"> <clobbers target="window.Metadata" /> </js-module> @@ -72,11 +72,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" <js-module src="www/requestFileSystem.js" name="requestFileSystem"> <clobbers target="window.requestFileSystem" /> </js-module> - + <js-module src="www/resolveLocalFileSystemURI.js" name="resolveLocalFileSystemURI"> <clobbers target="window.resolveLocalFileSystemURI" /> </js-module> - + <!-- android --> <platform name="android"> <config-file target="res/xml/config.xml" parent="/*"> @@ -96,25 +96,25 @@ xmlns:android="http://schemas.android.com/apk/res/android" <source-file src="src/android/TypeMismatchException.java" target-dir="src/org/apache/cordova/file" /> <source-file src="src/android/FileUtils.java" target-dir="src/org/apache/cordova/file" /> </platform> - + <!-- ios --> - <platform name="ios"> + <platform name="ios"> <config-file target="config.xml" parent="/*"> <feature name="File"> - <param name="ios-package" value="CDVFile" /> + <param name="ios-package" value="CDVFile" /> </feature> </config-file> <header-file src="src/ios/CDVFile.h" /> <source-file src="src/ios/CDVFile.m" /> - + <!-- ios specific file apis --> <js-module src="www/ios/Entry.js" name="Entry1"> <merges target="window.Entry" /> </js-module> - + <framework src="AssetsLibrary.framework" /> <framework src="MobileCoreServices.framework" /> - </platform> + </platform> <!-- wp7 --> <platform name="wp7"> @@ -164,7 +164,10 @@ xmlns:android="http://schemas.android.com/apk/res/android" </js-module> <js-module src="www/blackberry10/Entry.js" name="BB10Entry"> <clobbers target="window.Entry" /> - </js-module> + </js-module> + <js-module src="www/blackberry10/File.js" name="BB10File"> + <clobbers target="window.File" /> + </js-module> <js-module src="www/blackberry10/FileEntry.js" name="BB10FileEntry"> <clobbers target="window.FileEntry" /> </js-module> @@ -183,6 +186,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" <js-module src="www/blackberry10/resolveLocalFileSystemURI.js" name="BB10resolveLocalFileSystemURI"> <clobbers target="window.resolveLocalFileSystemURI" /> </js-module> + + <source-file src="src/blackberry10/index.js"></source-file> </platform> <!-- windows8 --> http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/src/blackberry10/index.js ---------------------------------------------------------------------- diff --git a/src/blackberry10/index.js b/src/blackberry10/index.js new file mode 100644 index 0000000..914d966 --- /dev/null +++ b/src/blackberry10/index.js @@ -0,0 +1,10 @@ +module.exports = { + setSandbox : function (success, fail, args, env) { + require("lib/webview").setSandbox(JSON.parse(decodeURIComponent(args[0]))); + new PluginResult(args, env).noResult(false); + }, + + isSandboxed : function (success, fail, args, env) { + new PluginResult(args, env).ok(require("lib/webview").getSandbox() === "1"); + } +}; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/DirectoryEntry.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/DirectoryEntry.js b/www/blackberry10/DirectoryEntry.js index 15289a7..295f88e 100644 --- a/www/blackberry10/DirectoryEntry.js +++ b/www/blackberry10/DirectoryEntry.js @@ -25,21 +25,52 @@ var argscheck = require('cordova/argscheck'), FileError = require('./FileError'), DirectoryReader = require('./BB10DirectoryReader'), fileUtils = require('./BB10Utils'), - DirectoryEntry = function (name, fullPath) { - DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath); + DirectoryEntry = function (name, fullPath, fileSystem) { + DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath, fileSystem); }; utils.extend(DirectoryEntry, Entry); +function err(sandboxState, errorCallback) { + return function (e) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); + errorCallback(e); + } +}; + DirectoryEntry.prototype.createReader = function () { return new DirectoryReader(this.fullPath); }; DirectoryEntry.prototype.getDirectory = function (path, options, successCallback, errorCallback) { + var sandboxState, + currentPath = this.nativeEntry.fullPath; + + cordova.exec(function (sandboxed) { + sandboxState = sandboxed; + }, function (e) { + console.log("[ERROR]: Could not retrieve sandbox state ", e); + }, "org.apache.cordova.core.file", "isSandboxed"); + argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments); - this.nativeEntry.getDirectory(path, options, function (entry) { - successCallback(fileUtils.createEntry(entry)); - }, errorCallback); + + if (fileUtils.isOutsideSandbox(path)) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]); + window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); + fs.root.getDirectory(currentPath + '/' + path, options, function (entry) { + successCallback(fileUtils.createEntry(entry)); + }, err(sandboxState, errorCallback)); + }, err(sandboxState, errorCallback)); + } else { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]); + window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT : window.TEMPORARY, this.filesystem._size, function (fs) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); + fs.root.getDirectory(currentPath + '/' + path, options, function (entry) { + successCallback(fileUtils.createEntry(entry)); + }, err(sandboxState, errorCallback)); + }, err(sandboxState, errorCallback)); + } }; DirectoryEntry.prototype.removeRecursively = function (successCallback, errorCallback) { @@ -48,10 +79,34 @@ DirectoryEntry.prototype.removeRecursively = function (successCallback, errorCal }; DirectoryEntry.prototype.getFile = function (path, options, successCallback, errorCallback) { + var sandboxState, + currentPath = this.nativeEntry.fullPath; + + cordova.exec(function (sandboxed) { + sandboxState = sandboxed; + }, function (e) { + console.log("[ERROR]: Could not retrieve sandbox state ", e); + }, "org.apache.cordova.core.file", "isSandboxed"); + argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments); - this.nativeEntry.getFile(path, options, function (entry) { - successCallback(fileUtils.createEntry(entry)); - }, errorCallback); + + if (fileUtils.isOutsideSandbox(path)) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]); + window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); + fs.root.getFile(currentPath + '/' + path, options, function (entry) { + successCallback(fileUtils.createEntry(entry)); + }, err(sandboxState, errorCallback)); + }, err(sandboxState, errorCallback)); + } else { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]); + window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT: window.TEMPORARY, this.filesystem._size, function (fs) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); + fs.root.getFile(currentPath + '/' + path, options, function (entry) { + successCallback(fileUtils.createEntry(entry)); + }, err(sandboxState, errorCallback)); + }, err(sandboxState, errorCallback)); + } }; module.exports = DirectoryEntry; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/DirectoryReader.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/DirectoryReader.js b/www/blackberry10/DirectoryReader.js index a188545..6aa3d73 100644 --- a/www/blackberry10/DirectoryReader.js +++ b/www/blackberry10/DirectoryReader.js @@ -24,10 +24,12 @@ var FileError = require('./FileError'), function DirectoryReader(path) { this.path = path; + this.nativeReader = null; } DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) { - var win = typeof successCallback !== 'function' ? null : function(result) { + var self = this, + win = typeof successCallback !== 'function' ? null : function(result) { var retVal = []; for (var i=0; i<result.length; i++) { retVal.push(fileUtils.createEntry(result[i])); @@ -37,11 +39,16 @@ DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) fail = typeof errorCallback !== 'function' ? null : function(code) { errorCallback(new FileError(code)); }; - fileUtils.getEntryForURI(this.path, function (entry) { - entry.nativeEntry.createReader().readEntries(win, fail); - }, function () { - fail(FileError.NOT_FOUND_ERR); - }); + if (this.nativeReader) { + this.nativeReader.readEntries(win, fail); + } else { + resolveLocalFileSystemURI("filesystem:local:///persistent/" + this.path, function (entry) { + self.nativeReader = entry.nativeEntry.createReader() + self.nativeReader.readEntries(win, fail); + }, function () { + fail(FileError.NOT_FOUND_ERR); + }); + } }; module.exports = DirectoryReader; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/Entry.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/Entry.js b/www/blackberry10/Entry.js index 6bad13c..d432bfd 100644 --- a/www/blackberry10/Entry.js +++ b/www/blackberry10/Entry.js @@ -25,10 +25,14 @@ var argscheck = require('cordova/argscheck'), fileUtils = require('./BB10Utils'); function Entry(isFile, isDirectory, name, fullPath, fileSystem) { + var strippedPath; + if (fullPath && fullPath.charAt(fullPath.length - 1) === '/') { + strippedPath = fullPath.slice(0, -1); + } this.isFile = !!isFile; this.isDirectory = !!isDirectory; this.name = name || ''; - this.fullPath = fullPath || ''; + this.fullPath = typeof strippedPath !== "undefined" ? strippedPath : (fullPath || ''); this.filesystem = fileSystem || null; } @@ -88,7 +92,11 @@ Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallbac }; Entry.prototype.toURL = function() { - return this.fullPath; + var nativeURI = this.nativeEntry.toURL(); + if (nativeURI.charAt(nativeURI.length - 1) === '/') { + return nativeURI.slice(0, -1); + } + return nativeURI; }; Entry.prototype.toURI = function(mimeType) { http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/File.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/File.js b/www/blackberry10/File.js new file mode 100644 index 0000000..0ed39fd --- /dev/null +++ b/www/blackberry10/File.js @@ -0,0 +1,54 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +/** + * Constructor. + * name {DOMString} name of the file, without path information + * fullPath {DOMString} the full path of the file, including the name + * type {DOMString} mime type + * lastModifiedDate {Date} last modified date + * size {Number} size of the file in bytes + */ + +var File = function(name, fullPath, type, lastModifiedDate, size){ + this.name = name || ''; + this.fullPath = fullPath || null; + this.type = type || null; + this.lastModifiedDate = lastModifiedDate || null; + this.size = size || 0; + + // These store the absolute start and end for slicing the file. + this.start = 0; + this.end = this.size; +}; + +/** + * Returns a "slice" of the file. + * Slices of slices are supported. + * start {Number} The index at which to start the slice (inclusive). + * end {Number} The index at which to end the slice (exclusive). + */ +File.prototype.slice = function(start, end) { + return fileUtils.createFile(this.nativeFile.slice(start, end)); +}; + + +module.exports = File; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/FileEntry.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/FileEntry.js b/www/blackberry10/FileEntry.js index 55927cd..b358d71 100644 --- a/www/blackberry10/FileEntry.js +++ b/www/blackberry10/FileEntry.js @@ -22,10 +22,11 @@ var utils = require('cordova/utils'), Entry = require('./BB10Entry'), FileWriter = require('./BB10FileWriter'), - File = require('./File'), + File = require('./BB10File'), + fileUtils = require('./BB10Utils'), FileError = require('./FileError'), - FileEntry = function (name, fullPath) { - FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]); + FileEntry = function (name, fullPath, fileSystem) { + FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath, fileSystem]); }; utils.extend(FileEntry, Entry); @@ -39,7 +40,8 @@ FileEntry.prototype.createWriter = function(successCallback, errorCallback) { FileEntry.prototype.file = function(successCallback, errorCallback) { var fullPath = this.fullPath, success = function (file) { - successCallback(new File(file.name, fullPath, file.type, file.lastModifiedDate, file.size)); + file.fullPath = fullPath; + successCallback(fileUtils.createFile(file)); }; this.nativeEntry.file(success, errorCallback); }; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/FileReader.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/FileReader.js b/www/blackberry10/FileReader.js index 8210137..6e3a10c 100644 --- a/www/blackberry10/FileReader.js +++ b/www/blackberry10/FileReader.js @@ -60,7 +60,7 @@ FileReader.prototype.abort = function() { function read(method, context, file, encoding) { if (file.fullPath) { - fileUtils.getEntryForURI(file.fullPath, function (entry) { + resolveLocalFileSystemURI("filesystem:local:///persistent/" + file.fullPath, function (entry) { entry.nativeEntry.file(function (nativeFile) { context.nativeReader[method].call(context.nativeReader, nativeFile, encoding); }, context.onerror); http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/FileWriter.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/FileWriter.js b/www/blackberry10/FileWriter.js index 4c7521d..8992943 100644 --- a/www/blackberry10/FileWriter.js +++ b/www/blackberry10/FileWriter.js @@ -29,7 +29,7 @@ function FileWriter (file) { this.file = file; this.events = {}; this.pending = []; - fileUtils.getEntryForURI(file.fullPath, function (entry) { + resolveLocalFileSystemURI("filesystem:local:///persistent/" + file.fullPath, function (entry) { entry.nativeEntry.createWriter(function (writer) { var i, event; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/fileUtils.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/fileUtils.js b/www/blackberry10/fileUtils.js index e26e4e9..6f803b7 100644 --- a/www/blackberry10/fileUtils.js +++ b/www/blackberry10/fileUtils.js @@ -24,24 +24,29 @@ function convertPath(url) { } module.exports = { - createEntry: function (entry) { var cordovaEntry; if (entry.isFile) { - cordovaEntry = new window.FileEntry(entry.name, convertPath(entry.toURL())); + cordovaEntry = new window.FileEntry(entry.name, entry.fullPath, entry.filesystem); } else { - cordovaEntry = new window.DirectoryEntry(entry.name, convertPath(entry.toURL())); + cordovaEntry = new window.DirectoryEntry(entry.name, entry.fullPath, entry.filesystem); } cordovaEntry.nativeEntry = entry; return cordovaEntry; }, - getEntryForURI: function (uri, success, fail) { - //TODO: account for local vs file system - window.resolveLocalFileSystemURI(uri, success, fail); + createFile: function (file) { + var cordovaFile = new File(file.name, file.fullPath, file.type, file.lastModifiedDate, file.size); + cordovaFile.nativeFile = file; + cordovaFile.fullPath = file.name; + return cordovaFile; }, getFileSystemName: function (fs) { - return (fs.name.indexOf('Persistent') != -1) ? 'persistent' : 'temporary'; + return ((fs.name.indexOf('Persistent') != -1) || (fs.name === "persistent")) ? 'persistent' : 'temporary'; + }, + + isOutsideSandbox: function (path) { + return (path.indexOf("accounts/1000/") === 0 || path.indexOf("/accounts/1000/") === 0); } }; http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/requestFileSystem.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/requestFileSystem.js b/www/blackberry10/requestFileSystem.js index bb97564..bd07d08 100644 --- a/www/blackberry10/requestFileSystem.js +++ b/www/blackberry10/requestFileSystem.js @@ -24,13 +24,19 @@ var fileUtils = require('./BB10Utils'), FileSystem = require('./BB10FileSystem'); module.exports = function (type, size, success, fail) { + var cordovaFs, + cordovaFsRoot; if (size >= 1000000000000000) { fail(new FileError(FileError.QUOTA_EXCEEDED_ERR)); } else if (type !== 1 && type !== 0) { fail(new FileError(FileError.SYNTAX_ERR)); } else { window.webkitRequestFileSystem(type, size, function (fs) { - success((new FileSystem(fileUtils.getFileSystemName(fs), fileUtils.createEntry(fs.root)))); + cordovaFsRoot = fileUtils.createEntry(fs.root); + cordovaFs = new FileSystem(fileUtils.getFileSystemName(fs), cordovaFsRoot); + cordovaFsRoot.filesystem = cordovaFs; + cordovaFs._size = size; + success(cordovaFs); }, function (error) { fail(new FileError(error)); }); http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/73a8604d/www/blackberry10/resolveLocalFileSystemURI.js ---------------------------------------------------------------------- diff --git a/www/blackberry10/resolveLocalFileSystemURI.js b/www/blackberry10/resolveLocalFileSystemURI.js index 02e9e6c..06c1f73 100644 --- a/www/blackberry10/resolveLocalFileSystemURI.js +++ b/www/blackberry10/resolveLocalFileSystemURI.js @@ -22,34 +22,34 @@ var fileUtils = require('./BB10Utils'), FileError = require('./FileError'); +function stripURI(uri) { + var rmFsLocal = uri.substring("filesystem:local:///".length); + return rmFsLocal.substring(rmFsLocal.indexOf('/') + 1); +} + module.exports = function (uri, success, fail) { - var type, - path, - paramPath; - if (!uri || uri.indexOf("/") === 0) { - fail(new FileError(FileError.ENCODING_ERR)); + var sandboxState, + decodedURI = decodeURI(uri); + + cordova.exec(function (sandboxed) { + sandboxState = sandboxed; + }, function (e) { + console.log("[ERROR]: Could not retrieve sandbox state ", e); + }, "org.apache.cordova.core.file", "isSandboxed"); + + if (fileUtils.isOutsideSandbox(stripURI(decodedURI))) { + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]); } else { - type = uri.indexOf("persistent") === -1 ? 0 : 1; - path = uri.substring(type === 1 ? uri.indexOf("persistent") + 11 : uri.indexOf("temporary") + 10); - if (path.substring(0,1) == "/") { - path = path.substring(1); - } - paramPath = path.indexOf("?"); - if (paramPath > -1) { - path = path.substring(0, paramPath); - } - window.webkitRequestFileSystem(type, 25*1024*1024, function (fs) { - if (path === "") { - success(fileUtils.createEntry(fs.root)); - } else { - fs.root.getDirectory(path, {}, function (entry) { - success(fileUtils.createEntry(entry)); - }, function () { - fs.root.getFile(path, {}, function (entry) { - success(fileUtils.createEntry(entry)); - }, fail); - }); - } - }, fail); + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]); } + window.webkitResolveLocalFileSystemURL(decodedURI, function (entry) { + success(fileUtils.createEntry(entry)); + }, function (e) { + window.webkitResolveLocalFileSystemURL(decodedURI + '/', function (entry) { + success(fileUtils.createEntry(entry)); + }, function (e) { + fail(e); + }); + }); + cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]); };
