Add ObservedPtr to catch Widget being killed by JS

Another case of a call causing JS to run, which can remove a widget
that is called later.

BUG=chromium:771979

Change-Id: I5f25a38097662b70cfb777f76f0e3d50e7c11b1b
Reviewed-on: https://pdfium-review.googlesource.com/15610
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index a89df16..da0e60c 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -324,16 +324,21 @@
   CPDFSDK_Widget* pWidget = pForm->GetWidget(pFormControl);
 
   if (pWidget) {
+    CPDFSDK_Widget::ObservedPtr observed_widget(pWidget);
     if (bResetAP) {
       int nFieldType = pWidget->GetFieldType();
       if (nFieldType == FIELDTYPE_COMBOBOX ||
           nFieldType == FIELDTYPE_TEXTFIELD) {
         bool bFormatted = false;
         WideString sValue = pWidget->OnFormat(bFormatted);
+        if (!observed_widget)
+          return;
         pWidget->ResetAppearance(bFormatted ? &sValue : nullptr, false);
       } else {
         pWidget->ResetAppearance(nullptr, false);
       }
+      if (!observed_widget)
+        return;
     }
 
     if (bRefresh) {