summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_data_avail.cpp
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-07-02 23:08:53 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-02 23:08:53 +0000
commitc9aa2f8bfdf74ffae633c7bb1a4d908dda9caed5 (patch)
treed7e5045ac8add9395b2a62242fbdee0eecfd8bfb /core/fpdfapi/parser/cpdf_data_avail.cpp
parent555b41aebe002918c806a8239dcab9ec2c032252 (diff)
downloadpdfium-c9aa2f8bfdf74ffae633c7bb1a4d908dda9caed5.tar.xz
Virtualize Observable<T>::ObservedPtr::OnDestroy() for CPDF_Avail cleanup
This enables more complicated cleanup when an observed object is destroyed. Use it to make documents observable and to allow the CPDF_Avail to cleanup without the need for intermediate class. Change-Id: I3a8e758b7ff542e0a58710eff1ac8017205cbd45 Reviewed-on: https://pdfium-review.googlesource.com/36373 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_data_avail.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_data_avail.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 89b576bdea..a251d6ff61 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -70,17 +70,6 @@ class HintsScope {
UnownedPtr<CPDF_ReadValidator> validator_;
};
-class CPDF_DocumentForAvail : public CPDF_Document {
- public:
- explicit CPDF_DocumentForAvail(CPDF_DataAvail* avail) : m_pAvail(avail) {
- DCHECK(avail);
- }
- ~CPDF_DocumentForAvail() override { m_pAvail->BeforeDocumentDestroyed(); }
-
- private:
- UnownedPtr<CPDF_DataAvail> m_pAvail;
-};
-
} // namespace
CPDF_DataAvail::FileAvail::~FileAvail() {}
@@ -98,9 +87,11 @@ CPDF_DataAvail::CPDF_DataAvail(
CPDF_DataAvail::~CPDF_DataAvail() {
m_pHintTables.reset();
+ if (m_pDocument)
+ m_pDocument->RemoveObserver(this);
}
-void CPDF_DataAvail::BeforeDocumentDestroyed() {
+void CPDF_DataAvail::OnObservableDestroyed() {
m_pDocument = nullptr;
m_pFormAvail.reset();
m_PagesArray.clear();
@@ -1031,7 +1022,8 @@ CPDF_DataAvail::ParseDocument(const char* password) {
// We already returned parsed document.
return std::make_pair(CPDF_Parser::HANDLER_ERROR, nullptr);
}
- auto document = pdfium::MakeUnique<CPDF_DocumentForAvail>(this);
+ auto document = pdfium::MakeUnique<CPDF_Document>();
+ document->AddObserver(this);
CPDF_ReadValidator::Session read_session(GetValidator().Get());
CPDF_Parser::Error error =