// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ARC_OBB_MOUNTER_SERVICE_H_
#define ARC_OBB_MOUNTER_SERVICE_H_

#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <dbus/exported_object.h>

namespace dbus {
class Bus;
class MethodCall;
}  // namespace dbus

namespace arc {
namespace obb_mounter {

// This class handles incoming D-Bus method calls.
class Service {
 public:
  Service();
  ~Service();

  // Exports D-Bus methods via the given bus and requests the ownership of the
  // service name.
  bool Initialize(scoped_refptr<dbus::Bus> bus);

 private:
  // D-Bus method call handlers:
  void MountObb(dbus::MethodCall* method_call,
                dbus::ExportedObject::ResponseSender response_sender);
  void UnmountObb(dbus::MethodCall* method_call,
                  dbus::ExportedObject::ResponseSender response_sender);

  scoped_refptr<dbus::Bus> bus_;
  dbus::ExportedObject* exported_object_ = nullptr;

  base::WeakPtrFactory<Service> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(Service);
};

}  // namespace obb_mounter
}  // namespace arc

#endif  // ARC_OBB_MOUNTER_SERVICE_H_
