diff options
author | Artem Strygin <art-snake@yandex-team.ru> | 2017-07-27 14:01:32 +0300 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-07-28 00:03:54 +0000 |
commit | 834ebece214f06c6e9fda803ab321e8453b3a54b (patch) | |
tree | 259c4aead897943a48c99016d17cd63a04de5d12 /core/fpdfapi/parser/cpdf_read_validator.h | |
parent | 672a1721620c3f4e62fe6adfaceb929d423ae31f (diff) | |
download | pdfium-834ebece214f06c6e9fda803ab321e8453b3a54b.tar.xz |
Implement read validator.
The wrapper for IFX_SeekableReadStream.
Which allow us to check data availability on read request
and request downloading of non available data on fly.
Change-Id: I27c66cd58f43f8432f73104cc3f4c980515a9b56
Reviewed-on: https://pdfium-review.googlesource.com/9050
Commit-Queue: Art Snake <art-snake@yandex-team.ru>
Reviewed-by: (OOO Jul 28 - Aug 8) dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_read_validator.h')
-rw-r--r-- | core/fpdfapi/parser/cpdf_read_validator.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/core/fpdfapi/parser/cpdf_read_validator.h b/core/fpdfapi/parser/cpdf_read_validator.h new file mode 100644 index 0000000000..da8acfe23b --- /dev/null +++ b/core/fpdfapi/parser/cpdf_read_validator.h @@ -0,0 +1,48 @@ +// Copyright 2017 PDFium 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 CORE_FPDFAPI_PARSER_CPDF_READ_VALIDATOR_H_ +#define CORE_FPDFAPI_PARSER_CPDF_READ_VALIDATOR_H_ + +#include "core/fpdfapi/parser/cpdf_data_avail.h" + +class CPDF_ReadValidator : public IFX_SeekableReadStream { + public: + template <typename T, typename... Args> + friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args); + + void SetDownloadHints(CPDF_DataAvail::DownloadHints* hints) { + hints_ = hints; + } + + bool read_error() const { return read_error_; } + bool has_unavailable_data() const { return has_unavailable_data_; } + + bool has_read_problems() const { + return read_error() || has_unavailable_data(); + } + + void ResetErrors(); + + // IFX_SeekableReadStream overrides: + bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; + FX_FILESIZE GetSize() override; + + private: + CPDF_ReadValidator(const CFX_RetainPtr<IFX_SeekableReadStream>& file_read, + CPDF_DataAvail::FileAvail* file_avail); + ~CPDF_ReadValidator() override; + + void ScheduleDownload(FX_FILESIZE offset, size_t size); + + CFX_RetainPtr<IFX_SeekableReadStream> file_read_; + CFX_UnownedPtr<CPDF_DataAvail::FileAvail> file_avail_; + + CFX_UnownedPtr<CPDF_DataAvail::DownloadHints> hints_; + + bool read_error_; + bool has_unavailable_data_; +}; + +#endif // CORE_FPDFAPI_PARSER_CPDF_READ_VALIDATOR_H_ |