diff options
Diffstat (limited to 'chromium/components/arc/disk_quota/arc_disk_quota_bridge.cc')
-rw-r--r-- | chromium/components/arc/disk_quota/arc_disk_quota_bridge.cc | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/chromium/components/arc/disk_quota/arc_disk_quota_bridge.cc b/chromium/components/arc/disk_quota/arc_disk_quota_bridge.cc new file mode 100644 index 00000000000..2489e90e962 --- /dev/null +++ b/chromium/components/arc/disk_quota/arc_disk_quota_bridge.cc @@ -0,0 +1,103 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/arc/disk_quota/arc_disk_quota_bridge.h" + +#include "base/bind.h" +#include "base/memory/singleton.h" +#include "base/optional.h" +#include "chromeos/dbus/cryptohome_client.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "components/arc/arc_bridge_service.h" +#include "components/arc/arc_browser_context_keyed_service_factory_base.h" + +namespace arc { + +namespace { + +// Singleton factory for ArcDiskQuotaBridge. +class ArcDiskQuotaBridgeFactory + : public internal::ArcBrowserContextKeyedServiceFactoryBase< + ArcDiskQuotaBridge, + ArcDiskQuotaBridgeFactory> { + public: + // Factory name used by ArcBrowserContextKeyedServiceFactoryBase. + static constexpr const char* kName = "ArcDiskQuotaBridgeFactory"; + + static ArcDiskQuotaBridgeFactory* GetInstance() { + return base::Singleton<ArcDiskQuotaBridgeFactory>::get(); + } + + private: + friend base::DefaultSingletonTraits<ArcDiskQuotaBridgeFactory>; + ArcDiskQuotaBridgeFactory() = default; + ~ArcDiskQuotaBridgeFactory() override = default; +}; + +} // namespace + +// static +ArcDiskQuotaBridge* ArcDiskQuotaBridge::GetForBrowserContext( + content::BrowserContext* context) { + return ArcDiskQuotaBridgeFactory::GetForBrowserContext(context); +} + +ArcDiskQuotaBridge::ArcDiskQuotaBridge(content::BrowserContext* context, + ArcBridgeService* bridge_service) + : arc_bridge_service_(bridge_service) { + arc_bridge_service_->disk_quota()->SetHost(this); +} + +ArcDiskQuotaBridge::~ArcDiskQuotaBridge() { + arc_bridge_service_->disk_quota()->SetHost(nullptr); +} + +void ArcDiskQuotaBridge::IsQuotaSupported(IsQuotaSupportedCallback callback) { + chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->IsQuotaSupported( + base::BindOnce( + [](IsQuotaSupportedCallback callback, base::Optional<bool> result) { + LOG_IF(ERROR, !result.has_value()) + << "Failed to retrieve result from IsQuotaSupported call."; + std::move(callback).Run(result.value_or(false)); + }, + std::move(callback))); +} + +void ArcDiskQuotaBridge::GetCurrentSpaceForUid( + uint32_t uid, + GetCurrentSpaceForUidCallback callback) { + chromeos::DBusThreadManager::Get() + ->GetCryptohomeClient() + ->GetCurrentSpaceForUid( + uid, base::BindOnce( + [](GetCurrentSpaceForUidCallback callback, int uid, + base::Optional<int64_t> result) { + LOG_IF(ERROR, !result.has_value()) + << "Failed to retrieve result from " + "GetCurrentSpaceForUid for android uid=" + << uid; + std::move(callback).Run(result.value_or(-1LL)); + }, + std::move(callback), uid)); +} + +void ArcDiskQuotaBridge::GetCurrentSpaceForGid( + uint32_t gid, + GetCurrentSpaceForGidCallback callback) { + chromeos::DBusThreadManager::Get() + ->GetCryptohomeClient() + ->GetCurrentSpaceForGid( + gid, base::BindOnce( + [](GetCurrentSpaceForGidCallback callback, int gid, + base::Optional<int64_t> result) { + LOG_IF(ERROR, !result.has_value()) + << "Failed to retrieve result from " + "GetCurrentSpaceForGid for android gid=" + << gid; + std::move(callback).Run(result.value_or(-1LL)); + }, + std::move(callback), gid)); +} + +} // namespace arc |