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 WebBlobData_h 32e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#define WebBlobData_h 33e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 34a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebThreadSafeData.h" 35e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebString.h" 36e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebURL.h" 37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 38e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if WEBKIT_IMPLEMENTATION 39e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebCore { class BlobData; } 40e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WTF { template <typename T> class PassOwnPtr; } 41e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocknamespace WebKit { 44e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 45e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass WebBlobDataPrivate; 46e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass WebBlobData { 48e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockpublic: 49e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block struct Item { 50e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block enum { TypeData, TypeFile, TypeBlob } type; 51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch WebThreadSafeData data; 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebString filePath; 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebURL blobURL; 54e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long offset; 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block long long length; // -1 means go to the end of the file/blob. 56e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block double expectedModificationTime; // 0.0 means that the time is not set. 57e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block }; 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 59e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ~WebBlobData() { reset(); } 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebBlobData() : m_private(0) { } 62e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API void initialize(); 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API void reset(); 65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 66e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block bool isNull() const { return !m_private; } 67e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 68e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Returns the number of items. 69e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API size_t itemCount() const; 70e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 71e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Retrieves the values of the item at the given index. Returns false if 72e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // index is out of bounds. 73e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API bool itemAt(size_t index, Item& result) const; 74e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 75e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API WebString contentType() const; 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 77e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WEBKIT_API WebString contentDisposition() const; 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 79e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if WEBKIT_IMPLEMENTATION 80e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebBlobData(const WTF::PassOwnPtr<WebCore::BlobData>&); 81e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebBlobData& operator=(const WTF::PassOwnPtr<WebCore::BlobData>&); 82e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block operator WTF::PassOwnPtr<WebCore::BlobData>(); 83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 84e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 85e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockprivate: 86e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if WEBKIT_IMPLEMENTATION 87e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void assign(const WTF::PassOwnPtr<WebCore::BlobData>&); 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 89e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block WebBlobDataPrivate* m_private; 90e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block}; 91e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} // namespace WebKit 93e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // WebBlobData_h 95