diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/loader/cache/CachedScript.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/loader/cache/CachedScript.cpp')
-rw-r--r-- | Source/WebCore/loader/cache/CachedScript.cpp | 55 |
1 files changed, 15 insertions, 40 deletions
diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp index edcecf8c5..48facd7bc 100644 --- a/Source/WebCore/loader/cache/CachedScript.cpp +++ b/Source/WebCore/loader/cache/CachedScript.cpp @@ -29,19 +29,18 @@ #include "CachedResourceClient.h" #include "CachedResourceClientWalker.h" -#include "HTTPHeaderNames.h" #include "HTTPParsers.h" #include "MIMETypeRegistry.h" #include "MemoryCache.h" +#include "ResourceBuffer.h" #include "RuntimeApplicationChecks.h" -#include "SharedBuffer.h" #include "TextResourceDecoder.h" #include <wtf/Vector.h> namespace WebCore { -CachedScript::CachedScript(const ResourceRequest& resourceRequest, const String& charset, SessionID sessionID) - : CachedResource(resourceRequest, Script, sessionID) +CachedScript::CachedScript(const ResourceRequest& resourceRequest, const String& charset) + : CachedResource(resourceRequest, Script) , m_decoder(TextResourceDecoder::create(ASCIILiteral("application/javascript"), charset)) { // It's javascript we want. @@ -66,53 +65,27 @@ String CachedScript::encoding() const String CachedScript::mimeType() const { - return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPHeaderName::ContentType)).convertToASCIILowercase(); + return extractMIMETypeFromMediaType(m_response.httpHeaderField("Content-Type")).lower(); } -StringView CachedScript::script() +const String& CachedScript::script() { - if (!m_data) - return { }; + ASSERT(!isPurgeable()); - if (m_decodingState == NeverDecoded - && TextEncoding(encoding()).isByteBasedEncoding() - && m_data->size() - && charactersAreAllASCII(reinterpret_cast<const LChar*>(m_data->data()), m_data->size())) { - - m_decodingState = DataAndDecodedStringHaveSameBytes; - - // If the encoded and decoded data are the same, there is no decoded data cost! - setDecodedSize(0); - m_decodedDataDeletionTimer.stop(); - - m_scriptHash = StringHasher::computeHashAndMaskTop8Bits(reinterpret_cast<const LChar*>(m_data->data()), m_data->size()); - } - - if (m_decodingState == DataAndDecodedStringHaveSameBytes) - return { reinterpret_cast<const LChar*>(m_data->data()), m_data->size() }; - - if (!m_script) { - m_script = m_decoder->decodeAndFlush(m_data->data(), encodedSize()); - m_scriptHash = m_script.impl()->hash(); - m_decodingState = DataAndDecodedStringHaveDifferentBytes; + if (!m_script && m_data) { + m_script = m_decoder->decode(m_data->data(), encodedSize()); + m_script.append(m_decoder->flush()); setDecodedSize(m_script.sizeInBytes()); } - m_decodedDataDeletionTimer.restart(); + return m_script; } -unsigned CachedScript::scriptHash() -{ - if (m_decodingState == NeverDecoded) - script(); - return m_scriptHash; -} - -void CachedScript::finishLoading(SharedBuffer* data) +void CachedScript::finishLoading(ResourceBuffer* data) { m_data = data; - setEncodedSize(data ? data->size() : 0); + setEncodedSize(m_data.get() ? m_data->size() : 0); CachedResource::finishLoading(data); } @@ -120,12 +93,14 @@ void CachedScript::destroyDecodedData() { m_script = String(); setDecodedSize(0); + if (!MemoryCache::shouldMakeResourcePurgeableOnEviction() && isSafeToMakePurgeable()) + makePurgeable(true); } #if ENABLE(NOSNIFF) bool CachedScript::mimeTypeAllowedByNosniff() const { - return parseContentTypeOptionsHeader(m_response.httpHeaderField(HTTPHeaderName::XContentTypeOptions)) != ContentTypeOptionsNosniff || MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType()); + return !parseContentTypeOptionsHeader(m_response.httpHeaderField("X-Content-Type-Options")) == ContentTypeOptionsNosniff || MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType()); } #endif |