1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // Copyright (c) 2011 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 IPC_IPC_PLATFORM_FILE_H_
- #define IPC_IPC_PLATFORM_FILE_H_
- #include "base/files/file.h"
- #include "base/process/process.h"
- #include "build/build_config.h"
- #include "ipc/ipc_message_support_export.h"
- #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
- #include "base/file_descriptor_posix.h"
- #endif
- namespace IPC {
- #if BUILDFLAG(IS_WIN)
- class IPC_MESSAGE_SUPPORT_EXPORT PlatformFileForTransit {
- public:
- // Creates an invalid platform file.
- PlatformFileForTransit();
- // Creates a platform file that takes unofficial ownership of |handle|. Note
- // that ownership is not handled by a Scoped* class due to usage patterns of
- // this class and its POSIX counterpart [base::FileDescriptor]. When this
- // class is used as an input to an IPC message, the IPC subsystem will close
- // |handle|. When this class is used as the output from an IPC message, the
- // receiver is expected to take ownership of |handle|.
- explicit PlatformFileForTransit(HANDLE handle);
- // Comparison operators.
- bool operator==(const PlatformFileForTransit& platform_file) const;
- bool operator!=(const PlatformFileForTransit& platform_file) const;
- HANDLE GetHandle() const;
- bool IsValid() const;
- private:
- HANDLE handle_;
- };
- #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
- typedef base::FileDescriptor PlatformFileForTransit;
- #endif
- inline PlatformFileForTransit InvalidPlatformFileForTransit() {
- #if BUILDFLAG(IS_WIN)
- return PlatformFileForTransit();
- #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
- return base::FileDescriptor();
- #endif
- }
- inline base::PlatformFile PlatformFileForTransitToPlatformFile(
- const PlatformFileForTransit& transit) {
- #if BUILDFLAG(IS_WIN)
- return transit.GetHandle();
- #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
- return transit.fd;
- #endif
- }
- inline base::File PlatformFileForTransitToFile(
- const PlatformFileForTransit& transit) {
- #if BUILDFLAG(IS_WIN)
- return base::File(transit.GetHandle());
- #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
- return base::File(transit.fd);
- #endif
- }
- // Creates a new handle that can be passed through IPC. The result must be
- // passed to the IPC layer as part of a message, or else it will leak.
- IPC_MESSAGE_SUPPORT_EXPORT PlatformFileForTransit
- GetPlatformFileForTransit(base::PlatformFile file, bool close_source_handle);
- // Creates a new handle that can be passed through IPC. The result must be
- // passed to the IPC layer as part of a message, or else it will leak.
- // Note that this function takes ownership of |file|.
- IPC_MESSAGE_SUPPORT_EXPORT PlatformFileForTransit
- TakePlatformFileForTransit(base::File file);
- } // namespace IPC
- #endif // IPC_IPC_PLATFORM_FILE_H_
|