Bug 761076 - FileHandle: Add optional location parameter to LockedFile.truncate(). r=sicking

This commit is contained in:
Jan Varga 2012-06-04 14:31:22 +02:00
Родитель a2815ce44d
Коммит c40661fb2e
3 изменённых файлов: 35 добавлений и 5 удалений

Просмотреть файл

@ -662,7 +662,9 @@ LockedFile::Append(const jsval& aValue,
}
NS_IMETHODIMP
LockedFile::Truncate(nsIDOMFileRequest** _retval)
LockedFile::Truncate(PRUint64 aLocation,
PRUint8 aOptionalArgCount,
nsIDOMFileRequest** _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
@ -682,12 +684,18 @@ LockedFile::Truncate(nsIDOMFileRequest** _retval)
nsRefPtr<FileRequest> fileRequest = GenerateFileRequest();
NS_ENSURE_TRUE(fileRequest, NS_ERROR_DOM_FILEHANDLE_UNKNOWN_ERR);
PRUint64 location = aOptionalArgCount ? aLocation : mLocation;
nsRefPtr<TruncateHelper> helper =
new TruncateHelper(this, fileRequest, mLocation);
new TruncateHelper(this, fileRequest, location);
nsresult rv = helper->Enqueue();
NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_FILEHANDLE_UNKNOWN_ERR);
if (aOptionalArgCount) {
mLocation = aLocation;
}
fileRequest.forget(_retval);
return NS_OK;
}

Просмотреть файл

@ -16,7 +16,7 @@ dictionary DOMFileMetadataParameters
boolean lastModified;
};
[scriptable, builtinclass, uuid(63055eeb-cc19-468b-bafa-7b7961796340)]
[scriptable, builtinclass, uuid(e1f69cc5-c6ce-4850-bc09-c4211b1d4290)]
interface nsIDOMLockedFile : nsISupports
{
readonly attribute nsIDOMFileHandle fileHandle;
@ -49,8 +49,9 @@ interface nsIDOMLockedFile : nsISupports
nsIDOMFileRequest
append(in jsval value);
[optional_argc]
nsIDOMFileRequest
truncate();
truncate([optional] in unsigned long long location);
nsIDOMFileRequest
flush();

Просмотреть файл

@ -31,7 +31,7 @@
is(lockedFile.location, 100000, "Correct location");
for (let i = 0; i < 10; i++) {
let location = lockedFile.location - 10000
let location = lockedFile.location - 10000;
lockedFile.location = location;
request = lockedFile.truncate();
@ -46,6 +46,27 @@
is(event.target.result.size, location, "Correct size");
}
request = lockedFile.write(testBuffer);
request.onsuccess = grabEventAndContinueHandler;
event = yield;
let location = lockedFile.location;
for (let i = 0; i < 10; i++) {
location -= 10000;
request = lockedFile.truncate(location);
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(lockedFile.location, location, "Correct location");
request = lockedFile.getMetadata({ size: true });
request.onsuccess = grabEventAndContinueHandler;
event = yield;
is(event.target.result.size, location, "Correct size");
}
}
finishTest();