Bug 1203588 - Return the same Promise object from HTMLInputElement.getFilesAndDirectories when possible. r=baku
This commit is contained in:
@@ -2527,6 +2527,9 @@ HTMLInputElement::UpdateFileList()
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we (lazily) create a new Promise for GetFilesAndDirectories:
|
||||
mFilesAndDirectoriesPromise = nullptr;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -4884,6 +4887,10 @@ MakeOrReuseFileSystem(const nsAString& aNewLocalRootPath,
|
||||
already_AddRefed<Promise>
|
||||
HTMLInputElement::GetFilesAndDirectories(ErrorResult& aRv)
|
||||
{
|
||||
if (mFilesAndDirectoriesPromise) {
|
||||
return nsRefPtr<Promise>(mFilesAndDirectoriesPromise).forget();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIGlobalObject> global = OwnerDoc()->GetScopeObject();
|
||||
MOZ_ASSERT(global);
|
||||
if (!global) {
|
||||
@@ -4932,6 +4939,11 @@ HTMLInputElement::GetFilesAndDirectories(ErrorResult& aRv)
|
||||
|
||||
p->MaybeResolve(filesAndDirsSeq);
|
||||
|
||||
// Cache the Promise so that repeat getFilesAndDirectories() calls return
|
||||
// the same Promise and array of File and Directory objects until the user
|
||||
// picks different files/directories:
|
||||
mFilesAndDirectoriesPromise = p;
|
||||
|
||||
return p.forget();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user