This source file includes following definitions.
- constructorCustom
- lastModifiedDateAttributeGetterCustom
- lastModifiedAttributeGetterCustom
#include "config.h"
#include "V8File.h"
#include "RuntimeEnabledFeatures.h"
#include "bindings/v8/ExceptionState.h"
#include "bindings/v8/custom/V8BlobCustomHelpers.h"
namespace WebCore {
void V8File::constructorCustom(const v8::FunctionCallbackInfo<v8::Value>& info)
{
ExceptionState exceptionState(ExceptionState::ConstructionContext, "File", info.Holder(), info.GetIsolate());
if (!RuntimeEnabledFeatures::fileConstructorEnabled()) {
exceptionState.throwTypeError("Illegal constructor");
exceptionState.throwIfNeeded();
return;
}
if (info.Length() < 2) {
exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, info.Length()));
exceptionState.throwIfNeeded();
return;
}
uint32_t length = 0;
if (info[0]->IsArray()) {
length = v8::Local<v8::Array>::Cast(info[0])->Length();
} else {
const int sequenceArgumentIndex = 0;
if (toV8Sequence(info[sequenceArgumentIndex], length, info.GetIsolate()).IsEmpty()) {
exceptionState.throwTypeError(ExceptionMessages::notAnArrayTypeArgumentOrValue(sequenceArgumentIndex + 1));
exceptionState.throwIfNeeded();
return;
}
}
V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, fileName, info[1]);
V8BlobCustomHelpers::ParsedProperties properties(true);
if (info.Length() > 2) {
if (!info[2]->IsObject()) {
exceptionState.throwTypeError("The 3rd argument is not of type Object.");
exceptionState.throwIfNeeded();
return;
}
if (!properties.parseBlobPropertyBag(info[2], "File", exceptionState, info.GetIsolate())) {
exceptionState.throwIfNeeded();
return;
}
} else {
properties.setDefaultLastModified();
}
OwnPtr<BlobData> blobData = BlobData::create();
blobData->setContentType(properties.contentType());
v8::Local<v8::Object> blobParts = v8::Local<v8::Object>::Cast(info[0]);
if (!V8BlobCustomHelpers::processBlobParts(blobParts, length, properties.normalizeLineEndingsToNative(), *blobData, info.GetIsolate()))
return;
long long fileSize = blobData->length();
RefPtrWillBeRawPtr<File> file = File::create(fileName, properties.lastModified(), BlobDataHandle::create(blobData.release(), fileSize));
v8SetReturnValue(info, file.release());
}
void V8File::lastModifiedDateAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info)
{
File* file = V8File::toNative(info.Holder());
double lastModified = file->lastModifiedDate();
if (!isValidFileTime(lastModified))
lastModified = currentTimeMS();
v8SetReturnValue(info, v8::Date::New(info.GetIsolate(), lastModified));
}
void V8File::lastModifiedAttributeGetterCustom(const v8::PropertyCallbackInfo<v8::Value>& info)
{
File* file = V8File::toNative(info.Holder());
double lastModified = file->lastModifiedDate();
if (!isValidFileTime(lastModified))
lastModified = currentTimeMS();
v8SetReturnValue(info, floor(lastModified));
}
}