diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp
index 5a7d24e..f9c3ca6 100644
--- a/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp
+++ b/fpdfsdk/fpdfxfa/fpdfxfa_app.cpp
@@ -514,13 +514,6 @@
   }
 }
 
-FX_BOOL CPDFXFA_App::ShowFileDialog(const CFX_WideStringC& wsTitle,
-                                    const CFX_WideStringC& wsFilter,
-                                    CFX_WideStringArray& wsPathArr,
-                                    FX_BOOL bOpen) {
-  return FALSE;
-}
-
 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() {
   CXFA_FWLAdapterTimerMgr* pAdapter = NULL;
   CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);
diff --git a/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h b/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h
index e88061f..6491781 100644
--- a/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h
+++ b/fpdfsdk/fpdfxfa/include/fpdfxfa_app.h
@@ -76,10 +76,6 @@
                         const CFX_WideStringC& wsEncode) override;
 
   void LoadString(int32_t iStringID, CFX_WideString& wsString) override;
-  FX_BOOL ShowFileDialog(const CFX_WideStringC& wsTitle,
-                         const CFX_WideStringC& wsFilter,
-                         CFX_WideStringArray& wsPathArr,
-                         FX_BOOL bOpen) override;
   IFWL_AdapterTimerMgr* GetTimerMgr() override;
 
   CFX_ArrayTemplate<CPDFDoc_Environment*> m_pEnvList;
diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h
index 0578a16..ff947cc 100644
--- a/fpdfsdk/include/fsdk_mgr.h
+++ b/fpdfsdk/include/fsdk_mgr.h
@@ -368,13 +368,6 @@
     return FALSE;
   }
 
-  FPDF_BOOL FFI_ShowFileDialog(const FX_WCHAR* wsTitle,
-                               const FX_WCHAR* wsFilter,
-                               std::vector<CFX_WideString>& wsPathArr,
-                               FX_BOOL bOpen) {
-    return FALSE;
-  }
-
   CFX_WideString FFI_GetLanguage() {
     if (m_pInfo && m_pInfo->FFI_GetLanguage) {
       int nRequiredLen = m_pInfo->FFI_GetLanguage(m_pInfo, NULL, 0);
diff --git a/xfa/fxfa/app/xfa_ffimageedit.cpp b/xfa/fxfa/app/xfa_ffimageedit.cpp
index b56f24d..909f7e3 100644
--- a/xfa/fxfa/app/xfa_ffimageedit.cpp
+++ b/xfa/fxfa/app/xfa_ffimageedit.cpp
@@ -82,15 +82,16 @@
                   iImageYDpi, iHorzAlign, iVertAlign);
   }
 }
+
 FX_BOOL CXFA_FFImageEdit::OnLButtonDown(uint32_t dwFlags,
                                         FX_FLOAT fx,
                                         FX_FLOAT fy) {
-  if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
+  if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open)
     return FALSE;
-  }
-  if (!PtInActiveRect(fx, fy)) {
+
+  if (!PtInActiveRect(fx, fy))
     return FALSE;
-  }
+
   SetButtonDown(TRUE);
   CFWL_MsgMouse ms;
   ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown;
@@ -100,61 +101,9 @@
   ms.m_pDstTarget = m_pNormalWidget->m_pIface;
   FWLToClient(ms.m_fx, ms.m_fy);
   TranslateFWLMessage(&ms);
-  IXFA_AppProvider* pAppProvider = GetAppProvider();
-  if (!pAppProvider) {
-    return TRUE;
-  }
-  CFX_WideString wsTitle;
-  CFX_WideString wsFilter;
-  pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter);
-  CFX_WideStringArray wsPathArray;
-  pAppProvider->ShowFileDialog(wsTitle.AsStringC(), wsFilter.AsStringC(),
-                               wsPathArray);
-  int32_t iSize = wsPathArray.GetSize();
-  if (iSize < 1) {
-    return TRUE;
-  }
-  CFX_WideString wsFilePath = wsPathArray[0];
-  FX_STRSIZE nLen = wsFilePath.GetLength();
-  FX_STRSIZE nIndex = nLen - 1;
-  while (nIndex > 0 && wsFilePath[nIndex] != '.') {
-    nIndex--;
-  }
-  if (nIndex <= 0) {
-    return TRUE;
-  }
-  CFX_WideString wsContentType(L"image/");
-  wsContentType += wsFilePath.Right(nLen - nIndex - 1);
-  wsContentType.MakeLower();
-  FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType);
-  if (eImageType == FXCODEC_IMAGE_UNKNOWN) {
-    return TRUE;
-  }
-  CFX_WideString wsImage;
-  IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath.c_str());
-  if (pFileRead) {
-    int32_t nDataSize = pFileRead->GetSize();
-    if (nDataSize > 0) {
-      CFX_ByteString bsBuf;
-      FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize);
-      pFileRead->ReadBlock(pImageBuffer, 0, nDataSize);
-      bsBuf.ReleaseBuffer();
-      if (!bsBuf.IsEmpty()) {
-        FX_CHAR* pData = XFA_Base64Encode(bsBuf.raw_str(), nDataSize);
-        wsImage = CFX_WideString::FromLocal(pData);
-        FX_Free(pData);
-      }
-    }
-    m_pDataAcc->SetImageEditImage(NULL);
-    pFileRead->Release();
-  }
-  m_pDataAcc->SetImageEdit(wsContentType.AsStringC(), CFX_WideStringC(),
-                           wsImage.AsStringC());
-  m_pDataAcc->LoadImageEditImage();
-  AddInvalidateRect();
-  m_pDocView->SetChangeMark();
   return TRUE;
 }
+
 void CXFA_FFImageEdit::SetFWLRect() {
   if (!m_pNormalWidget) {
     return;
diff --git a/xfa/fxfa/include/fxfa.h b/xfa/fxfa/include/fxfa.h
index 6c07370..e241139 100644
--- a/xfa/fxfa/include/fxfa.h
+++ b/xfa/fxfa/include/fxfa.h
@@ -259,10 +259,6 @@
                                 const CFX_WideStringC& wsEncode) = 0;
 
   virtual void LoadString(int32_t iStringID, CFX_WideString& wsString) = 0;
-  virtual FX_BOOL ShowFileDialog(const CFX_WideStringC& wsTitle,
-                                 const CFX_WideStringC& wsFilter,
-                                 CFX_WideStringArray& wsPathArr,
-                                 FX_BOOL bOpen = TRUE) = 0;
   virtual IFWL_AdapterTimerMgr* GetTimerMgr() = 0;
 };
 
