| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_CHROMEOS_DRIVEFS_DRIVEFS_NATIVE_MESSAGE_HOST_H_ |
| #define CHROME_BROWSER_CHROMEOS_DRIVEFS_DRIVEFS_NATIVE_MESSAGE_HOST_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback_forward.h" |
| #include "chromeos/components/drivefs/mojom/drivefs_native_messaging.mojom.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| |
| namespace extensions { |
| class NativeMessageHost; |
| } |
| |
| class Profile; |
| |
| namespace drive { |
| |
| // This callback is used by the native message host to initiate a connection |
| // with DriveFS. |
| using CreateNativeHostSessionCallback = base::OnceCallback<void( |
| drivefs::mojom::ExtensionConnectionParamsPtr, |
| mojo::PendingReceiver<drivefs::mojom::NativeMessagingHost>, |
| mojo::PendingRemote<drivefs::mojom::NativeMessagingPort>)>; |
| |
| // Called when an extension wants to initiate a connection with DriveFS. This |
| // function creates a native message host, which will call `callback` when it |
| // has set up the mojo pipes for communication and wants to send the endpoints |
| // to DriveFS. |
| std::unique_ptr<extensions::NativeMessageHost> CreateDriveFsNativeMessageHost( |
| CreateNativeHostSessionCallback callback); |
| |
| // Exposed for testing purposes only. Used internally by |
| // `ConnectToDriveFsNativeMessageExtension` to construct a native message host. |
| std::unique_ptr<extensions::NativeMessageHost> |
| CreateDriveFsInitiatedNativeMessageHostInternal( |
| Profile* profile, |
| mojo::PendingReceiver<drivefs::mojom::NativeMessagingPort> |
| extension_receiver, |
| mojo::PendingRemote<drivefs::mojom::NativeMessagingHost> drivefs_remote); |
| |
| // Called when DriveFS wants to initiate a connection to an extension. This |
| // creates a native message host for the given `extension_id` and passes the |
| // mojo endpoints to the host to create a connection. |
| drivefs::mojom::ExtensionConnectionStatus |
| ConnectToDriveFsNativeMessageExtension( |
| Profile* profile, |
| const std::string& extension_id, |
| mojo::PendingReceiver<drivefs::mojom::NativeMessagingPort> |
| extension_receiver, |
| mojo::PendingRemote<drivefs::mojom::NativeMessagingHost> drivefs_remote); |
| |
| } // namespace drive |
| |
| #endif // CHROME_BROWSER_CHROMEOS_DRIVEFS_DRIVEFS_NATIVE_MESSAGE_HOST_H_ |