forked from mirrors/gecko-dev
		
	 78807d8776
			
		
	
	
		78807d8776
		
	
	
	
	
		
			
			Replace it with NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION, because it has been the same for a while. MozReview-Commit-ID: 5agRGFyUry1 --HG-- extra : rebase_source : 5388c56b2f6905c6ef969150f0c5b77bf247624d
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | |
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 | |
|  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #include "FileSystemRootDirectoryReader.h"
 | |
| #include "CallbackRunnables.h"
 | |
| #include "nsIGlobalObject.h"
 | |
| #include "mozilla/dom/FileSystemUtils.h"
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace dom {
 | |
| 
 | |
| namespace {
 | |
| 
 | |
| class EntriesCallbackRunnable final : public Runnable
 | |
| {
 | |
| public:
 | |
|   EntriesCallbackRunnable(FileSystemEntriesCallback* aCallback,
 | |
|                           const Sequence<RefPtr<FileSystemEntry>>& aEntries)
 | |
|     : Runnable("EntriesCallbackRunnable")
 | |
|     , mCallback(aCallback)
 | |
|     , mEntries(aEntries)
 | |
|   {
 | |
|     MOZ_ASSERT(aCallback);
 | |
|   }
 | |
| 
 | |
|   NS_IMETHOD
 | |
|   Run() override
 | |
|   {
 | |
|     Sequence<OwningNonNull<FileSystemEntry>> entries;
 | |
|     for (uint32_t i = 0; i < mEntries.Length(); ++i) {
 | |
|       if (!entries.AppendElement(mEntries[i].forget(), fallible)) {
 | |
|         return NS_ERROR_OUT_OF_MEMORY;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     mCallback->HandleEvent(entries);
 | |
|     return NS_OK;
 | |
|   }
 | |
| 
 | |
| private:
 | |
|   RefPtr<FileSystemEntriesCallback> mCallback;
 | |
|   Sequence<RefPtr<FileSystemEntry>> mEntries;
 | |
| };
 | |
| 
 | |
| } // anonymous namespace
 | |
| 
 | |
| NS_IMPL_CYCLE_COLLECTION_INHERITED(FileSystemRootDirectoryReader,
 | |
|                                    FileSystemDirectoryReader, mEntries)
 | |
| 
 | |
| NS_IMPL_ADDREF_INHERITED(FileSystemRootDirectoryReader,
 | |
|                          FileSystemDirectoryReader)
 | |
| NS_IMPL_RELEASE_INHERITED(FileSystemRootDirectoryReader,
 | |
|                           FileSystemDirectoryReader)
 | |
| 
 | |
| NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(FileSystemRootDirectoryReader)
 | |
| NS_INTERFACE_MAP_END_INHERITING(FileSystemDirectoryReader)
 | |
| 
 | |
| FileSystemRootDirectoryReader::FileSystemRootDirectoryReader(FileSystemDirectoryEntry* aParentEntry,
 | |
|                                                              FileSystem* aFileSystem,
 | |
|                                                              const Sequence<RefPtr<FileSystemEntry>>& aEntries)
 | |
|   : FileSystemDirectoryReader(aParentEntry, aFileSystem, nullptr)
 | |
|   , mEntries(aEntries)
 | |
|   , mAlreadyRead(false)
 | |
| {
 | |
|   MOZ_ASSERT(aParentEntry);
 | |
|   MOZ_ASSERT(aFileSystem);
 | |
| }
 | |
| 
 | |
| FileSystemRootDirectoryReader::~FileSystemRootDirectoryReader()
 | |
| {}
 | |
| 
 | |
| void
 | |
| FileSystemRootDirectoryReader::ReadEntries(FileSystemEntriesCallback& aSuccessCallback,
 | |
|                                            const Optional<OwningNonNull<ErrorCallback>>& aErrorCallback,
 | |
|                                            ErrorResult& aRv)
 | |
| {
 | |
|   if (mAlreadyRead) {
 | |
|     RefPtr<EmptyEntriesCallbackRunnable> runnable =
 | |
|       new EmptyEntriesCallbackRunnable(&aSuccessCallback);
 | |
| 
 | |
|     aRv = FileSystemUtils::DispatchRunnable(GetParentObject(), runnable.forget());
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // This object can be used only once.
 | |
|   mAlreadyRead = true;
 | |
| 
 | |
|   RefPtr<EntriesCallbackRunnable> runnable =
 | |
|     new EntriesCallbackRunnable(&aSuccessCallback, mEntries);
 | |
| 
 | |
|   aRv = FileSystemUtils::DispatchRunnable(GetParentObject(), runnable.forget());
 | |
| }
 | |
| 
 | |
| } // dom namespace
 | |
| } // mozilla namespace
 |