summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader/cache/CachedScript.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/loader/cache/CachedScript.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.cpp55
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