Bug 1674428 - Part 2. Add method to collect files that is selected WebKitDirectory. r=dom-core,sefeng
When using Android 13 or later, there is no permission to enumerate directories if on user storage. So `GetFilesHelper` and etc won't work on Android. We have to use content resolver APIs to enumerate files in directory. So I have to add a method to collect files in FilePicker and return DOM Files. Differential Revision: https://phabricator.services.mozilla.com/D228761
This commit is contained in:
@@ -576,6 +576,36 @@ HTMLInputElement::nsFilePickerShownCallback::Done(
|
||||
|
||||
if (StaticPrefs::dom_webkitBlink_dirPicker_enabled() &&
|
||||
mInput->HasAttr(nsGkAtoms::webkitdirectory)) {
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// Android 13 or later cannot enumerate files into user directory due to
|
||||
// no permission. So we store file list into file picker.
|
||||
FallibleTArray<RefPtr<BlobImpl>> filesInWebKitDirectory;
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> iter;
|
||||
if (NS_SUCCEEDED(
|
||||
mFilePicker->GetDomFilesInWebKitDirectory(getter_AddRefs(iter))) &&
|
||||
iter) {
|
||||
nsCOMPtr<nsISupports> supports;
|
||||
|
||||
bool loop = true;
|
||||
while (NS_SUCCEEDED(iter->HasMoreElements(&loop)) && loop) {
|
||||
iter->GetNext(getter_AddRefs(supports));
|
||||
if (supports) {
|
||||
RefPtr<BlobImpl> file = static_cast<File*>(supports.get())->Impl();
|
||||
MOZ_ASSERT(file);
|
||||
if (!filesInWebKitDirectory.AppendElement(file, fallible)) {
|
||||
return nsresult::NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!filesInWebKitDirectory.IsEmpty()) {
|
||||
dispatchChangeEventCallback->Callback(NS_OK, filesInWebKitDirectory);
|
||||
return NS_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
ErrorResult error;
|
||||
GetFilesHelper* helper = mInput->GetOrCreateGetFilesHelper(true, error);
|
||||
if (NS_WARN_IF(error.Failed())) {
|
||||
|
||||
Reference in New Issue
Block a user