blob: 57224d7a3f0333d83aa302942bcd9d4909470f3e [file]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_HOST_PAIRING_REGISTRY_DELEGATE_LINUX_H_
#define REMOTING_HOST_PAIRING_REGISTRY_DELEGATE_LINUX_H_
#include "remoting/protocol/pairing_registry.h"
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
namespace remoting {
class PairingRegistryDelegateLinux
: public protocol::PairingRegistry::Delegate {
public:
// The pairing registry path relative to the configuration directory.
static const base::FilePath::CharType kRegistryDirectory[];
// Determines the registry path and whether unprivileged files should be used
// based on the current user.
PairingRegistryDelegateLinux();
// Used by the native messaging host, which is not run as the network user,
// and PairingRegistryDelegateLinux() won't work.
// `.unprivileged.json` files which do not have the shared secret will only
// be created or read if `use_unprivileged_file` is true.
PairingRegistryDelegateLinux(const base::FilePath& registry_path,
bool use_unprivileged_file);
PairingRegistryDelegateLinux(const PairingRegistryDelegateLinux&) = delete;
PairingRegistryDelegateLinux& operator=(const PairingRegistryDelegateLinux&) =
delete;
~PairingRegistryDelegateLinux() override;
// PairingRegistry::Delegate interface
base::ListValue LoadAll() override;
bool DeleteAll() override;
protocol::PairingRegistry::Pairing Load(
const std::string& client_id) override;
bool Save(const protocol::PairingRegistry::Pairing& pairing) override;
bool Delete(const std::string& client_id) override;
// Returns the default path to the directory used for loading and saving
// paired clients.
static base::FilePath GetDefaultRegistryPath();
// Creates the pairing registry directory and sets the correct owner and
// permissions for the multi-process host.
// Must be run as root.
static bool SetupMultiProcessPairingRegistry();
private:
FRIEND_TEST_ALL_PREFIXES(PairingRegistryDelegateLinuxTest, SaveAndLoad);
FRIEND_TEST_ALL_PREFIXES(PairingRegistryDelegateLinuxTest, Stateless);
const base::FilePath registry_path_;
const bool use_unprivileged_file_ = false;
};
} // namespace remoting
#endif // REMOTING_HOST_PAIRING_REGISTRY_DELEGATE_LINUX_H_