blob: b223829a6358330db14428233f77db84d6788c16 [file] [log] [blame]
// Copyright 2018 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_COMPONENTS_DRIVEFS_PENDING_CONNECTION_MANAGER_H_
#define CHROMEOS_COMPONENTS_DRIVEFS_PENDING_CONNECTION_MANAGER_H_
#include <string>
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/files/scoped_file.h"
#include "base/macros.h"
#include "base/no_destructor.h"
#include "base/unguessable_token.h"
#include "chromeos/chromeos_export.h"
namespace drivefs {
class PendingConnectionManagerTest;
class COMPONENT_EXPORT(DRIVEFS) PendingConnectionManager {
public:
using OpenIpcChannelCallback = base::OnceCallback<void(base::ScopedFD)>;
static PendingConnectionManager& Get();
bool OpenIpcChannel(const std::string& identity, base::ScopedFD ipc_channel);
void ExpectOpenIpcChannel(base::UnguessableToken token,
OpenIpcChannelCallback handler);
void CancelExpectedOpenIpcChannel(base::UnguessableToken token);
private:
friend class base::NoDestructor<PendingConnectionManager>;
friend class PendingConnectionManagerTest;
PendingConnectionManager();
~PendingConnectionManager();
base::flat_map<std::string, OpenIpcChannelCallback>
open_ipc_channel_callbacks_;
DISALLOW_COPY_AND_ASSIGN(PendingConnectionManager);
};
} // namespace drivefs
#endif // CHROMEOS_COMPONENTS_DRIVEFS_PENDING_CONNECTION_MANAGER_H_