| // Copyright 2017 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. |
| |
| #ifndef CHROMEOS_DBUS_VIRTUAL_FILE_PROVIDER_CLIENT_H_ |
| #define CHROMEOS_DBUS_VIRTUAL_FILE_PROVIDER_CLIENT_H_ |
| |
| #include <stdint.h> |
| |
| #include <string> |
| |
| #include "base/callback_forward.h" |
| #include "base/files/scoped_file.h" |
| #include "base/macros.h" |
| #include "chromeos/chromeos_export.h" |
| #include "chromeos/dbus/dbus_client.h" |
| |
| namespace chromeos { |
| |
| // VirtualFileProviderClient is used to communicate with the VirtualFileProvider |
| // service. The VirtualFileProvider service provides file descriptors which |
| // forward read requests to Chrome. From the reading process's perspective, the |
| // file descriptor behaves like a regular file descriptor (unlike a pipe, it |
| // supports seek), while actually there is no real file associated with it. |
| class CHROMEOS_EXPORT VirtualFileProviderClient : public DBusClient { |
| public: |
| using OpenFileCallback = |
| base::OnceCallback<void(const std::string& id, base::ScopedFD fd)>; |
| |
| VirtualFileProviderClient(); |
| ~VirtualFileProviderClient() override; |
| |
| // Factory function, creates a new instance and returns ownership. |
| // For normal usage, access the singleton via DBusThreadManager::Get(). |
| static VirtualFileProviderClient* Create(); |
| |
| // Creates a new file descriptor and returns it with a unique ID. |
| // |size| will be used to perform boundary check when FD is seeked. |
| // When the FD is read, the read request is forwarded to the request handler. |
| virtual void OpenFile(int64_t size, OpenFileCallback callback) = 0; |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROMEOS_DBUS_VIRTUAL_FILE_PROVIDER_CLIENT_H_ |