Bug 1265767 - Subset of Blink FileSystem API - patch 2 - Entries, r=smaug

This commit is contained in:
Andrea Marchesini
2016-06-07 00:55:16 +02:00
parent c17a9b443c
commit 40668da27c
17 changed files with 341 additions and 41 deletions

View File

@@ -79,6 +79,7 @@
#include "nsIRadioGroupContainer.h"
// input type=file
#include "mozilla/dom/Entry.h"
#include "mozilla/dom/File.h"
#include "mozilla/dom/FileList.h"
#include "nsIFile.h"
@@ -1533,6 +1534,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(HTMLInputElement,
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFileList)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEntries)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(HTMLInputElement,
@@ -1541,6 +1543,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(HTMLInputElement,
NS_IMPL_CYCLE_COLLECTION_UNLINK(mControllers)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFilesOrDirectories)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFileList)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mEntries)
if (tmp->IsSingleLineTextControl(false)) {
tmp->mInputData.mState->Unlink();
}
@@ -3074,6 +3077,16 @@ HTMLInputElement::SetFiles(nsIDOMFileList* aFiles,
AfterSetFilesOrDirectories(aSetValueChanged);
}
void
HTMLInputElement::MozSetDndFilesAndDirectories(const nsTArray<OwningFileOrDirectory>& aFilesOrDirectories)
{
if (Preferences::GetBool("dom.webkitBlink.filesystem.enabled", false)) {
UpdateEntries(aFilesOrDirectories);
}
SetFilesOrDirectories(aFilesOrDirectories, true);
}
void
HTMLInputElement::AfterSetFilesOrDirectories(bool aSetValueChanged)
{
@@ -8183,6 +8196,30 @@ HTMLInputElement::ExploreDirectoryRecursively(bool aSetValueChanged)
helper->AddCallback(callback);
}
void
HTMLInputElement::UpdateEntries(const nsTArray<OwningFileOrDirectory>& aFilesOrDirectories)
{
mEntries.Clear();
nsCOMPtr<nsIGlobalObject> global = OwnerDoc()->GetScopeObject();
MOZ_ASSERT(global);
for (uint32_t i = 0; i < aFilesOrDirectories.Length(); ++i) {
RefPtr<Entry> entry = Entry::Create(global, aFilesOrDirectories[i]);
MOZ_ASSERT(entry);
if (!mEntries.AppendElement(entry, fallible)) {
return;
}
}
}
void
HTMLInputElement::GetWebkitEntries(nsTArray<RefPtr<Entry>>& aSequence)
{
aSequence.AppendElements(mEntries);
}
} // namespace dom
} // namespace mozilla