Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
fake_file_access.cpp
Go to the documentation of this file.
1
// Copyright 2017 The PDFium Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#
include
"testing/fake_file_access.h"
6
7
#
include
<
utility
>
8
9
#
include
"core/fxcrt/check.h"
10
#
include
"core/fxcrt/fx_system.h"
11
12
class
FileAccessWrapper
final
:
public
FPDF_FILEACCESS {
13
public
:
14
explicit
FileAccessWrapper
(
FakeFileAccess
* simulator)
15
:
simulator_
(
simulator
) {
16
m_FileLen = simulator_->GetFileSize();
17
m_GetBlock = &GetBlockImpl;
18
m_Param =
this
;
19
}
20
21
static
int
GetBlockImpl
(
void
* param,
22
unsigned
long
position,
23
unsigned
char
* pBuf,
24
unsigned
long
size) {
25
return
static_cast
<FileAccessWrapper*>(param)->simulator_->GetBlock(
26
position, pBuf, size);
27
}
28
29
private
:
30
UnownedPtr
<
FakeFileAccess
> simulator_;
31
};
32
33
class
FileAvailImpl
final
:
public
FX_FILEAVAIL {
34
public
:
35
explicit
FileAvailImpl
(
FakeFileAccess
* simulator) :
simulator_
(
simulator
) {
36
version = 1;
37
IsDataAvail = &IsDataAvailImpl;
38
}
39
40
static
FPDF_BOOL
IsDataAvailImpl
(FX_FILEAVAIL* pThis,
41
size_t offset,
42
size_t size) {
43
return
static_cast
<FileAvailImpl*>(pThis)->simulator_->IsDataAvail(offset,
44
size);
45
}
46
47
private
:
48
UnownedPtr
<
FakeFileAccess
> simulator_;
49
};
50
51
class
DownloadHintsImpl
final
:
public
FX_DOWNLOADHINTS {
52
public
:
53
explicit
DownloadHintsImpl
(
FakeFileAccess
* simulator)
54
:
simulator_
(
simulator
) {
55
version = 1;
56
AddSegment = &AddSegmentImpl;
57
}
58
59
static
void
AddSegmentImpl
(FX_DOWNLOADHINTS* pThis,
60
size_t offset,
61
size_t size) {
62
return
static_cast
<DownloadHintsImpl*>(pThis)->simulator_->AddSegment(
63
offset, size);
64
}
65
66
private
:
67
UnownedPtr
<
FakeFileAccess
> simulator_;
68
};
69
70
FakeFileAccess
::
FakeFileAccess
(FPDF_FILEACCESS* file_access)
71
:
file_access_
(
file_access
),
72
file_access_wrapper_
(
std
::
make_unique
<
FileAccessWrapper
>(
this
)),
73
file_avail_
(
std
::
make_unique
<
FileAvailImpl
>(
this
)),
74
download_hints_
(
std
::
make_unique
<
DownloadHintsImpl
>(
this
)) {
75
DCHECK
(file_access_);
76
}
77
78
FakeFileAccess
::~
FakeFileAccess
() =
default
;
79
80
FPDF_FILEACCESS*
FakeFileAccess
::
GetFileAccess
()
const
{
81
return
file_access_wrapper_.get();
82
}
83
84
FX_FILEAVAIL*
FakeFileAccess
::
GetFileAvail
()
const
{
85
return
file_avail_.get();
86
}
87
88
FX_DOWNLOADHINTS*
FakeFileAccess
::
GetDownloadHints
()
const
{
89
return
download_hints_.get();
90
}
91
92
FPDF_BOOL
FakeFileAccess
::
IsDataAvail
(size_t offset, size_t size)
const
{
93
return
available_data_.Contains(RangeSet::Range(offset, offset + size));
94
}
95
96
void
FakeFileAccess
::
AddSegment
(size_t offset, size_t size) {
97
requested_data_.Union(RangeSet::Range(offset, offset + size));
98
}
99
100
unsigned
long
FakeFileAccess
::
GetFileSize
() {
101
return
file_access_->m_FileLen;
102
}
103
104
int
FakeFileAccess
::
GetBlock
(
unsigned
long
position,
105
unsigned
char
* pBuf,
106
unsigned
long
size) {
107
if
(!pBuf || !size)
108
return
false
;
109
110
if
(!IsDataAvail(
static_cast
<size_t>(position),
static_cast
<size_t>(size)))
111
return
false
;
112
113
return
file_access_->m_GetBlock(file_access_->m_Param, position, pBuf, size);
114
}
115
116
void
FakeFileAccess
::
SetRequestedDataAvailable
() {
117
available_data_.Union(requested_data_);
118
requested_data_.Clear();
119
}
120
121
void
FakeFileAccess
::
SetWholeFileAvailable
() {
122
available_data_.Union(RangeSet::Range(0,
static_cast
<size_t>(GetFileSize())));
123
requested_data_.Clear();
124
}
DCHECK
#define DCHECK
Definition
check.h:33
DownloadHintsImpl::DownloadHintsImpl
DownloadHintsImpl(FakeFileAccess *simulator)
Definition
fake_file_access.cpp:53
DownloadHintsImpl::AddSegmentImpl
static void AddSegmentImpl(FX_DOWNLOADHINTS *pThis, size_t offset, size_t size)
Definition
fake_file_access.cpp:59
FakeFileAccess
Definition
fake_file_access.h:19
FakeFileAccess::SetRequestedDataAvailable
void SetRequestedDataAvailable()
Definition
fake_file_access.cpp:116
FakeFileAccess::SetWholeFileAvailable
void SetWholeFileAvailable()
Definition
fake_file_access.cpp:121
FakeFileAccess::AddSegment
void AddSegment(size_t offset, size_t size)
Definition
fake_file_access.cpp:96
FakeFileAccess::IsDataAvail
FPDF_BOOL IsDataAvail(size_t offset, size_t size) const
Definition
fake_file_access.cpp:92
FakeFileAccess::GetBlock
int GetBlock(unsigned long position, unsigned char *pBuf, unsigned long size)
Definition
fake_file_access.cpp:104
FakeFileAccess::FakeFileAccess
FakeFileAccess(FPDF_FILEACCESS *file_access)
Definition
fake_file_access.cpp:70
FakeFileAccess::GetDownloadHints
FX_DOWNLOADHINTS * GetDownloadHints() const
Definition
fake_file_access.cpp:88
FakeFileAccess::GetFileSize
unsigned long GetFileSize()
Definition
fake_file_access.cpp:100
FakeFileAccess::~FakeFileAccess
~FakeFileAccess()
FakeFileAccess::GetFileAvail
FX_FILEAVAIL * GetFileAvail() const
Definition
fake_file_access.cpp:84
FakeFileAccess::GetFileAccess
FPDF_FILEACCESS * GetFileAccess() const
Definition
fake_file_access.cpp:80
FileAccessWrapper::FileAccessWrapper
FileAccessWrapper(FakeFileAccess *simulator)
Definition
fake_file_access.cpp:14
FileAccessWrapper::GetBlockImpl
static int GetBlockImpl(void *param, unsigned long position, unsigned char *pBuf, unsigned long size)
Definition
fake_file_access.cpp:21
FileAvailImpl::FileAvailImpl
FileAvailImpl(FakeFileAccess *simulator)
Definition
fake_file_access.cpp:35
FileAvailImpl::IsDataAvailImpl
static FPDF_BOOL IsDataAvailImpl(FX_FILEAVAIL *pThis, size_t offset, size_t size)
Definition
fake_file_access.cpp:40
fxcrt::UnownedPtr
Definition
unowned_ptr.h:76
qtwebengine
src
3rdparty
chromium
third_party
pdfium
testing
fake_file_access.cpp
Generated on
for Qt by
1.18.0