1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "FileSystem.h"
8 #include "FileSystemRootDirectoryEntry.h"
9 #include "mozilla/dom/FileSystemBinding.h"
10 #include "nsIDUtils.h"
11 
12 namespace mozilla::dom {
13 
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(FileSystem,mParent,mRoot)14 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(FileSystem, mParent, mRoot)
15 
16 NS_IMPL_CYCLE_COLLECTING_ADDREF(FileSystem)
17 NS_IMPL_CYCLE_COLLECTING_RELEASE(FileSystem)
18 
19 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(FileSystem)
20   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
21   NS_INTERFACE_MAP_ENTRY(nsISupports)
22 NS_INTERFACE_MAP_END
23 
24 /* static */
25 already_AddRefed<FileSystem> FileSystem::Create(nsIGlobalObject* aGlobalObject)
26 
27 {
28   MOZ_ASSERT(aGlobalObject);
29 
30   nsID id;
31   nsresult rv = nsID::GenerateUUIDInPlace(id);
32   if (NS_WARN_IF(NS_FAILED(rv))) {
33     return nullptr;
34   }
35 
36   NSID_TrimBracketsUTF16 name(id);
37 
38   RefPtr<FileSystem> fs = new FileSystem(aGlobalObject, name);
39 
40   return fs.forget();
41 }
42 
FileSystem(nsIGlobalObject * aGlobal,const nsAString & aName)43 FileSystem::FileSystem(nsIGlobalObject* aGlobal, const nsAString& aName)
44     : mParent(aGlobal), mName(aName) {
45   MOZ_ASSERT(aGlobal);
46 }
47 
48 FileSystem::~FileSystem() = default;
49 
WrapObject(JSContext * aCx,JS::Handle<JSObject * > aGivenProto)50 JSObject* FileSystem::WrapObject(JSContext* aCx,
51                                  JS::Handle<JSObject*> aGivenProto) {
52   return FileSystem_Binding::Wrap(aCx, this, aGivenProto);
53 }
54 
CreateRoot(const Sequence<RefPtr<FileSystemEntry>> & aEntries)55 void FileSystem::CreateRoot(const Sequence<RefPtr<FileSystemEntry>>& aEntries) {
56   MOZ_ASSERT(!mRoot);
57   mRoot = new FileSystemRootDirectoryEntry(mParent, aEntries, this);
58 }
59 
60 }  // namespace mozilla::dom
61