15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @interface 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.OutputStreamDelegate = function() 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.OutputStreamDelegate.prototype = { 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTransferStarted: function() { }, 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onTransferFinished: function() { }, 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 44a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onChunkTransferred: function(reader) { }, 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 49a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 50f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!Event} event 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onError: function(reader, event) { }, 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @interface 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.OutputStream = function() 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.OutputStream.prototype = { 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} data 65a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.OutputStream)=} callback 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) write: function(data, callback) { }, 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) close: function() { } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @interface 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.ChunkedReader = function() 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.ChunkedReader.prototype = { 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number} 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileSize: function() { }, 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number} 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadedSize: function() { }, 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileName: function() { }, 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancel: function() { } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.ChunkedReader} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!File} file 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} chunkSize 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!WebInspector.OutputStreamDelegate} delegate 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.ChunkedFileReader = function(file, chunkSize, delegate) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._file = file; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._fileSize = file.size; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._loadedSize = 0; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._chunkSize = chunkSize; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate = delegate; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isCanceled = false; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.ChunkedFileReader.prototype = { 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {!WebInspector.OutputStream} output 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) start: function(output) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._output = output; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reader = new FileReader(); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reader.onload = this._onChunkLoaded.bind(this); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reader.onerror = this._delegate.onError.bind(this._delegate, this); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate.onTransferStarted(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._loadChunk(); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancel: function() 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._isCanceled = true; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number} 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadedSize: function() 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._loadedSize; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {number} 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileSize: function() 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._fileSize; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileName: function() 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._file.name; 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onChunkLoaded: function(event) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isCanceled) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.target.readyState !== FileReader.DONE) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var data = event.target.result; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._loadedSize += data.length; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._output.write(data); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._isCanceled) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate.onChunkTransferred(this); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._loadedSize === this._fileSize) { 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._file = null; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reader = null; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._output.close(); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._delegate.onTransferFinished(); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._loadChunk(); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _loadChunk: function() 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var chunkStart = this._loadedSize; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var chunkEnd = Math.min(this._fileSize, chunkStart + this._chunkSize) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var nextPart = this._file.slice(chunkStart, chunkEnd); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._reader.readAsText(nextPart); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(!File)} callback 200a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Node} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.createFileSelectorElement = function(callback) { 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var fileSelectorElement = document.createElement("input"); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileSelectorElement.type = "file"; 205e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) fileSelectorElement.style.display = "none"; 206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileSelectorElement.setAttribute("tabindex", -1); 207e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) fileSelectorElement.onchange = onChange; 208e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) function onChange(event) 209e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) { 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(fileSelectorElement.files[0]); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fileSelectorElement; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.OutputStream} 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileOutputStream = function() 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.FileOutputStream.prototype = { 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} fileName 226a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(boolean)} callback 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) open: function(fileName, callback) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._closed = false; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._writeCallbacks = []; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._fileName = fileName; 233a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 234a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 235a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean} accepted 23609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.FileOutputStream} 237a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 238a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) function callbackWrapper(accepted) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 240a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (accepted) 241a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) WebInspector.fileManager.addEventListener(WebInspector.FileManager.EventTypes.AppendedToURL, this._onAppendDone, this); 242a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) callback(accepted); 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 244a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) WebInspector.fileManager.save(this._fileName, "", true, callbackWrapper.bind(this)); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} data 249a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.OutputStream)=} callback 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) write: function(data, callback) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._writeCallbacks.push(callback); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.fileManager.append(this._fileName, data); 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) close: function() 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._closed = true; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._writeCallbacks.length) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.fileManager.removeEventListener(WebInspector.FileManager.EventTypes.AppendedToURL, this._onAppendDone, this); 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.fileManager.close(this._fileName); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 26709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.Event} event 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _onAppendDone: function(event) 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event.data !== this._fileName) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) var callback = this._writeCallbacks.shift(); 2748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (callback) 2758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) callback(this); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._writeCallbacks.length) { 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._closed) { 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.fileManager.removeEventListener(WebInspector.FileManager.EventTypes.AppendedToURL, this._onAppendDone, this); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.fileManager.close(this._fileName); 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 284