1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
// 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_
|