Chromium Code Reviews| Index: fpdfsdk/fpdfview.cpp |
| diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp |
| index dee71ac9e2bff399a169fbf23075ce519d4f8980..869d43f583acb4e57271f057360f92330e793706 100644 |
| --- a/fpdfsdk/fpdfview.cpp |
| +++ b/fpdfsdk/fpdfview.cpp |
| @@ -673,9 +673,20 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) { |
| #else // PDF_ENABLE_XFA |
| CPDFSDK_PageView* pPageView = |
| static_cast<CPDFSDK_PageView*>(pPage->GetView()); |
| - if (pPageView && pPageView->IsLocked()) { |
| - pPageView->TakeOverPage(); |
| - return; |
| + if (pPageView) { |
| + if (pPageView->IsLocked()) { |
| + pPageView->TakeOverPage(); |
|
Tom Sepez
2016/09/07 16:17:40
nit: someday, lets rename this to TakePageOwnershi
dsinclair
2016/09/07 16:36:36
Done.
|
| + return; |
| + } |
| + |
| + bool owned = pPageView->OwnsPage(); |
| + // This will delete the |pPageView| object. We must cleanup the PageView |
| + // first because it will attempt to reset the View on the |pPage| during |
| + // destruction. |
| + pPageView->GetSDKDocument()->RemovePageView(pPage); |
| + // If the page was owned then the pageview will have deleted the page. |
| + if (owned) |
| + return; |
| } |
| delete pPage; |
| #endif // PDF_ENABLE_XFA |