1e14391e94c850b8bd03680c23b38978db68687a8John Reck/* 2e14391e94c850b8bd03680c23b38978db68687a8John Reck * Copyright (C) 2010 Google Inc. All rights reserved. 3e14391e94c850b8bd03680c23b38978db68687a8John Reck * 4e14391e94c850b8bd03680c23b38978db68687a8John Reck * Redistribution and use in source and binary forms, with or without 5e14391e94c850b8bd03680c23b38978db68687a8John Reck * modification, are permitted provided that the following conditions are 6e14391e94c850b8bd03680c23b38978db68687a8John Reck * met: 7e14391e94c850b8bd03680c23b38978db68687a8John Reck * 8e14391e94c850b8bd03680c23b38978db68687a8John Reck * * Redistributions of source code must retain the above copyright 9e14391e94c850b8bd03680c23b38978db68687a8John Reck * notice, this list of conditions and the following disclaimer. 10e14391e94c850b8bd03680c23b38978db68687a8John Reck * * Redistributions in binary form must reproduce the above 11e14391e94c850b8bd03680c23b38978db68687a8John Reck * copyright notice, this list of conditions and the following disclaimer 12e14391e94c850b8bd03680c23b38978db68687a8John Reck * in the documentation and/or other materials provided with the 13e14391e94c850b8bd03680c23b38978db68687a8John Reck * distribution. 14e14391e94c850b8bd03680c23b38978db68687a8John Reck * * Neither the name of Google Inc. nor the names of its 15e14391e94c850b8bd03680c23b38978db68687a8John Reck * contributors may be used to endorse or promote products derived from 16e14391e94c850b8bd03680c23b38978db68687a8John Reck * this software without specific prior written permission. 17e14391e94c850b8bd03680c23b38978db68687a8John Reck * 18e14391e94c850b8bd03680c23b38978db68687a8John Reck * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e14391e94c850b8bd03680c23b38978db68687a8John Reck * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e14391e94c850b8bd03680c23b38978db68687a8John Reck * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e14391e94c850b8bd03680c23b38978db68687a8John Reck * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e14391e94c850b8bd03680c23b38978db68687a8John Reck * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e14391e94c850b8bd03680c23b38978db68687a8John Reck * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e14391e94c850b8bd03680c23b38978db68687a8John Reck * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e14391e94c850b8bd03680c23b38978db68687a8John Reck * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e14391e94c850b8bd03680c23b38978db68687a8John Reck * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e14391e94c850b8bd03680c23b38978db68687a8John Reck * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e14391e94c850b8bd03680c23b38978db68687a8John Reck * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e14391e94c850b8bd03680c23b38978db68687a8John Reck */ 30e14391e94c850b8bd03680c23b38978db68687a8John Reck 31e14391e94c850b8bd03680c23b38978db68687a8John Reck#ifndef FileReaderLoader_h 32e14391e94c850b8bd03680c23b38978db68687a8John Reck#define FileReaderLoader_h 33e14391e94c850b8bd03680c23b38978db68687a8John Reck 34e14391e94c850b8bd03680c23b38978db68687a8John Reck#if ENABLE(BLOB) 35e14391e94c850b8bd03680c23b38978db68687a8John Reck 36e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "FileError.h" 37e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "KURL.h" 38e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "TextEncoding.h" 39e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "ThreadableLoaderClient.h" 40e14391e94c850b8bd03680c23b38978db68687a8John Reck#include <wtf/Forward.h> 41e14391e94c850b8bd03680c23b38978db68687a8John Reck#include <wtf/text/WTFString.h> 42e14391e94c850b8bd03680c23b38978db68687a8John Reck 43e14391e94c850b8bd03680c23b38978db68687a8John Recknamespace WebCore { 44e14391e94c850b8bd03680c23b38978db68687a8John Reck 45e14391e94c850b8bd03680c23b38978db68687a8John Reckclass ArrayBuffer; 46e14391e94c850b8bd03680c23b38978db68687a8John Reckclass Blob; 47e14391e94c850b8bd03680c23b38978db68687a8John Reckclass FileReaderLoaderClient; 48e14391e94c850b8bd03680c23b38978db68687a8John Reckclass ScriptExecutionContext; 49e14391e94c850b8bd03680c23b38978db68687a8John Reckclass TextResourceDecoder; 50e14391e94c850b8bd03680c23b38978db68687a8John Reckclass ThreadableLoader; 51e14391e94c850b8bd03680c23b38978db68687a8John Reck 52e14391e94c850b8bd03680c23b38978db68687a8John Reckclass FileReaderLoader : public ThreadableLoaderClient { 53e14391e94c850b8bd03680c23b38978db68687a8John Reckpublic: 54e14391e94c850b8bd03680c23b38978db68687a8John Reck enum ReadType { 55e14391e94c850b8bd03680c23b38978db68687a8John Reck ReadAsArrayBuffer, 56e14391e94c850b8bd03680c23b38978db68687a8John Reck ReadAsBinaryString, 57e14391e94c850b8bd03680c23b38978db68687a8John Reck ReadAsText, 58e14391e94c850b8bd03680c23b38978db68687a8John Reck ReadAsDataURL 59e14391e94c850b8bd03680c23b38978db68687a8John Reck }; 60e14391e94c850b8bd03680c23b38978db68687a8John Reck 61e14391e94c850b8bd03680c23b38978db68687a8John Reck // If client is given, do the loading asynchronously. Otherwise, load synchronously. 62e14391e94c850b8bd03680c23b38978db68687a8John Reck FileReaderLoader(ReadType, FileReaderLoaderClient*); 63e14391e94c850b8bd03680c23b38978db68687a8John Reck ~FileReaderLoader(); 64e14391e94c850b8bd03680c23b38978db68687a8John Reck 65e14391e94c850b8bd03680c23b38978db68687a8John Reck void start(ScriptExecutionContext*, Blob*); 66e14391e94c850b8bd03680c23b38978db68687a8John Reck void cancel(); 67e14391e94c850b8bd03680c23b38978db68687a8John Reck 68e14391e94c850b8bd03680c23b38978db68687a8John Reck // ThreadableLoaderClient 69e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual void didReceiveResponse(const ResourceResponse&); 70e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual void didReceiveData(const char*, int); 7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void didFinishLoading(unsigned long, double); 72e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual void didFail(const ResourceError&); 73e14391e94c850b8bd03680c23b38978db68687a8John Reck 74e14391e94c850b8bd03680c23b38978db68687a8John Reck String stringResult(); 75e14391e94c850b8bd03680c23b38978db68687a8John Reck PassRefPtr<ArrayBuffer> arrayBufferResult() const; 76e14391e94c850b8bd03680c23b38978db68687a8John Reck unsigned bytesLoaded() const { return m_bytesLoaded; } 77e14391e94c850b8bd03680c23b38978db68687a8John Reck unsigned totalBytes() const { return m_totalBytes; } 78e14391e94c850b8bd03680c23b38978db68687a8John Reck int errorCode() const { return m_errorCode; } 79e14391e94c850b8bd03680c23b38978db68687a8John Reck 80e14391e94c850b8bd03680c23b38978db68687a8John Reck void setEncoding(const String&); 81e14391e94c850b8bd03680c23b38978db68687a8John Reck void setDataType(const String& dataType) { m_dataType = dataType; } 82e14391e94c850b8bd03680c23b38978db68687a8John Reck 83e14391e94c850b8bd03680c23b38978db68687a8John Reckprivate: 84e14391e94c850b8bd03680c23b38978db68687a8John Reck void terminate(); 85e14391e94c850b8bd03680c23b38978db68687a8John Reck void cleanup(); 86e14391e94c850b8bd03680c23b38978db68687a8John Reck void failed(int errorCode); 87e14391e94c850b8bd03680c23b38978db68687a8John Reck void convertToText(); 88e14391e94c850b8bd03680c23b38978db68687a8John Reck void convertToDataURL(); 89e14391e94c850b8bd03680c23b38978db68687a8John Reck 90e14391e94c850b8bd03680c23b38978db68687a8John Reck bool isCompleted() const; 91e14391e94c850b8bd03680c23b38978db68687a8John Reck 92e14391e94c850b8bd03680c23b38978db68687a8John Reck static FileError::ErrorCode httpStatusCodeToErrorCode(int); 93e14391e94c850b8bd03680c23b38978db68687a8John Reck 94e14391e94c850b8bd03680c23b38978db68687a8John Reck ReadType m_readType; 95e14391e94c850b8bd03680c23b38978db68687a8John Reck FileReaderLoaderClient* m_client; 96e14391e94c850b8bd03680c23b38978db68687a8John Reck TextEncoding m_encoding; 97e14391e94c850b8bd03680c23b38978db68687a8John Reck String m_dataType; 98e14391e94c850b8bd03680c23b38978db68687a8John Reck 99e14391e94c850b8bd03680c23b38978db68687a8John Reck KURL m_urlForReading; 100e14391e94c850b8bd03680c23b38978db68687a8John Reck RefPtr<ThreadableLoader> m_loader; 101e14391e94c850b8bd03680c23b38978db68687a8John Reck 102e14391e94c850b8bd03680c23b38978db68687a8John Reck RefPtr<ArrayBuffer> m_rawData; 103e14391e94c850b8bd03680c23b38978db68687a8John Reck bool m_isRawDataConverted; 104e14391e94c850b8bd03680c23b38978db68687a8John Reck 105e14391e94c850b8bd03680c23b38978db68687a8John Reck String m_stringResult; 106e14391e94c850b8bd03680c23b38978db68687a8John Reck 107e14391e94c850b8bd03680c23b38978db68687a8John Reck // The decoder used to decode the text data. 108e14391e94c850b8bd03680c23b38978db68687a8John Reck RefPtr<TextResourceDecoder> m_decoder; 109e14391e94c850b8bd03680c23b38978db68687a8John Reck 110e14391e94c850b8bd03680c23b38978db68687a8John Reck unsigned m_bytesLoaded; 111e14391e94c850b8bd03680c23b38978db68687a8John Reck unsigned m_totalBytes; 112e14391e94c850b8bd03680c23b38978db68687a8John Reck int m_errorCode; 113e14391e94c850b8bd03680c23b38978db68687a8John Reck}; 114e14391e94c850b8bd03680c23b38978db68687a8John Reck 115e14391e94c850b8bd03680c23b38978db68687a8John Reck} // namespace WebCore 116e14391e94c850b8bd03680c23b38978db68687a8John Reck 117e14391e94c850b8bd03680c23b38978db68687a8John Reck#endif // ENABLE(BLOB) 118e14391e94c850b8bd03680c23b38978db68687a8John Reck 119e14391e94c850b8bd03680c23b38978db68687a8John Reck#endif // FileReaderLoader_h 120