Bug 1203588 - Return the same Promise object from HTMLInputElement.getFilesAndDirectories when possible. r=baku

This commit is contained in:
Jonathan Watt
2015-08-31 13:37:23 +01:00
parent c415a2dcd6
commit 7d7b7eb6b7
2 changed files with 13 additions and 0 deletions

View File

@@ -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();
}