FileReaderSync.cpp [plain text]
#include "config.h"
#include "FileReaderSync.h"
#include "Blob.h"
#include "BlobURL.h"
#include "FileReaderLoader.h"
#include <JavaScriptCore/ArrayBuffer.h>
namespace WebCore {
FileReaderSync::FileReaderSync()
{
}
ExceptionOr<RefPtr<ArrayBuffer>> FileReaderSync::readAsArrayBuffer(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
{
FileReaderLoader loader(FileReaderLoader::ReadAsArrayBuffer, 0);
auto result = startLoading(scriptExecutionContext, loader, blob);
if (result.hasException())
return result.releaseException();
return loader.arrayBufferResult();
}
ExceptionOr<String> FileReaderSync::readAsBinaryString(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
{
FileReaderLoader loader(FileReaderLoader::ReadAsBinaryString, 0);
return startLoadingString(scriptExecutionContext, loader, blob);
}
ExceptionOr<String> FileReaderSync::readAsText(ScriptExecutionContext& scriptExecutionContext, Blob& blob, const String& encoding)
{
FileReaderLoader loader(FileReaderLoader::ReadAsText, 0);
loader.setEncoding(encoding);
return startLoadingString(scriptExecutionContext, loader, blob);
}
ExceptionOr<String> FileReaderSync::readAsDataURL(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
{
FileReaderLoader loader(FileReaderLoader::ReadAsDataURL, 0);
loader.setDataType(blob.type());
return startLoadingString(scriptExecutionContext, loader, blob);
}
static ExceptionOr<void> errorCodeToException(FileError::ErrorCode errorCode)
{
switch (errorCode) {
case FileError::OK:
return { };
case FileError::NOT_FOUND_ERR:
return Exception { NotFoundError };
case FileError::SECURITY_ERR:
return Exception { SecurityError };
case FileError::ABORT_ERR:
return Exception { AbortError };
case FileError::NOT_READABLE_ERR:
return Exception { NotReadableError };
case FileError::ENCODING_ERR:
return Exception { EncodingError };
case FileError::NO_MODIFICATION_ALLOWED_ERR:
return Exception { NoModificationAllowedError };
case FileError::INVALID_STATE_ERR:
return Exception { InvalidStateError };
case FileError::SYNTAX_ERR:
return Exception { SyntaxError };
case FileError::INVALID_MODIFICATION_ERR:
return Exception { InvalidModificationError };
case FileError::QUOTA_EXCEEDED_ERR:
return Exception { QuotaExceededError };
case FileError::TYPE_MISMATCH_ERR:
return Exception { TypeMismatchError };
case FileError::PATH_EXISTS_ERR:
return Exception { NoModificationAllowedError };
}
return Exception { UnknownError };
}
ExceptionOr<void> FileReaderSync::startLoading(ScriptExecutionContext& scriptExecutionContext, FileReaderLoader& loader, Blob& blob)
{
loader.start(&scriptExecutionContext, blob);
return errorCodeToException(loader.errorCode());
}
ExceptionOr<String> FileReaderSync::startLoadingString(ScriptExecutionContext& scriptExecutionContext, FileReaderLoader& loader, Blob& blob)
{
auto result = startLoading(scriptExecutionContext, loader, blob);
if (result.hasException())
return result.releaseException();
return loader.stringResult();
}
}