diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc b/chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc index c91fe76dd0f..f86c25b6507 100644 --- a/chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc +++ b/chromium/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc @@ -81,6 +81,8 @@ ValidationMessageOverlayDelegate::~ValidationMessageOverlayDelegate() { EventDispatchForbiddenScope::AllowUserAgentEvents allow_events; page_->WillBeDestroyed(); } + if (destroyed_ptr_) + *destroyed_ptr_ = true; } LocalFrameView& ValidationMessageOverlayDelegate::FrameView() const { @@ -175,7 +177,18 @@ void ValidationMessageOverlayDelegate::CreatePage(const FrameOverlay& overlay) { // Propagate deprecated DSF for platforms without use-zoom-for-dsf. page_->SetDeviceScaleFactorDeprecated( main_page_->DeviceScaleFactorDeprecated()); - frame->ForceSynchronousDocumentInstall("text/html", data); + + // ForceSynchronousDocumentInstall can cause another call to + // ValidationMessageClientImpl::ShowValidationMessage, which will hide this + // validation message and may even delete this. In order to avoid continuing + // when this is destroyed, |destroyed| will be set to true in the destructor. + bool destroyed = false; + DCHECK(!destroyed_ptr_); + destroyed_ptr_ = &destroyed; + frame->ForceSynchronousDocumentInstall("text/html", data); + if (destroyed) + return; + destroyed_ptr_ = nullptr; Element& main_message = GetElementById("main-message"); main_message.setTextContent(message_); |