1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/file_descriptor_info_impl.h"
10 scoped_ptr
<FileDescriptorInfo
> FileDescriptorInfoImpl::Create() {
11 return scoped_ptr
<FileDescriptorInfo
>(new FileDescriptorInfoImpl());
14 FileDescriptorInfoImpl::FileDescriptorInfoImpl() {
17 FileDescriptorInfoImpl::~FileDescriptorInfoImpl() {
20 void FileDescriptorInfoImpl::Share(int id
, base::PlatformFile fd
) {
24 void FileDescriptorInfoImpl::Transfer(int id
, base::ScopedFD fd
) {
25 AddToMapping(id
, fd
.get());
26 owned_descriptors_
.push_back(new base::ScopedFD(fd
.Pass()));
29 base::PlatformFile
FileDescriptorInfoImpl::GetFDAt(size_t i
) const {
30 return mapping_
[i
].first
;
33 int FileDescriptorInfoImpl::GetIDAt(size_t i
) const {
34 return mapping_
[i
].second
;
37 size_t FileDescriptorInfoImpl::GetMappingSize() const {
38 return mapping_
.size();
41 bool FileDescriptorInfoImpl::HasID(int id
) const {
42 for (unsigned i
= 0; i
< mapping_
.size(); ++i
) {
43 if (mapping_
[i
].second
== id
)
50 bool FileDescriptorInfoImpl::OwnsFD(base::PlatformFile file
) const {
51 return owned_descriptors_
.end() !=
53 owned_descriptors_
.begin(), owned_descriptors_
.end(),
54 [file
](const base::ScopedFD
* fd
) { return fd
->get() == file
; });
57 base::ScopedFD
FileDescriptorInfoImpl::ReleaseFD(base::PlatformFile file
) {
61 auto found
= std::find_if(
62 owned_descriptors_
.begin(), owned_descriptors_
.end(),
63 [file
](const base::ScopedFD
* fd
) { return fd
->get() == file
; });
66 owned_descriptors_
.erase(found
);
71 void FileDescriptorInfoImpl::AddToMapping(int id
, base::PlatformFile fd
) {
73 mapping_
.push_back(std::make_pair(fd
, id
));
76 const base::FileHandleMappingVector
& FileDescriptorInfoImpl::GetMapping()
81 base::FileHandleMappingVector
82 FileDescriptorInfoImpl::GetMappingWithIDAdjustment(int delta
) const {
83 base::FileHandleMappingVector result
= mapping_
;
84 // Adding delta to each ID.
85 for (unsigned i
= 0; i
< mapping_
.size(); ++i
)
86 result
[i
].second
+= delta
;
90 } // namespace content