blob: ff08d450ca2bdece99551d26922563c517083b5e [file] [log] [blame]
// Copyright 2017 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 VIRTUAL_FILE_PROVIDER_SERVICE_H_
#define VIRTUAL_FILE_PROVIDER_SERVICE_H_
#include <string>
#include <base/files/file_path.h>
#include <base/files/scoped_file.h>
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <base/threading/thread_checker.h>
#include <dbus/exported_object.h>
#include "virtual_file_provider/size_map.h"
namespace dbus {
class Bus;
class MethodCall;
class ObjectProxy;
} // namespace dbus
namespace virtual_file_provider {
// This class handles incoming D-Bus method calls.
class Service {
public:
Service(const base::FilePath& fuse_mount_path, SizeMap* size_map);
~Service();
// Exports D-Bus methods via the system bus and requests the ownership of the
// service name.
bool Initialize();
// Sends read request with the given parameters.
// Chrome is responsible to feed the data to the FD.
void SendReadRequest(const std::string& id,
int64_t offset,
int64_t size,
base::ScopedFD fd);
// Sends a released ID. Chrome is responsible to release resources associated
// with the ID.
void SendIdReleased(const std::string& id);
private:
// Handles OpenFile D-Bus method calls.
// Returns a seekable FD backed by the FUSE file system, and an ID associated
// with the FD.
void OpenFile(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender);
const base::FilePath fuse_mount_path_;
SizeMap* const size_map_;
scoped_refptr<dbus::Bus> bus_;
dbus::ExportedObject* exported_object_ = nullptr;
dbus::ObjectProxy* request_handler_proxy_ = nullptr;
base::ThreadChecker thread_checker_;
base::WeakPtrFactory<Service> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(Service);
};
} // namespace virtual_file_provider
#endif // VIRTUAL_FILE_PROVIDER_SERVICE_H_