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

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

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

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

@ -31,7 +31,7 @@
is(lockedFile.location, 100000, "Correct location"); is(lockedFile.location, 100000, "Correct location");
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
let location = lockedFile.location - 10000 let location = lockedFile.location - 10000;
lockedFile.location = location; lockedFile.location = location;
request = lockedFile.truncate(); request = lockedFile.truncate();
@ -46,6 +46,27 @@
is(event.target.result.size, location, "Correct size"); 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(); finishTest();