зеркало из https://github.com/mozilla/gecko-dev.git
Bug 761076 - FileHandle: Add optional location parameter to LockedFile.truncate(). r=sicking
This commit is contained in:
Родитель
a2815ce44d
Коммит
c40661fb2e
|
@ -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();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче