| Index: third_party/WebKit/Source/platform/text/CompressibleString.h
|
| diff --git a/third_party/WebKit/Source/platform/text/CompressibleString.h b/third_party/WebKit/Source/platform/text/CompressibleString.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..03668f689c3b7e206af23357ee1e3fecc19e912d
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/platform/text/CompressibleString.h
|
| @@ -0,0 +1,122 @@
|
| +// 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 "platform/PlatformExport.h"
|
| +#include "wtf/text/Unicode.h"
|
| +#include "wtf/text/WTFString.h"
|
| +
|
| +namespace blink {
|
| +
|
| +// TODO(hajimehoshi): Now these classes are in platform/text to use UMA. Move
|
| +// them to wtf/text.
|
| +
|
| +class PLATFORM_EXPORT CompressibleStringImpl final : public RefCounted<CompressibleStringImpl> {
|
| + WTF_MAKE_NONCOPYABLE(CompressibleStringImpl);
|
| +public:
|
| + static void compressAll();
|
| + static void setPageBackground(bool);
|
| +
|
| + CompressibleStringImpl()
|
| + : m_string()
|
| + , m_isCompressed(false)
|
| + {
|
| + }
|
| +
|
| + explicit CompressibleStringImpl(PassRefPtr<StringImpl>);
|
| + ~CompressibleStringImpl();
|
| +
|
| + bool isEmpty() const { return originalLength() == 0; }
|
| +
|
| + bool isCompressed() const { return m_isCompressed; }
|
| + unsigned originalLength() const { return m_string.length(); }
|
| + bool is8Bit() const { return m_string.is8Bit(); }
|
| +
|
| + unsigned originalContentSizeInBytes() const
|
| + {
|
| + if (is8Bit())
|
| + return originalLength() * sizeof(LChar);
|
| + return originalLength() * sizeof(UChar);
|
| + }
|
| +
|
| + // TODO(hajimehoshi): Update this once we implement compression.
|
| + unsigned currentSizeInBytes() const
|
| + {
|
| + return originalContentSizeInBytes();
|
| + }
|
| +
|
| + const String& toString()
|
| + {
|
| + if (UNLIKELY(isCompressed()))
|
| + decompressString();
|
| + return m_string;
|
| + }
|
| +
|
| + const LChar* characters8()
|
| + {
|
| + return toString().characters8();
|
| + }
|
| +
|
| + const UChar* characters16()
|
| + {
|
| + return toString().characters16();
|
| + }
|
| +
|
| + void compressString();
|
| + void decompressString();
|
| +
|
| +private:
|
| + static bool s_isPageBackground;
|
| +
|
| + String m_string;
|
| + bool m_isCompressed;
|
| +};
|
| +
|
| +class PLATFORM_EXPORT CompressibleString final {
|
| +public:
|
| + CompressibleString()
|
| + : m_impl(nullptr)
|
| + {
|
| + }
|
| +
|
| + CompressibleString(const CompressibleString& rhs)
|
| + : m_impl(rhs.m_impl)
|
| + {
|
| + }
|
| +
|
| + explicit CompressibleString(PassRefPtr<StringImpl> impl)
|
| + : m_impl(impl ? adoptRef(new CompressibleStringImpl(impl)) : nullptr)
|
| + {
|
| + }
|
| +
|
| + 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 ? m_impl->is8Bit() : false; }
|
| +
|
| + const String& toString() const { return m_impl ? m_impl->toString() : emptyString(); }
|
| + const LChar* characters8() const { return m_impl ? m_impl->characters8() : nullptr; }
|
| + const UChar* characters16() const { return m_impl ? m_impl->characters16() : nullptr; }
|
| +
|
| + CompressibleStringImpl* impl() const { return m_impl.get(); }
|
| +
|
| +private:
|
| + void compressString() const { m_impl->compressString(); }
|
| + void decompressString() const { m_impl->decompressString(); }
|
| +
|
| + mutable RefPtr<CompressibleStringImpl> m_impl;
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +using blink::CompressibleString;
|
| +using blink::CompressibleStringImpl;
|
| +
|
| +#endif
|
|
|