summaryrefslogtreecommitdiffstats
path: root/WebCore/fileapi/FileReaderSync.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/fileapi/FileReaderSync.cpp')
-rw-r--r--WebCore/fileapi/FileReaderSync.cpp49
1 files changed, 23 insertions, 26 deletions
diff --git a/WebCore/fileapi/FileReaderSync.cpp b/WebCore/fileapi/FileReaderSync.cpp
index 6c76714..6425bcf 100644
--- a/WebCore/fileapi/FileReaderSync.cpp
+++ b/WebCore/fileapi/FileReaderSync.cpp
@@ -39,6 +39,7 @@
#include "BlobURL.h"
#include "FileReader.h"
#include "ResourceRequest.h"
+#include "ResourceResponse.h"
#include "ScriptExecutionContext.h"
#include "TextEncoding.h"
#include "TextResourceDecoder.h"
@@ -50,7 +51,7 @@ namespace WebCore {
class FileReaderSyncLoader : public ThreadableLoaderClient {
public:
// If the output result is provided, use it. Otherwise, save it as the raw data.
- FileReaderSyncLoader(ScriptString* result);
+ FileReaderSyncLoader(StringBuilder*);
// Returns the http status code.
void start(ScriptExecutionContext*, const ResourceRequest&, ExceptionCode&);
@@ -65,7 +66,7 @@ public:
private:
// The output result. The caller provides this in order to load the binary data directly.
- ScriptString* m_result;
+ StringBuilder* m_builder;
// The raw data. The caller does not provide the above output result and we need to save it here.
Vector<char> m_rawData;
@@ -73,8 +74,8 @@ private:
int m_httpStatusCode;
};
-FileReaderSyncLoader::FileReaderSyncLoader(ScriptString* result)
- : m_result(result)
+FileReaderSyncLoader::FileReaderSyncLoader(StringBuilder* builder)
+ : m_builder(builder)
, m_httpStatusCode(0)
{
}
@@ -100,8 +101,8 @@ void FileReaderSyncLoader::didReceiveResponse(const ResourceResponse& response)
void FileReaderSyncLoader::didReceiveData(const char* data, int lengthReceived)
{
- if (m_result)
- *m_result += String(data, static_cast<unsigned>(lengthReceived));
+ if (m_builder)
+ m_builder->append(data, static_cast<unsigned>(lengthReceived));
else
m_rawData.append(data, static_cast<unsigned>(lengthReceived));
}
@@ -116,37 +117,32 @@ void FileReaderSyncLoader::didFail(const ResourceError&)
m_httpStatusCode = 500;
}
-FileReaderSync::FileReaderSync()
- : m_result("")
-{
-}
-
-const ScriptString& FileReaderSync::readAsBinaryString(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode& ec)
+String FileReaderSync::readAsBinaryString(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode& ec)
{
if (!blob)
- return m_result;
+ return m_builder.toString();
read(scriptExecutionContext, blob, ReadAsBinaryString, ec);
- return m_result;
+ return m_builder.toString();
}
-const ScriptString& FileReaderSync::readAsText(ScriptExecutionContext* scriptExecutionContext, Blob* blob, const String& encoding, ExceptionCode& ec)
+String FileReaderSync::readAsText(ScriptExecutionContext* scriptExecutionContext, Blob* blob, const String& encoding, ExceptionCode& ec)
{
if (!blob)
- return m_result;
+ return m_builder.toString();
m_encoding = encoding;
read(scriptExecutionContext, blob, ReadAsText, ec);
- return m_result;
+ return m_builder.toString();
}
-const ScriptString& FileReaderSync::readAsDataURL(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode& ec)
+String FileReaderSync::readAsDataURL(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode& ec)
{
if (!blob)
- return m_result;
+ return m_builder.toString();
read(scriptExecutionContext, blob, ReadAsDataURL, ec);
- return m_result;
+ return m_builder.toString();
}
void FileReaderSync::read(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ReadType readType, ExceptionCode& ec)
@@ -158,7 +154,7 @@ void FileReaderSync::read(ScriptExecutionContext* scriptExecutionContext, Blob*
ResourceRequest request(urlForReading);
request.setHTTPMethod("GET");
- FileReaderSyncLoader loader((readType == ReadAsBinaryString) ? &m_result : 0);
+ FileReaderSyncLoader loader((readType == ReadAsBinaryString) ? &m_builder : 0);
loader.start(scriptExecutionContext, request, ec);
ThreadableBlobRegistry::unregisterBlobURL(urlForReading);
if (ec)
@@ -169,17 +165,17 @@ void FileReaderSync::read(ScriptExecutionContext* scriptExecutionContext, Blob*
// Nothing to do since we need no conversion.
return;
case ReadAsText:
- convertToText(loader.rawData().data(), loader.rawData().size(), m_result);
+ convertToText(loader.rawData().data(), loader.rawData().size(), m_builder);
return;
case ReadAsDataURL:
- FileReader::convertToDataURL(loader.rawData(), blob->type(), m_result);
+ FileReader::convertToDataURL(loader.rawData(), blob->type(), m_builder);
return;
}
ASSERT_NOT_REACHED();
}
-void FileReaderSync::convertToText(const char* data, int size, ScriptString& result)
+void FileReaderSync::convertToText(const char* data, int size, StringBuilder& builder)
{
if (!size)
return;
@@ -190,8 +186,9 @@ void FileReaderSync::convertToText(const char* data, int size, ScriptString& res
// provided encoding.
// FIXME: consider supporting incremental decoding to improve the perf.
RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("text/plain", m_encoding.isEmpty() ? UTF8Encoding() : TextEncoding(m_encoding));
- result = decoder->decode(data, size);
- result += decoder->flush();
+ builder.clear();
+ builder.append(decoder->decode(data, size));
+ builder.append(decoder->flush());
}
} // namespace WebCore