summaryrefslogtreecommitdiff
path: root/fpdfsdk/javascript/Annot.cpp
diff options
context:
space:
mode:
authordsinclair <dsinclair@chromium.org>2016-09-07 05:46:55 -0700
committerCommit bot <commit-bot@chromium.org>2016-09-07 05:46:55 -0700
commitce04a458828b45035dab46c13e14a1f0ae67a2b7 (patch)
tree089f5eb29d12518d8de99d9c30dba8da3d441e1f /fpdfsdk/javascript/Annot.cpp
parent0a765b832c5b9dd0a46fb5a25ce09d52dedb336b (diff)
downloadpdfium-ce04a458828b45035dab46c13e14a1f0ae67a2b7.tar.xz
Add observer for BAAnnots from Javascript
This Cl moves the observer code from the CPDFSDK_Widget up into the CPDFSDK_Annot base class and then adds a second observer for CPDFSDK_BAAnnot objects. This allows us to attach an observer to the Annot javascript class which will update its internal pointer to the BAAnnot if the BAAnnot is destroyed by the CPDFSDK_PageView being destroyed. BUG=chromium:642307 Review-Url: https://codereview.chromium.org/2306663002
Diffstat (limited to 'fpdfsdk/javascript/Annot.cpp')
-rw-r--r--fpdfsdk/javascript/Annot.cpp35
1 files changed, 28 insertions, 7 deletions
diff --git a/fpdfsdk/javascript/Annot.cpp b/fpdfsdk/javascript/Annot.cpp
index a23d42f72a..ab84247baa 100644
--- a/fpdfsdk/javascript/Annot.cpp
+++ b/fpdfsdk/javascript/Annot.cpp
@@ -11,6 +11,14 @@
#include "fpdfsdk/javascript/JS_Value.h"
#include "fpdfsdk/javascript/cjs_context.h"
+namespace {
+
+CPDFSDK_BAAnnot* ToBAAnnot(CPDFSDK_Annot* annot) {
+ return static_cast<CPDFSDK_BAAnnot*>(annot);
+}
+
+} // namespace
+
BEGIN_JS_STATIC_CONST(CJS_Annot)
END_JS_STATIC_CONST()
@@ -32,8 +40,12 @@ Annot::~Annot() {}
FX_BOOL Annot::hidden(IJS_Context* cc,
CJS_PropValue& vp,
CFX_WideString& sError) {
+ CPDFSDK_BAAnnot* baAnnot = ToBAAnnot(m_pAnnot);
+ if (!baAnnot)
+ return FALSE;
+
if (vp.IsGetting()) {
- CPDF_Annot* pPDFAnnot = m_BAAnnot->GetPDFAnnot();
+ CPDF_Annot* pPDFAnnot = baAnnot->GetPDFAnnot();
vp << CPDF_Annot::IsAnnotationHidden(pPDFAnnot->GetAnnotDict());
return TRUE;
}
@@ -41,7 +53,7 @@ FX_BOOL Annot::hidden(IJS_Context* cc,
bool bHidden;
vp >> bHidden;
- uint32_t flags = m_BAAnnot->GetFlags();
+ uint32_t flags = baAnnot->GetFlags();
if (bHidden) {
flags |= ANNOTFLAG_HIDDEN;
flags |= ANNOTFLAG_INVISIBLE;
@@ -53,21 +65,25 @@ FX_BOOL Annot::hidden(IJS_Context* cc,
flags &= ~ANNOTFLAG_NOVIEW;
flags |= ANNOTFLAG_PRINT;
}
- m_BAAnnot->SetFlags(flags);
+ baAnnot->SetFlags(flags);
return TRUE;
}
FX_BOOL Annot::name(IJS_Context* cc,
CJS_PropValue& vp,
CFX_WideString& sError) {
+ CPDFSDK_BAAnnot* baAnnot = ToBAAnnot(m_pAnnot);
+ if (!baAnnot)
+ return FALSE;
+
if (vp.IsGetting()) {
- vp << m_BAAnnot->GetAnnotName();
+ vp << baAnnot->GetAnnotName();
return TRUE;
}
CFX_WideString annotName;
vp >> annotName;
- m_BAAnnot->SetAnnotName(annotName);
+ baAnnot->SetAnnotName(annotName);
return TRUE;
}
@@ -80,10 +96,15 @@ FX_BOOL Annot::type(IJS_Context* cc,
return FALSE;
}
- vp << CPDF_Annot::AnnotSubtypeToString(m_BAAnnot->GetAnnotSubtype());
+ CPDFSDK_BAAnnot* baAnnot = ToBAAnnot(m_pAnnot);
+ if (!baAnnot)
+ return FALSE;
+
+ vp << CPDF_Annot::AnnotSubtypeToString(baAnnot->GetAnnotSubtype());
return TRUE;
}
void Annot::SetSDKAnnot(CPDFSDK_BAAnnot* annot) {
- m_BAAnnot = annot;
+ m_pAnnot = annot;
+ m_pObserver.reset(new CPDFSDK_Annot::Observer(&m_pAnnot));
}