1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/arc/fileapi/arc_file_system_mounter.h"
#include "base/files/file_path.h"
#include "base/memory/singleton.h"
#include "chrome/browser/ash/arc/fileapi/arc_content_file_system_url_util.h"
#include "chrome/browser/ash/arc/fileapi/arc_documents_provider_util.h"
#include "chromeos/ash/experiences/arc/arc_browser_context_keyed_service_factory_base.h"
#include "content/public/browser/browser_thread.h"
#include "storage/browser/file_system/external_mount_points.h"
using content::BrowserThread;
namespace arc {
namespace {
// Singleton factory for ArcFileSystemMounter.
class ArcFileSystemMounterFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcFileSystemMounter,
ArcFileSystemMounterFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcFileSystemMounterFactory";
static ArcFileSystemMounterFactory* GetInstance() {
return base::Singleton<ArcFileSystemMounterFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcFileSystemMounterFactory>;
ArcFileSystemMounterFactory() = default;
~ArcFileSystemMounterFactory() override = default;
};
} // namespace
// static
ArcFileSystemMounter* ArcFileSystemMounter::GetForBrowserContext(
content::BrowserContext* context) {
return ArcFileSystemMounterFactory::GetForBrowserContext(context);
}
ArcFileSystemMounter::ArcFileSystemMounter(content::BrowserContext* context,
ArcBridgeService* bridge_service) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
storage::ExternalMountPoints* mount_points =
storage::ExternalMountPoints::GetSystemInstance();
mount_points->RegisterFileSystem(
kContentFileSystemMountPointName, storage::kFileSystemTypeArcContent,
storage::FileSystemMountOption(),
base::FilePath(kContentFileSystemMountPointPath));
mount_points->RegisterFileSystem(
kDocumentsProviderMountPointName,
storage::kFileSystemTypeArcDocumentsProvider,
storage::FileSystemMountOption(),
base::FilePath(kDocumentsProviderMountPointPath));
}
ArcFileSystemMounter::~ArcFileSystemMounter() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
storage::ExternalMountPoints* mount_points =
storage::ExternalMountPoints::GetSystemInstance();
mount_points->RevokeFileSystem(kContentFileSystemMountPointName);
mount_points->RevokeFileSystem(kDocumentsProviderMountPointName);
}
// static
void ArcFileSystemMounter::EnsureFactoryBuilt() {
ArcFileSystemMounterFactory::GetInstance();
}
} // namespace arc
|