Index: ui/file_manager/zip_archiver/unpacker/js/volume.js |
diff --git a/ui/file_manager/zip_archiver/unpacker/js/volume.js b/ui/file_manager/zip_archiver/unpacker/js/volume.js |
deleted file mode 100644 |
index 64fae35b99c899c0f811796be69d745fee9bc7bd..0000000000000000000000000000000000000000 |
--- a/ui/file_manager/zip_archiver/unpacker/js/volume.js |
+++ /dev/null |
@@ -1,346 +0,0 @@ |
-// Copyright 2014 The Chromium OS Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-'use strict'; |
- |
-/** |
- * Converts a c/c++ time_t variable to Date. |
- * @param {number} timestamp A c/c++ time_t variable. |
- * @return {!Date} |
- */ |
-function DateFromTimeT(timestamp) { |
- return new Date(1000 * timestamp); |
-} |
- |
-/** |
- * Corrects metadata entries fields in order for them to be sent to Files.app. |
- * This function runs recursively for every entry in a directory. |
- * @param {!Object<string, !EntryMetadata>} entryMetadata The metadata to |
- * correct. |
- */ |
-function correctMetadata(entryMetadata) { |
- entryMetadata.index = parseInt(entryMetadata.index, 10); |
- entryMetadata.size = parseInt(entryMetadata.size, 10); |
- entryMetadata.modificationTime = |
- DateFromTimeT(entryMetadata.modificationTime); |
- if (entryMetadata.isDirectory) { |
- console.assert(entryMetadata.entries, |
- 'The field "entries" is mandatory for dictionaries.'); |
- for (var entry in entryMetadata.entries) { |
- correctMetadata(entryMetadata.entries[entry]); |
- } |
- } |
-} |
- |
-/** |
- * Defines a volume object that contains information about archives' contents |
- * and performs operations on these contents. |
- * @constructor |
- * @param {!unpacker.Decompressor} decompressor The decompressor used to obtain |
- * data from archives. |
- * @param {!Entry} entry The entry corresponding to the volume's archive. |
- */ |
-unpacker.Volume = function(decompressor, entry) { |
- /** |
- * Used for restoring the opened file entry after resuming the event page. |
- * @type {!Entry} |
- */ |
- this.entry = entry; |
- |
- /** |
- * @type {!unpacker.Decompressor} |
- */ |
- this.decompressor = decompressor; |
- |
- /** |
- * The volume's metadata. The key is the full path to the file on this volume. |
- * For more details see |
- * https://developer.chrome.com/apps/fileSystemProvider#type-EntryMetadata |
- * @type {?Object<string, !EntryMetadata>} |
- */ |
- this.metadata = null; |
- |
- /** |
- * A map with currently opened files. The key is a requestId value from the |
- * openFileRequested event and the value is the open file options. |
- * @type {!Object<!unpacker.types.RequestId, |
- * !unpacker.types.OpenFileRequestedOptions>} |
- */ |
- this.openedFiles = {}; |
- |
- /** |
- * Default encoding set for this archive. If empty, then not known. |
- * @type {string} |
- */ |
- this.encoding = |
- unpacker.Volume.ENCODING_TABLE[chrome.i18n.getUILanguage()] || ''; |
- |
- /** |
- * The default read metadata request id. -1 is ok as the request ids used by |
- * flleSystemProvider are greater than 0. |
- * @type {number} |
- */ |
- this.DEFAULT_READ_METADATA_REQUEST_ID = -1; |
-}; |
- |
-/** |
- * The default read metadata request id. -1 is ok as the request ids used by |
- * flleSystemProvider are greater than 0. |
- * @const {number} |
- */ |
-unpacker.Volume.DEFAULT_READ_METADATA_REQUEST_ID = -1; |
- |
-/** |
- * Map from language codes to default charset encodings. |
- * @const {!Object<string, string>} |
- */ |
-unpacker.Volume.ENCODING_TABLE = { |
- ar: 'CP1256', |
- bg: 'CP1251', |
- ca: 'CP1252', |
- cs: 'CP1250', |
- da: 'CP1252', |
- de: 'CP1252', |
- el: 'CP1253', |
- en: 'CP1250', |
- en_GB: 'CP1250', |
- es: 'CP1252', |
- es_419: 'CP1252', |
- et: 'CP1257', |
- fa: 'CP1256', |
- fi: 'CP1252', |
- fil: 'CP1252', |
- fr: 'CP1252', |
- he: 'CP1255', |
- hi: 'UTF-8', // Another one may be better. |
- hr: 'CP1250', |
- hu: 'CP1250', |
- id: 'CP1252', |
- it: 'CP1252', |
- ja: 'CP932', // Alternatively SHIFT-JIS. |
- ko: 'CP949', // Alternatively EUC-KR. |
- lt: 'CP1257', |
- lv: 'CP1257', |
- ms: 'CP1252', |
- nl: 'CP1252', |
- no: 'CP1252', |
- pl: 'CP1250', |
- pt_BR: 'CP1252', |
- pt_PT: 'CP1252', |
- ro: 'CP1250', |
- ru: 'CP1251', |
- sk: 'CP1250', |
- sl: 'CP1250', |
- sr: 'CP1251', |
- sv: 'CP1252', |
- th: 'CP874', // Confirm! |
- tr: 'CP1254', |
- uk: 'CP1251', |
- vi: 'CP1258', |
- zh_CN: 'CP936', |
- zh_TW: 'CP950' |
-}; |
- |
-/** |
- * @return {boolean} True if volume is ready to be used. |
- */ |
-unpacker.Volume.prototype.isReady = function() { |
- return !!this.metadata; |
-}; |
- |
-/** |
- * @return {boolean} True if volume is in use. |
- */ |
-unpacker.Volume.prototype.inUse = function() { |
- return this.decompressor.hasRequestsInProgress() || |
- Object.keys(this.openedFiles).length > 0; |
-}; |
- |
-/** |
- * Initializes the volume by reading its metadata. |
- * @param {function()} onSuccess Callback to execute on success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.initialize = function(onSuccess, onError) { |
- var requestId = unpacker.Volume.DEFAULT_READ_METADATA_REQUEST_ID; |
- this.decompressor.readMetadata(requestId, this.encoding, function(metadata) { |
- // Make a deep copy of metadata. |
- this.metadata = /** @type {!Object<string, !EntryMetadata>} */ (JSON.parse( |
- JSON.stringify(metadata))); |
- correctMetadata(this.metadata); |
- |
- onSuccess(); |
- }.bind(this), onError); |
-}; |
- |
-/** |
- * Obtains the metadata for a single entry in the archive. Assumes metadata is |
- * loaded. |
- * @param {!unpacker.types.GetMetadataRequestedOptions} options Options for |
- * getting the metadata of an entry. |
- * @param {function(!EntryMetadata)} onSuccess Callback to execute on success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.onGetMetadataRequested = function(options, onSuccess, |
- onError) { |
- console.assert(this.isReady(), 'Metadata must be loaded.'); |
- var entryMetadata = this.getEntryMetadata_(options.entryPath); |
- if (!entryMetadata) |
- onError('NOT_FOUND'); |
- else |
- onSuccess(entryMetadata); |
-}; |
- |
-/** |
- * Reads a directory contents from metadata. Assumes metadata is loaded. |
- * @param {!unpacker.types.ReadDirectoryRequestedOptions} options Options |
- * for reading the contents of a directory. |
- * @param {function(!Array<!EntryMetadata>, boolean)} onSuccess Callback to |
- * execute on success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.onReadDirectoryRequested = function( |
- options, onSuccess, onError) { |
- console.assert(this.isReady(), 'Metadata must be loaded.'); |
- var directoryMetadata = this.getEntryMetadata_(options.directoryPath); |
- if (!directoryMetadata) { |
- onError('NOT_FOUND'); |
- return; |
- } |
- if (!directoryMetadata.isDirectory) { |
- onError('NOT_A_DIRECTORY'); |
- return; |
- } |
- |
- // Convert dictionary entries to an array. |
- var entries = []; |
- for (var entry in directoryMetadata.entries) { |
- entries.push(directoryMetadata.entries[entry]); |
- } |
- |
- onSuccess(entries, false /* Last call. */); |
-}; |
- |
-/** |
- * Opens a file for read or write. |
- * @param {!unpacker.types.OpenFileRequestedOptions} options Options for |
- * opening a file. |
- * @param {function()} onSuccess Callback to execute on success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.onOpenFileRequested = function(options, onSuccess, |
- onError) { |
- console.assert(this.isReady(), 'Metadata must be loaded.'); |
- if (options.mode != 'READ') { |
- onError('INVALID_OPERATION'); |
- return; |
- } |
- |
- var metadata = this.getEntryMetadata_(options.filePath); |
- if (!metadata) { |
- onError('NOT_FOUND'); |
- return; |
- } |
- |
- this.openedFiles[options.requestId] = options; |
- |
- this.decompressor.openFile( |
- options.requestId, metadata.index, this.encoding, function() { |
- onSuccess(); |
- }.bind(this), function(error) { |
- delete this.openedFiles[options.requestId]; |
- onError('FAILED'); |
- }.bind(this)); |
-}; |
- |
-/** |
- * Closes a file identified by options.openRequestId. |
- * @param {!unpacker.types.CloseFileRequestedOptions} options Options for |
- * closing a file. |
- * @param {function()} onSuccess Callback to execute on success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.onCloseFileRequested = function(options, onSuccess, |
- onError) { |
- console.assert(this.isReady(), 'Metadata must be loaded.'); |
- var openRequestId = options.openRequestId; |
- var openOptions = this.openedFiles[openRequestId]; |
- if (!openOptions) { |
- onError('INVALID_OPERATION'); |
- return; |
- } |
- |
- this.decompressor.closeFile(options.requestId, openRequestId, function() { |
- delete this.openedFiles[openRequestId]; |
- onSuccess(); |
- }.bind(this), onError); |
-}; |
- |
-/** |
- * Reads the contents of a file identified by options.openRequestId. |
- * @param {!unpacker.types.ReadFileRequestedOptions} options Options for |
- * reading a file's contents. |
- * @param {function(!ArrayBuffer, boolean)} onSuccess Callback to execute on |
- * success. |
- * @param {function(!ProviderError)} onError Callback to execute on error. |
- */ |
-unpacker.Volume.prototype.onReadFileRequested = function(options, onSuccess, |
- onError) { |
- console.assert(this.isReady(), 'Metadata must be loaded.'); |
- var openOptions = this.openedFiles[options.openRequestId]; |
- if (!openOptions) { |
- onError('INVALID_OPERATION'); |
- return; |
- } |
- |
- var offset = options.offset; |
- var length = options.length; |
- // Offset and length should be validated by the API. |
- console.assert(offset >= 0, 'Offset should be >= 0.'); |
- console.assert(length >= 0, 'Length should be >= 0.'); |
- |
- var fileSize = this.getEntryMetadata_(openOptions.filePath).size; |
- if (offset >= fileSize || length == 0) { // No more data. |
- onSuccess(new ArrayBuffer(0), false /* Last call. */); |
- return; |
- } |
- length = Math.min(length, fileSize - offset); |
- |
- this.decompressor.readFile(options.requestId, options.openRequestId, |
- offset, length, onSuccess, onError); |
-}; |
- |
-/** |
- * Gets the metadata for an entry based on its path. |
- * @param {string} entryPath The full path to the entry. |
- * @return {?Object} The correspondent metadata. |
- * @private |
- */ |
-unpacker.Volume.prototype.getEntryMetadata_ = function(entryPath) { |
- var pathArray = entryPath.split('/'); |
- |
- // Remove empty strings resulted after split. As paths start with '/' we will |
- // have an empty string at the beginning of pathArray and possible an |
- // empty string at the end for directories (e.g. /path/to/dir/). The code |
- // assumes entryPath cannot have consecutive '/'. |
- pathArray.splice(0, 1); |
- |
- if (pathArray.length > 0) { // In case of 0 this is root directory. |
- var lastIndex = pathArray.length - 1; |
- if (pathArray[lastIndex] == '') |
- pathArray.splice(lastIndex); |
- } |
- |
- // Get the actual metadata by iterating through every directory metadata |
- // on the path to the entry. |
- var entryMetadata = this.metadata; |
- for (var i = 0, limit = pathArray.length; i < limit; i++) { |
- if (!entryMetadata || |
- !entryMetadata.isDirectory && i != limit - 1 /* Parent directory. */) |
- return null; |
- entryMetadata = entryMetadata.entries[pathArray[i]]; |
- } |
- |
- return entryMetadata; |
-}; |