193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)/* 293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * modification, are permitted provided that the following conditions are 693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * met: 793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 1193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * in the documentation and/or other materials provided with the 1393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * distribution. 1493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 1693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * this software without specific prior written permission. 1793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 1893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 3093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#ifndef WebData_h 3293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#define WebData_h 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebCommon.h" 35bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "WebPrivatePtr.h" 3693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 3893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 39e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class SharedBuffer; 4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebDataPrivate; 4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)// A container for raw bytes. It is inexpensive to copy a WebData object. 4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)// 4493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)// WARNING: It is not safe to pass a WebData across threads!!! 4593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)// 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class BLINK_PLATFORM_EXPORT WebData { 4793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)public: 4893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) ~WebData() { reset(); } 4993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 50bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) WebData() { } 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebData(const char* data, size_t size) 5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(data, size); 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) template <int N> 581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebData(const char (&data)[N]) 5993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 6093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(data, N - 1); 6193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 6293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 63bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) WebData(const WebData& d) { assign(d); } 6493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebData& operator=(const WebData& d) 6693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 6793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(d); 6893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return *this; 6993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 7093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 711e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void reset(); 721e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void assign(const WebData&); 731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void assign(const char* data, size_t size); 7493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) size_t size() const; 761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) const char* data() const; 7793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 7893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool isEmpty() const { return !size(); } 79bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) bool isNull() const { return m_private.isNull(); } 8093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#if INSIDE_BLINK 82e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebData(const PassRefPtr<SharedBuffer>&); 83e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebData& operator=(const PassRefPtr<SharedBuffer>&); 84e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) operator PassRefPtr<SharedBuffer>() const; 8593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#else 8693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) template <class C> 871e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) WebData(const C& c) 8893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 8993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(c.data(), c.size()); 9093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 9293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) template <class C> 9393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebData& operator=(const C& c) 9493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 9593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) assign(c.data(), c.size()); 9693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return *this; 9793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 9893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 9993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 10093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)private: 101e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebPrivatePtr<SharedBuffer> m_private; 10293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}; 10393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 10451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 10593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 10693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 107