blob: 1b7f978d525567b8d22ace70f5ead6d0071688ae [file] [log] [blame]
// Copyright 2020 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 "chromeos/dbus/arc/arc_data_snapshotd_client.h"
#include <memory>
#include "base/bind.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/thread_task_runner_handle.h"
#include "dbus/bus.h"
#include "dbus/message.h"
#include "third_party/cros_system_api/dbus/arc-data-snapshotd/dbus-constants.h"
namespace chromeos {
namespace {
void OnVoidDBusMethod(VoidDBusMethodCallback callback,
dbus::Response* response) {
std::move(callback).Run(response != nullptr);
}
class ArcDataSnapshotdClientImpl : public ArcDataSnapshotdClient {
public:
ArcDataSnapshotdClientImpl() {}
~ArcDataSnapshotdClientImpl() override = default;
ArcDataSnapshotdClientImpl(const ArcDataSnapshotdClientImpl&) = delete;
ArcDataSnapshotdClientImpl& operator=(const ArcDataSnapshotdClientImpl&) =
delete;
void GenerateKeyPair(VoidDBusMethodCallback callback) override {
dbus::MethodCall method_call(
arc::data_snapshotd::kArcDataSnapshotdServiceInterface,
arc::data_snapshotd::kGenerateKeyPairMethod);
dbus::MessageWriter writer(&method_call);
proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&OnVoidDBusMethod, std::move(callback)));
}
void WaitForServiceToBeAvailable(
dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback)
override {
proxy_->WaitForServiceToBeAvailable(std::move(callback));
}
protected:
void Init(dbus::Bus* bus) override {
proxy_ = bus->GetObjectProxy(
arc::data_snapshotd::kArcDataSnapshotdServiceName,
dbus::ObjectPath(arc::data_snapshotd::kArcDataSnapshotdServicePath));
}
private:
// Owned by the D-Bus implementation, who outlives this class.
dbus::ObjectProxy* proxy_ = nullptr;
// Note: This should remain the last member so it'll be destroyed and
// invalidate its weak pointers before any other members are destroyed.
base::WeakPtrFactory<ArcDataSnapshotdClientImpl> weak_ptr_factory_{this};
};
} // namespace
ArcDataSnapshotdClient::ArcDataSnapshotdClient() = default;
ArcDataSnapshotdClient::~ArcDataSnapshotdClient() = default;
std::unique_ptr<ArcDataSnapshotdClient> ArcDataSnapshotdClient::Create() {
return std::make_unique<ArcDataSnapshotdClientImpl>();
}
} // namespace chromeos