| 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;
|
| -};
|
|
|