From 5d0e8432c63a5e7a0b42fd4621c1c454ff49985e Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 22 Sep 2015 15:50:03 -0700 Subject: Merge to XFA: Use std::set<> to track active event handlers. Merge conflicts in JS_Runtime.cpp (cherry picked from commit d8d223127d706aa4961b2c9b0037ab256fce9a8f) Original Review URL: https://codereview.chromium.org/1352393003 . R=thestig@chromium.org Review URL: https://codereview.chromium.org/1365503003 . --- fpdfsdk/src/javascript/JS_Runtime.cpp | 74 ++--------------------------------- 1 file changed, 4 insertions(+), 70 deletions(-) (limited to 'fpdfsdk/src/javascript/JS_Runtime.cpp') diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp index 9996653215..5350e30a21 100644 --- a/fpdfsdk/src/javascript/JS_Runtime.cpp +++ b/fpdfsdk/src/javascript/JS_Runtime.cpp @@ -36,7 +36,6 @@ CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp) : m_pApp(pApp), m_pDocument(NULL), m_bBlocking(FALSE), - m_pFieldEventPath(NULL), m_isolate(NULL), m_isolateManaged(false) { if (CPDFXFA_App::GetInstance()->GetJSERuntime()) { @@ -84,11 +83,9 @@ CJS_Runtime::~CJS_Runtime() { delete m_ContextArray.GetAt(i); m_ContextArray.RemoveAll(); - RemoveEventsInLoop(m_pFieldEventPath); m_pApp = NULL; m_pDocument = NULL; - m_pFieldEventPath = NULL; m_context.Reset(); if (m_isolateManaged) @@ -194,75 +191,12 @@ void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) { } } -FX_BOOL CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName, - JS_EVENT_T eEventType) { - if (m_pFieldEventPath == NULL) { - m_pFieldEventPath = new CJS_FieldEvent; - m_pFieldEventPath->sTargetName = sTargetName; - m_pFieldEventPath->eEventType = eEventType; - m_pFieldEventPath->pNext = NULL; - - return TRUE; - } - - // to search - CJS_FieldEvent* p = m_pFieldEventPath; - CJS_FieldEvent* pLast = m_pFieldEventPath; - while (p) { - if (p->eEventType == eEventType && p->sTargetName == sTargetName) - return FALSE; - - pLast = p; - p = p->pNext; - } - - // to add - CJS_FieldEvent* pNew = new CJS_FieldEvent; - pNew->sTargetName = sTargetName; - pNew->eEventType = eEventType; - pNew->pNext = NULL; - - pLast->pNext = pNew; - - return TRUE; +bool CJS_Runtime::AddEventToSet(const FieldEvent& event) { + return m_FieldEventSet.insert(event).second; } -void CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName, - JS_EVENT_T eEventType) { - FX_BOOL bFind = FALSE; - - CJS_FieldEvent* p = m_pFieldEventPath; - CJS_FieldEvent* pLast = NULL; - while (p) { - if (p->eEventType == eEventType && p->sTargetName == sTargetName) { - bFind = TRUE; - break; - } - - pLast = p; - p = p->pNext; - } - - if (bFind) { - RemoveEventsInLoop(p); - - if (p == m_pFieldEventPath) - m_pFieldEventPath = NULL; - - if (pLast) - pLast->pNext = NULL; - } -} - -void CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart) { - CJS_FieldEvent* p = pStart; - - while (p) { - CJS_FieldEvent* pOld = p; - p = pOld->pNext; - - delete pOld; - } +void CJS_Runtime::RemoveEventFromSet(const FieldEvent& event) { + m_FieldEventSet.erase(event); } v8::Local CJS_Runtime::NewJSContext() { -- cgit v1.2.3