diff --git a/fxjs/cjs_event_context.cpp b/fxjs/cjs_event_context.cpp
index 0f28e9e..8584ad4 100644
--- a/fxjs/cjs_event_context.cpp
+++ b/fxjs/cjs_event_context.cpp
@@ -101,10 +101,6 @@
   return pJSField;
 }
 
-void CJS_EventContext::OnApp_Init() {
-  Initialize(JET_APP_INIT);
-}
-
 void CJS_EventContext::OnDoc_Open(const WideString& strTargetName) {
   Initialize(JET_DOC_OPEN);
   m_strTargetName = strTargetName;
@@ -295,130 +291,10 @@
   m_bWillCommit = true;
 }
 
-void CJS_EventContext::OnScreen_Focus(bool bModifier,
-                                      bool bShift,
-                                      CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_FOCUS);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_Blur(bool bModifier,
-                                     bool bShift,
-                                     CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_BLUR);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_Open(bool bModifier,
-                                     bool bShift,
-                                     CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_OPEN);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_Close(bool bModifier,
-                                      bool bShift,
-                                      CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_CLOSE);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_MouseDown(bool bModifier,
-                                          bool bShift,
-                                          CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_MOUSEDOWN);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_MouseUp(bool bModifier,
-                                        bool bShift,
-                                        CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_MOUSEUP);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_MouseEnter(bool bModifier,
-                                           bool bShift,
-                                           CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_MOUSEENTER);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_MouseExit(bool bModifier,
-                                          bool bShift,
-                                          CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_MOUSEEXIT);
-
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_InView(bool bModifier,
-                                       bool bShift,
-                                       CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_INVIEW);
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnScreen_OutView(bool bModifier,
-                                        bool bShift,
-                                        CPDFSDK_Annot* pScreen) {
-  Initialize(JET_SCREEN_OUTVIEW);
-  m_bModifier = bModifier;
-  m_bShift = bShift;
-  m_pTargetAnnot.Reset(pScreen);
-}
-
-void CJS_EventContext::OnLink_MouseUp() {
-  Initialize(JET_LINK_MOUSEUP);
-}
-
-void CJS_EventContext::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
-  Initialize(JET_BOOKMARK_MOUSEUP);
-  m_pTargetBookMark = pBookMark;
-}
-
-void CJS_EventContext::OnMenu_Exec(const WideString& strTargetName) {
-  Initialize(JET_MENU_EXEC);
-  m_strTargetName = strTargetName;
-}
-
 void CJS_EventContext::OnExternal_Exec() {
   Initialize(JET_EXTERNAL_EXEC);
 }
 
-void CJS_EventContext::OnBatch_Exec() {
-  Initialize(JET_BATCH_EXEC);
-}
-
-void CJS_EventContext::OnConsole_Exec() {
-  Initialize(JET_CONSOLE_EXEC);
-}
-
 void CJS_EventContext::Initialize(JS_EVENT_T type) {
   m_eEventType = type;
   m_strTargetName.clear();
@@ -439,7 +315,6 @@
   m_bFieldFull = false;
   m_pbRc = nullptr;
   m_bRcDu = false;
-  m_pTargetBookMark = nullptr;
   m_pTargetAnnot.Reset();
   m_bValid = true;
 }
@@ -452,10 +327,6 @@
   switch (m_eEventType) {
     case JET_FIELD_MOUSEDOWN:
     case JET_FIELD_MOUSEUP:
-    case JET_SCREEN_MOUSEDOWN:
-    case JET_SCREEN_MOUSEUP:
-    case JET_BOOKMARK_MOUSEUP:
-    case JET_LINK_MOUSEUP:
     case JET_FIELD_KEYSTROKE:
       return true;
     default:
@@ -469,14 +340,6 @@
 
 ByteStringView CJS_EventContext::Name() const {
   switch (m_eEventType) {
-    case JET_APP_INIT:
-      return "Init";
-    case JET_BATCH_EXEC:
-      return "Exec";
-    case JET_BOOKMARK_MOUSEUP:
-      return "Mouse Up";
-    case JET_CONSOLE_EXEC:
-      return "Exec";
     case JET_DOC_DIDPRINT:
       return "DidPrint";
     case JET_DOC_DIDSAVE:
@@ -492,22 +355,16 @@
     case JET_EXTERNAL_EXEC:
       return "Exec";
     case JET_FIELD_FOCUS:
-    case JET_SCREEN_FOCUS:
       return "Focus";
     case JET_FIELD_BLUR:
-    case JET_SCREEN_BLUR:
       return "Blur";
     case JET_FIELD_MOUSEDOWN:
-    case JET_SCREEN_MOUSEDOWN:
       return "Mouse Down";
     case JET_FIELD_MOUSEUP:
-    case JET_SCREEN_MOUSEUP:
       return "Mouse Up";
     case JET_FIELD_MOUSEENTER:
-    case JET_SCREEN_MOUSEENTER:
       return "Mouse Enter";
     case JET_FIELD_MOUSEEXIT:
-    case JET_SCREEN_MOUSEEXIT:
       return "Mouse Exit";
     case JET_FIELD_CALCULATE:
       return "Calculate";
@@ -517,21 +374,13 @@
       return "Keystroke";
     case JET_FIELD_VALIDATE:
       return "Validate";
-    case JET_LINK_MOUSEUP:
-      return "Mouse Up";
-    case JET_MENU_EXEC:
-      return "Exec";
     case JET_PAGE_OPEN:
-    case JET_SCREEN_OPEN:
       return "Open";
     case JET_PAGE_CLOSE:
-    case JET_SCREEN_CLOSE:
       return "Close";
-    case JET_SCREEN_INVIEW:
     case JET_PAGE_INVIEW:
       return "InView";
     case JET_PAGE_OUTVIEW:
-    case JET_SCREEN_OUTVIEW:
       return "OutView";
     default:
       return "";
@@ -540,14 +389,6 @@
 
 ByteStringView CJS_EventContext::Type() const {
   switch (m_eEventType) {
-    case JET_APP_INIT:
-      return "App";
-    case JET_BATCH_EXEC:
-      return "Batch";
-    case JET_BOOKMARK_MOUSEUP:
-      return "BookMark";
-    case JET_CONSOLE_EXEC:
-      return "Console";
     case JET_DOC_DIDPRINT:
     case JET_DOC_DIDSAVE:
     case JET_DOC_OPEN:
@@ -568,21 +409,6 @@
     case JET_FIELD_KEYSTROKE:
     case JET_FIELD_VALIDATE:
       return "Field";
-    case JET_SCREEN_FOCUS:
-    case JET_SCREEN_BLUR:
-    case JET_SCREEN_OPEN:
-    case JET_SCREEN_CLOSE:
-    case JET_SCREEN_MOUSEDOWN:
-    case JET_SCREEN_MOUSEUP:
-    case JET_SCREEN_MOUSEENTER:
-    case JET_SCREEN_MOUSEEXIT:
-    case JET_SCREEN_INVIEW:
-    case JET_SCREEN_OUTVIEW:
-      return "Screen";
-    case JET_LINK_MOUSEUP:
-      return "Link";
-    case JET_MENU_EXEC:
-      return "Menu";
     case JET_PAGE_OPEN:
     case JET_PAGE_CLOSE:
     case JET_PAGE_INVIEW:
diff --git a/fxjs/cjs_event_context.h b/fxjs/cjs_event_context.h
index 0a368ee..2de4826 100644
--- a/fxjs/cjs_event_context.h
+++ b/fxjs/cjs_event_context.h
@@ -18,10 +18,11 @@
 
 class CJS_Field;
 class CJS_Runtime;
+class CPDFSDK_Annot;
+class CPDFSDK_FormFillEnvironment;
 
 enum JS_EVENT_T {
   JET_UNKNOWN,
-  JET_APP_INIT,
   JET_DOC_OPEN,
   JET_DOC_WILLPRINT,
   JET_DOC_DIDPRINT,
@@ -42,22 +43,7 @@
   JET_FIELD_VALIDATE,
   JET_FIELD_CALCULATE,
   JET_FIELD_FORMAT,
-  JET_SCREEN_FOCUS,
-  JET_SCREEN_BLUR,
-  JET_SCREEN_OPEN,
-  JET_SCREEN_CLOSE,
-  JET_SCREEN_MOUSEDOWN,
-  JET_SCREEN_MOUSEUP,
-  JET_SCREEN_MOUSEENTER,
-  JET_SCREEN_MOUSEEXIT,
-  JET_SCREEN_INVIEW,
-  JET_SCREEN_OUTVIEW,
-  JET_BATCH_EXEC,
-  JET_MENU_EXEC,
-  JET_CONSOLE_EXEC,
   JET_EXTERNAL_EXEC,
-  JET_BOOKMARK_MOUSEUP,
-  JET_LINK_MOUSEUP
 };
 
 class CJS_EventContext final : public IJS_EventContext {
@@ -67,7 +53,6 @@
 
   // IJS_EventContext
   Optional<IJS_Runtime::JS_Error> RunScript(const WideString& script) override;
-  void OnApp_Init() override;
   void OnDoc_Open(const WideString& strTargetName) override;
   void OnDoc_WillPrint() override;
   void OnDoc_DidPrint() override;
@@ -123,41 +108,6 @@
                         CPDF_FormField* pTarget,
                         WideString* Value,
                         bool* bRc) override;
-  void OnScreen_Focus(bool bModifier,
-                      bool bShift,
-                      CPDFSDK_Annot* pScreen) override;
-  void OnScreen_Blur(bool bModifier,
-                     bool bShift,
-                     CPDFSDK_Annot* pScreen) override;
-  void OnScreen_Open(bool bModifier,
-                     bool bShift,
-                     CPDFSDK_Annot* pScreen) override;
-  void OnScreen_Close(bool bModifier,
-                      bool bShift,
-                      CPDFSDK_Annot* pScreen) override;
-  void OnScreen_MouseDown(bool bModifier,
-                          bool bShift,
-                          CPDFSDK_Annot* pScreen) override;
-  void OnScreen_MouseUp(bool bModifier,
-                        bool bShift,
-                        CPDFSDK_Annot* pScreen) override;
-  void OnScreen_MouseEnter(bool bModifier,
-                           bool bShift,
-                           CPDFSDK_Annot* pScreen) override;
-  void OnScreen_MouseExit(bool bModifier,
-                          bool bShift,
-                          CPDFSDK_Annot* pScreen) override;
-  void OnScreen_InView(bool bModifier,
-                       bool bShift,
-                       CPDFSDK_Annot* pScreen) override;
-  void OnScreen_OutView(bool bModifier,
-                        bool bShift,
-                        CPDFSDK_Annot* pScreen) override;
-  void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override;
-  void OnLink_MouseUp() override;
-  void OnMenu_Exec(const WideString& strTargetName) override;
-  void OnBatch_Exec() override;
-  void OnConsole_Exec() override;
   void OnExternal_Exec() override;
 
   CJS_Runtime* GetJSRuntime() const { return m_pRuntime.Get(); }
@@ -202,6 +152,8 @@
   void Destroy();
 
   UnownedPtr<CJS_Runtime> const m_pRuntime;
+  ObservedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
+  bool m_bBusy = false;
   JS_EVENT_T m_eEventType = JET_UNKNOWN;
   bool m_bValid = false;
   UnownedPtr<WideString> m_pValue;
@@ -222,10 +174,7 @@
   bool m_bFieldFull = false;
   bool m_bRcDu = false;
   UnownedPtr<bool> m_pbRc;
-  UnownedPtr<const CPDF_Bookmark> m_pTargetBookMark;
-  ObservedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
   ObservedPtr<CPDFSDK_Annot> m_pTargetAnnot;
-  bool m_bBusy = false;
 };
 
 #endif  // FXJS_CJS_EVENT_CONTEXT_H_
diff --git a/fxjs/cjs_event_context_stub.h b/fxjs/cjs_event_context_stub.h
index 6b824b0..44d4a85 100644
--- a/fxjs/cjs_event_context_stub.h
+++ b/fxjs/cjs_event_context_stub.h
@@ -17,7 +17,6 @@
   // IJS_EventContext:
   Optional<IJS_Runtime::JS_Error> RunScript(const WideString& script) override;
 
-  void OnApp_Init() override {}
   void OnDoc_Open(const WideString& strTargetName) override {}
   void OnDoc_WillPrint() override {}
   void OnDoc_DidPrint() override {}
@@ -73,41 +72,6 @@
                         CPDF_FormField* pTarget,
                         WideString* Value,
                         bool* bRc) override {}
-  void OnScreen_Focus(bool bModifier,
-                      bool bShift,
-                      CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_Blur(bool bModifier,
-                     bool bShift,
-                     CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_Open(bool bModifier,
-                     bool bShift,
-                     CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_Close(bool bModifier,
-                      bool bShift,
-                      CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_MouseDown(bool bModifier,
-                          bool bShift,
-                          CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_MouseUp(bool bModifier,
-                        bool bShift,
-                        CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_MouseEnter(bool bModifier,
-                           bool bShift,
-                           CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_MouseExit(bool bModifier,
-                          bool bShift,
-                          CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_InView(bool bModifier,
-                       bool bShift,
-                       CPDFSDK_Annot* pScreen) override {}
-  void OnScreen_OutView(bool bModifier,
-                        bool bShift,
-                        CPDFSDK_Annot* pScreen) override {}
-  void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override {}
-  void OnLink_MouseUp() override {}
-  void OnMenu_Exec(const WideString&) override {}
-  void OnBatch_Exec() override {}
-  void OnConsole_Exec() override {}
   void OnExternal_Exec() override {}
 };
 
diff --git a/fxjs/ijs_event_context.h b/fxjs/ijs_event_context.h
index ba1ff24..f142ebc 100644
--- a/fxjs/ijs_event_context.h
+++ b/fxjs/ijs_event_context.h
@@ -11,9 +11,7 @@
 #include "fxjs/ijs_runtime.h"
 #include "third_party/base/optional.h"
 
-class CPDF_Bookmark;
 class CPDF_FormField;
-class CPDFSDK_Annot;
 
 // Records the details of an event and triggers JS execution for it. There
 // can be more than one of these at any given time, as JS callbacks to C++
@@ -25,8 +23,6 @@
   virtual Optional<IJS_Runtime::JS_Error> RunScript(
       const WideString& script) = 0;
 
-  virtual void OnApp_Init() = 0;
-
   virtual void OnDoc_Open(const WideString& strTargetName) = 0;
   virtual void OnDoc_WillPrint() = 0;
   virtual void OnDoc_DidPrint() = 0;
@@ -85,43 +81,6 @@
                                 WideString* Value,
                                 bool* bRc) = 0;
 
-  virtual void OnScreen_Focus(bool bModifier,
-                              bool bShift,
-                              CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_Blur(bool bModifier,
-                             bool bShift,
-                             CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_Open(bool bModifier,
-                             bool bShift,
-                             CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_Close(bool bModifier,
-                              bool bShift,
-                              CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_MouseDown(bool bModifier,
-                                  bool bShift,
-                                  CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_MouseUp(bool bModifier,
-                                bool bShift,
-                                CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_MouseEnter(bool bModifier,
-                                   bool bShift,
-                                   CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_MouseExit(bool bModifier,
-                                  bool bShift,
-                                  CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_InView(bool bModifier,
-                               bool bShift,
-                               CPDFSDK_Annot* pScreen) = 0;
-  virtual void OnScreen_OutView(bool bModifier,
-                                bool bShift,
-                                CPDFSDK_Annot* pScreen) = 0;
-
-  virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0;
-  virtual void OnLink_MouseUp() = 0;
-
-  virtual void OnMenu_Exec(const WideString&) = 0;
-  virtual void OnBatch_Exec() = 0;
-  virtual void OnConsole_Exec() = 0;
   virtual void OnExternal_Exec() = 0;
 };
 
