1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * in the documentation and/or other materials provided with the 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * distribution. 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * this software without specific prior written permission. 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 31926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 33926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.IsolatedFileSystemManager} manager 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} path 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.IsolatedFileSystem = function(manager, path, name, rootURL) 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._manager = manager; 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._path = path; 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._name = name; 41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._rootURL = rootURL; 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.IsolatedFileSystem.errorMessage = function(error) 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var msg; 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) switch (error.code) { 48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case FileError.QUOTA_EXCEEDED_ERR: 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "QUOTA_EXCEEDED_ERR"; 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case FileError.NOT_FOUND_ERR: 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "NOT_FOUND_ERR"; 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case FileError.SECURITY_ERR: 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "SECURITY_ERR"; 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case FileError.INVALID_MODIFICATION_ERR: 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "INVALID_MODIFICATION_ERR"; 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case FileError.INVALID_STATE_ERR: 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "INVALID_STATE_ERR"; 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) msg = "Unknown Error"; 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) break; 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "File system error: " + msg; 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.IsolatedFileSystem.prototype = { 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) path: function() 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._path; 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) name: function() 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._name; 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {string} 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) rootURL: function() 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._rootURL; 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(DOMFileSystem)} callback 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _requestFileSystem: function(callback) 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._manager.requestDOMFileSystem(this._path, callback); 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} path 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(string)} callback 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) requestFilesRecursive: function(path, callback) 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._requestFileSystem(fileSystemLoaded.bind(this)); 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var domFileSystem; 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {DOMFileSystem} fs 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileSystemLoaded(fs) 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) domFileSystem = fs; 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._requestEntries(domFileSystem, path, innerCallback.bind(this)); 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {Array.<FileEntry>} entries 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function innerCallback(entries) 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < entries.length; ++i) { 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var entry = entries[i]; 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!entry.isDirectory) 130521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) callback(entry.fullPath.substr(1)); 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._requestEntries(domFileSystem, entry.fullPath, innerCallback.bind(this)); 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} path 13923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {?string} name 14023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {function(?string)} callback 14123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 14223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch createFile: function(path, name, callback) 14323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 14423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._requestFileSystem(fileSystemLoaded.bind(this)); 14523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var newFileIndex = 1; 14623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch if (!name) 14723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch name = "NewFile"; 14823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var nameCandidate; 14923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 15023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 15123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {DOMFileSystem} domFileSystem 15223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 15323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileSystemLoaded(domFileSystem) 15423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 15523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch domFileSystem.root.getDirectory(path, null, dirEntryLoaded.bind(this), errorHandler.bind(this)); 15623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 15723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 15823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 15923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {DirectoryEntry} dirEntry 16023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 16123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function dirEntryLoaded(dirEntry) 16223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 16323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var nameCandidate = name; 16423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch if (newFileIndex > 1) 16523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch nameCandidate += newFileIndex; 16623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch ++newFileIndex; 16723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch dirEntry.getFile(nameCandidate, { create: true, exclusive: true }, fileCreated, fileCreationError); 16823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 16923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileCreated(entry) 17023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 17123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch callback(entry.fullPath.substr(1)); 17223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 17323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 17423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileCreationError(error) 17523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 17623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch if (error.code === FileError.INVALID_MODIFICATION_ERR) { 17723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch dirEntryLoaded(dirEntry); 17823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch return; 17923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 18023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 18123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 18223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch console.error(errorMessage + " when testing if file exists '" + (this._path + "/" + path + "/" + nameCandidate) + "'"); 18323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch callback(null); 18423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 18523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 18623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 18723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function errorHandler(error) 18823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 18923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 19023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var filePath = this._path + "/" + path; 19123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch if (nameCandidate) 19223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch filePath += "/" + nameCandidate; 19323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch console.error(errorMessage + " when getting content for file '" + (filePath) + "'"); 19423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch callback(null); 19523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 19623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch }, 19723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 19823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 19923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {string} path 20023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 20123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch deleteFile: function(path) 20223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 20323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch this._requestFileSystem(fileSystemLoaded.bind(this)); 20423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 20523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 20623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {DOMFileSystem} domFileSystem 20723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 20823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileSystemLoaded(domFileSystem) 20923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 21023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch domFileSystem.root.getFile(path, null, fileEntryLoaded.bind(this), errorHandler.bind(this)); 21123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 21223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 21323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 21423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {FileEntry} fileEntry 21523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 21623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileEntryLoaded(fileEntry) 21723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 21823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch fileEntry.remove(fileEntryRemoved.bind(this), errorHandler.bind(this)); 21923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 22023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 22123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function fileEntryRemoved() 22223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 22323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 22423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 22523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 22623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {FileError} error 22723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch */ 22823e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch function errorHandler(error) 22923e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch { 23023e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 23123e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch console.error(errorMessage + " when deleting file '" + (this._path + "/" + path) + "'"); 23223e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch } 23323e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch }, 23423e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch 23523e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch /** 23623e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch * @param {string} path 237591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {function(?Date, ?number)} callback 238591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 239591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch requestMetadata: function(path, callback) 240591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 241591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._requestFileSystem(fileSystemLoaded.bind(this)); 242591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 243591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 244591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {DOMFileSystem} domFileSystem 245591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 246591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function fileSystemLoaded(domFileSystem) 247591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 248591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch domFileSystem.root.getFile(path, null, fileEntryLoaded, errorHandler); 249591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 250591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 251591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 252591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {FileEntry} entry 253591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 254591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function fileEntryLoaded(entry) 255591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 256591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch entry.getMetadata(successHandler, errorHandler); 257591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 258591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 259591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 260591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {Metadata} metadata 261591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 262591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function successHandler(metadata) 263591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 264591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch callback(metadata.modificationTime, metadata.size); 265591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 266591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 267591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 268591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {FileError} error 269591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch */ 270591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function errorHandler(error) 271591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 272591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch callback(null, null); 273591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 274591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 275591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 276591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch /** 277591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch * @param {string} path 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(?string)} callback 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) requestFileContent: function(path, callback) 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._requestFileSystem(fileSystemLoaded.bind(this)); 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {DOMFileSystem} domFileSystem 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileSystemLoaded(domFileSystem) 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 289591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch domFileSystem.root.getFile(path, null, fileEntryLoaded, errorHandler.bind(this)); 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {FileEntry} entry 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileEntryLoaded(entry) 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 297591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch entry.file(fileLoaded, errorHandler.bind(this)); 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!Blob} file 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileLoaded(file) 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var reader = new FileReader(); 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) reader.onloadend = readerLoadEnd; 307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) reader.readAsText(file); 308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @this {FileReader} 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function readerLoadEnd() 314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(/** @type {string} */ (this.result)); 316926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function errorHandler(error) 319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 32053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (error.code === FileError.NOT_FOUND_ERR) { 32153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) callback(null); 32253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 32353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 32453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.error(errorMessage + " when getting content for file '" + (this._path + "/" + path) + "'"); 327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(null); 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} path 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} content 334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function()} callback 335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setFileContent: function(path, content, callback) 337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._requestFileSystem(fileSystemLoaded); 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {DOMFileSystem} domFileSystem 342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileSystemLoaded(domFileSystem) 344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 3455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) domFileSystem.root.getFile(path, { create: true }, fileEntryLoaded, errorHandler.bind(this)); 346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {FileEntry} entry 350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileEntryLoaded(entry) 352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 3535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) entry.createWriter(fileWriterCreated, errorHandler.bind(this)); 354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {FileWriter} fileWriter 358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileWriterCreated(fileWriter) 360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 3615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) fileWriter.onerror = errorHandler.bind(this); 362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileWriter.onwriteend = fileTruncated; 363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileWriter.truncate(0); 364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function fileTruncated() 366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileWriter.onwriteend = writerEnd; 368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var blob = new Blob([content], { type: "text/plain" }); 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileWriter.write(blob); 370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function writerEnd() 374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(); 376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function errorHandler(error) 379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.error(errorMessage + " when setting content for file '" + (this._path + "/" + path) + "'"); 382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(); 383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 3875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {string} path 3885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {string} newName 3895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {function(boolean, string=)} callback 3905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 3915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) renameFile: function(path, newName, callback) 3925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 3935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) newName = newName ? newName.trim() : newName; 3945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (!newName || newName.indexOf("/") !== -1) { 3955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(false); 3965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return; 3975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var fileEntry; 3995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var dirEntry; 4005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var newFileEntry; 4015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) this._requestFileSystem(fileSystemLoaded); 4025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 4045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {DOMFileSystem} domFileSystem 4055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 4065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function fileSystemLoaded(domFileSystem) 4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) domFileSystem.root.getFile(path, null, fileEntryLoaded, errorHandler.bind(this)); 4095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 4125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {FileEntry} entry 4135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 4145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function fileEntryLoaded(entry) 4155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (entry.name === newName) { 4175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(false); 4185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return; 4195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) fileEntry = entry; 4225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) fileEntry.getParent(dirEntryLoaded, errorHandler.bind(this)); 4235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 4265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {Entry} entry 4275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 4285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function dirEntryLoaded(entry) 4295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) dirEntry = entry; 4315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) dirEntry.getFile(newName, null, newFileEntryLoaded, newFileEntryLoadErrorHandler); 4325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 4355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {FileEntry} entry 4365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 4375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function newFileEntryLoaded(entry) 4385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(false); 4405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function newFileEntryLoadErrorHandler(error) 4435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (error.code !== FileError.NOT_FOUND_ERR) { 4455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(false); 4465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return; 4475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) fileEntry.moveTo(dirEntry, newName, fileRenamed, errorHandler.bind(this)); 4495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 4525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * @param {FileEntry} entry 4535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 4545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function fileRenamed(entry) 4555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(true, entry.name); 4575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function errorHandler(error) 4605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) { 4615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 4625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) console.error(errorMessage + " when renaming file '" + (this._path + "/" + path) + "' to '" + newName + "'"); 4635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) callback(false); 4645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 4655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) }, 4665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 4675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 468926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {DirectoryEntry} dirEntry 469926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(Array.<FileEntry>)} callback 470926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 471926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _readDirectory: function(dirEntry, callback) 472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 473926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var dirReader = dirEntry.createReader(); 474926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var entries = []; 475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function innerCallback(results) 477926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!results.length) 479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback(entries.sort()); 480926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else { 481926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) entries = entries.concat(toArray(results)); 482926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dirReader.readEntries(innerCallback, errorHandler); 483926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 484926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 485926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 486926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function toArray(list) 487926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 488926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return Array.prototype.slice.call(list || [], 0); 489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dirReader.readEntries(innerCallback, errorHandler); 492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function errorHandler(error) 494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 495926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 496926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.error(errorMessage + " when reading directory '" + dirEntry.fullPath + "'"); 497926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback([]); 498926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 499926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 500926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 502926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {DOMFileSystem} domFileSystem 503926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} path 504926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(Array.<FileEntry>)} callback 505926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 506926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _requestEntries: function(domFileSystem, path, callback) 507926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 508926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) domFileSystem.root.getDirectory(path, null, innerCallback.bind(this), errorHandler); 509926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 510926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function innerCallback(dirEntry) 511926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 512926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._readDirectory(dirEntry, callback) 513926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 514926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 515926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function errorHandler(error) 516926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 517926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error); 518926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.error(errorMessage + " when requesting entry '" + path + "'"); 519926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callback([]); 520926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 521926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 522926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 523