1e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block/* 2e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 3e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 4e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Redistribution and use in source and binary forms, with or without 5e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * modification, are permitted provided that the following conditions are 6e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * met: 7e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 8e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Redistributions of source code must retain the above copyright 9e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * notice, this list of conditions and the following disclaimer. 10e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Redistributions in binary form must reproduce the above 11e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * copyright notice, this list of conditions and the following disclaimer 12e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * in the documentation and/or other materials provided with the 13e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * distribution. 14e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * * Neither the name of Google Inc. nor the names of its 15e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * contributors may be used to endorse or promote products derived from 16e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * this software without specific prior written permission. 17e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * 18e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block */ 30e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 31e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#ifndef BlobResourceHandle_h 32e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#define BlobResourceHandle_h 33e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 34e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(BLOB) 35e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 36e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "FileStreamClient.h" 37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "PlatformString.h" 38e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "ResourceHandle.h" 39e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/PassRefPtr.h> 40e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include <wtf/Vector.h> 41e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebCore { 43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 44e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass AsyncFileStream; 45e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass BlobStorageData; 46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass FileStream; 47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass ResourceHandleClient; 48e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass ResourceRequest; 495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenstruct BlobDataItem; 50e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 51e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass BlobResourceHandle : public FileStreamClient, public ResourceHandle { 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockpublic: 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block static PassRefPtr<BlobResourceHandle> create(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceHandleClient* client, bool async = true) 54e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block { 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return adoptRef(new BlobResourceHandle(blobData, request, client, async)); 56e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 57e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block static void loadResourceSynchronously(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceError& error, ResourceResponse& response, Vector<char>& data); 59e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // FileStreamClient methods. 61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void didGetSize(long long); 62e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void didOpen(bool); 63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void didRead(int); 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // ResourceHandle methods. 66e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void cancel(); 67e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 68e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void start(); 69e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block int readSync(char*, int); 70e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 71e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockprivate: 722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block friend void delayedStartBlobResourceHandle(void*); 732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 74e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block BlobResourceHandle(PassRefPtr<BlobStorageData>, const ResourceRequest&, ResourceHandleClient*, bool async); 75e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual ~BlobResourceHandle(); 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void doStart(); 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void getSizeForNext(); 79e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void seek(); 80e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void consumeData(const char* data, int bytesRead); 81e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void failed(int errorCode); 82e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void readAsync(); 84e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void readDataAsync(const BlobDataItem&); 85e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void readFileAsync(const BlobDataItem&); 86e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 87e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block int readDataSync(const BlobDataItem&, char*, int); 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block int readFileSync(const BlobDataItem&, char*, int); 89e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 90e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyResponse(); 91e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyResponseOnSuccess(); 92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyResponseOnError(); 93e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyReceiveData(const char*, int); 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyFail(int errorCode); 95e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void notifyFinish(); 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block RefPtr<BlobStorageData> m_blobData; 98e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool m_async; 99e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block RefPtr<AsyncFileStream> m_asyncStream; // For asynchronous loading. 100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block RefPtr<FileStream> m_stream; // For synchronous loading. 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block Vector<char> m_buffer; 102e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block Vector<long long> m_itemLengthList; 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block int m_errorCode; 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool m_aborted; 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long m_rangeOffset; 106e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long m_rangeEnd; 107e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long m_rangeSuffixLength; 108e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long m_totalRemainingSize; 109e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long m_currentItemReadSize; 110e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block unsigned m_sizeItemCount; 111e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block unsigned m_readItemCount; 112e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool m_fileOpened; 113e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}; 114e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 115e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} // namespace WebCore 116e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 117e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // ENABLE(BLOB) 118e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 119e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // BlobResourceHandle_h 120