| Index: third_party/WebKit/Source/wtf/text/CompressibleString.h
 | 
| diff --git a/third_party/WebKit/Source/wtf/text/CompressibleString.h b/third_party/WebKit/Source/wtf/text/CompressibleString.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..8942beb18fa4c91a5299d08f66a736a1724899ee
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/Source/wtf/text/CompressibleString.h
 | 
| @@ -0,0 +1,80 @@
 | 
| +// Copyright 2016 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef CompressibleString_h
 | 
| +#define CompressibleString_h
 | 
| +
 | 
| +#include "wtf/HashTableDeletedValueType.h"
 | 
| +#include "wtf/text/Unicode.h"
 | 
| +#include "wtf/text/WTFString.h"
 | 
| +
 | 
| +namespace WTF {
 | 
| +
 | 
| +class WTF_EXPORT CompressibleStringImpl : public RefCounted<CompressibleStringImpl> {
 | 
| +    WTF_MAKE_NONCOPYABLE(CompressibleStringImpl);
 | 
| +public:
 | 
| +    static void purgeMemory();
 | 
| +
 | 
| +    CompressibleStringImpl(PassRefPtr<StringImpl>);
 | 
| +    ~CompressibleStringImpl();
 | 
| +
 | 
| +    bool isEmpty() const { return m_originalLength == 0; }
 | 
| +
 | 
| +    PassRefPtr<StringImpl> impl() { return m_impl; }
 | 
| +    bool isCompressed() const { return !!m_compressedData; }
 | 
| +    unsigned originalLength() const { return m_originalLength; }
 | 
| +    bool is8Bit() const { return m_is8Bit; }
 | 
| +
 | 
| +    unsigned originalContentSizeInBytes() const;
 | 
| +    unsigned currentSizeInBytes() const;
 | 
| +
 | 
| +    String toString();
 | 
| +    const LChar* characters8();
 | 
| +    const UChar* characters16();
 | 
| +
 | 
| +    void compressString();
 | 
| +    void uncompressString();
 | 
| +
 | 
| +private:
 | 
| +    RefPtr<StringImpl> m_impl;
 | 
| +    const unsigned m_originalLength;
 | 
| +    void* m_compressedData;
 | 
| +    unsigned m_compressedDataSize;
 | 
| +    const bool m_is8Bit;
 | 
| +};
 | 
| +
 | 
| +class WTF_EXPORT CompressibleString {
 | 
| +public:
 | 
| +    CompressibleString();
 | 
| +    CompressibleString(const CompressibleString&);
 | 
| +    explicit CompressibleString(PassRefPtr<StringImpl>);
 | 
| +
 | 
| +    bool isNull() const { return !m_impl; }
 | 
| +    bool isEmpty() const { return isNull() || m_impl->isEmpty(); }
 | 
| +    unsigned length() const { return m_impl ? m_impl->originalLength() : 0; }
 | 
| +
 | 
| +    unsigned currentSizeInBytes() const { return m_impl ? m_impl->currentSizeInBytes() : 0; }
 | 
| +
 | 
| +    bool isCompressed() const { return m_impl ? m_impl->isCompressed() : false; }
 | 
| +    bool is8Bit() const { return m_impl->is8Bit(); }
 | 
| +
 | 
| +    String toString() const { return m_impl ? m_impl->toString() : String(); }
 | 
| +    const LChar* characters8() const { return m_impl ? m_impl->characters8() : nullptr; }
 | 
| +    const UChar* characters16() const { return m_impl ? m_impl->characters16() : nullptr; }
 | 
| +
 | 
| +    PassRefPtr<CompressibleStringImpl> impl() const { return m_impl; }
 | 
| +
 | 
| +private:
 | 
| +    void compressString() const;
 | 
| +    void uncompressString() const;
 | 
| +
 | 
| +    mutable RefPtr<CompressibleStringImpl> m_impl;
 | 
| +};
 | 
| +
 | 
| +} // namespace WTF
 | 
| +
 | 
| +using WTF::CompressibleString;
 | 
| +using WTF::CompressibleStringImpl;
 | 
| +
 | 
| +#endif
 | 
| 
 |