mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2025-02-26 20:03:26 +03:00
55 lines
1.7 KiB
C++
55 lines
1.7 KiB
C++
// Copyright 2021 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_TEST_SCOPED_DEV_ZERO_FUCHSIA_H_
|
|
#define BASE_TEST_SCOPED_DEV_ZERO_FUCHSIA_H_
|
|
|
|
#include <lib/fdio/namespace.h>
|
|
|
|
#include "base/memory/ref_counted.h"
|
|
#include "base/memory/scoped_refptr.h"
|
|
#include "base/threading/sequence_bound.h"
|
|
#include "base/threading/thread.h"
|
|
|
|
namespace base {
|
|
|
|
// An object that causes /dev/zero to exist during its lifetime. A reference to
|
|
// this class may be held by tests that require access to /dev/zero for the
|
|
// lifetime of that need.
|
|
class ScopedDevZero final : public RefCounted<ScopedDevZero> {
|
|
public:
|
|
REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();
|
|
|
|
// Returns a reference to the process-global /dev/zero. This must only be
|
|
// called, and the returned reference released, on the main thread. Returns
|
|
// null in case of failure to create the instance. It is good practice for
|
|
// tests to ASSERT the returned pointer.
|
|
static scoped_refptr<ScopedDevZero> Get();
|
|
|
|
ScopedDevZero(const ScopedDevZero&) = delete;
|
|
ScopedDevZero operator=(const ScopedDevZero&) = delete;
|
|
|
|
private:
|
|
friend class RefCounted<ScopedDevZero>;
|
|
class Server;
|
|
|
|
ScopedDevZero();
|
|
~ScopedDevZero();
|
|
|
|
// Spins off the server thread and binds its pesudo-dir to /dev, returning
|
|
// true if all goes well, or false in case of any error.
|
|
bool Initialize();
|
|
|
|
// A raw pointer to the process's single instance. Multiple references to this
|
|
// instance may be handed out to consumers.
|
|
static ScopedDevZero* instance_;
|
|
Thread io_thread_;
|
|
fdio_ns_t* global_namespace_ = nullptr;
|
|
SequenceBound<Server> server_;
|
|
};
|
|
|
|
} // namespace base
|
|
|
|
#endif // BASE_TEST_SCOPED_DEV_ZERO_FUCHSIA_H_
|