michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* vim:set ts=2 sw=2 sts=2 et cindent: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: #include "mozilla/dom/FileSystemRequestParent.h" michael@0: michael@0: #include "CreateDirectoryTask.h" michael@0: #include "CreateFileTask.h" michael@0: #include "GetFileOrDirectoryTask.h" michael@0: #include "RemoveTask.h" michael@0: michael@0: #include "mozilla/AppProcessChecker.h" michael@0: #include "mozilla/dom/FileSystemBase.h" michael@0: michael@0: namespace mozilla { michael@0: namespace dom { michael@0: michael@0: FileSystemRequestParent::FileSystemRequestParent() michael@0: { michael@0: } michael@0: michael@0: FileSystemRequestParent::~FileSystemRequestParent() michael@0: { michael@0: } michael@0: michael@0: #define FILESYSTEM_REQUEST_PARENT_DISPATCH_ENTRY(name) \ michael@0: case FileSystemParams::TFileSystem##name##Params: { \ michael@0: const FileSystem##name##Params& p = aParams; \ michael@0: mFileSystem = FileSystemBase::FromString(p.filesystem()); \ michael@0: task = new name##Task(mFileSystem, p, this); \ michael@0: break; \ michael@0: } michael@0: michael@0: bool michael@0: FileSystemRequestParent::Dispatch(ContentParent* aParent, michael@0: const FileSystemParams& aParams) michael@0: { michael@0: MOZ_ASSERT(aParent, "aParent should not be null."); michael@0: nsRefPtr task; michael@0: switch (aParams.type()) { michael@0: michael@0: FILESYSTEM_REQUEST_PARENT_DISPATCH_ENTRY(CreateDirectory) michael@0: FILESYSTEM_REQUEST_PARENT_DISPATCH_ENTRY(CreateFile) michael@0: FILESYSTEM_REQUEST_PARENT_DISPATCH_ENTRY(GetFileOrDirectory) michael@0: FILESYSTEM_REQUEST_PARENT_DISPATCH_ENTRY(Remove) michael@0: michael@0: default: { michael@0: NS_RUNTIMEABORT("not reached"); michael@0: break; michael@0: } michael@0: } michael@0: michael@0: if (NS_WARN_IF(!task || !mFileSystem)) { michael@0: // Should never reach here. michael@0: return false; michael@0: } michael@0: michael@0: if (!mFileSystem->IsTesting()) { michael@0: // Check the content process permission. michael@0: michael@0: nsCString access; michael@0: task->GetPermissionAccessType(access); michael@0: michael@0: nsAutoCString permissionName; michael@0: permissionName = mFileSystem->GetPermission(); michael@0: permissionName.AppendLiteral("-"); michael@0: permissionName.Append(access); michael@0: michael@0: if (!AssertAppProcessPermission(aParent, permissionName.get())) { michael@0: return false; michael@0: } michael@0: } michael@0: michael@0: task->Start(); michael@0: return true; michael@0: } michael@0: michael@0: void michael@0: FileSystemRequestParent::ActorDestroy(ActorDestroyReason why) michael@0: { michael@0: if (!mFileSystem) { michael@0: return; michael@0: } michael@0: mFileSystem->Shutdown(); michael@0: mFileSystem = nullptr; michael@0: } michael@0: michael@0: } // namespace dom michael@0: } // namespace mozilla