Index: third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp |
diff --git a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp |
index 2496c66f261334efec6b0f291a0b9107f7e6e9f5..84a18268f1cf2310d1c0416af44c9d3412138b1c 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp |
@@ -54,6 +54,12 @@ static WidgetSet& widgetsPendingTemporaryRemovalFromParent() |
return set; |
} |
+static WidgetSet& widgetsPendingDispose() |
+{ |
+ DEFINE_STATIC_LOCAL(WidgetSet, set, (new WidgetSet)); |
+ return set; |
+} |
+ |
SubframeLoadingDisabler::SubtreeRootSet& SubframeLoadingDisabler::disabledSubtreeRoots() |
{ |
DEFINE_STATIC_LOCAL(SubtreeRootSet, nodes, (new SubtreeRootSet)); |
@@ -85,12 +91,22 @@ void HTMLFrameOwnerElement::UpdateSuspendScope::performDeferredWidgetTreeOperati |
} |
} |
- WidgetSet set; |
- widgetsPendingTemporaryRemovalFromParent().swap(set); |
- for (const auto& widget : set) { |
- FrameView* currentParent = toFrameView(widget->parent()); |
- if (currentParent) |
- currentParent->removeChild(widget.get()); |
+ { |
+ WidgetSet set; |
+ widgetsPendingTemporaryRemovalFromParent().swap(set); |
+ for (const auto& widget : set) { |
+ FrameView* currentParent = toFrameView(widget->parent()); |
+ if (currentParent) |
+ currentParent->removeChild(widget.get()); |
+ } |
+ } |
+ |
+ { |
+ WidgetSet set; |
+ widgetsPendingDispose().swap(set); |
+ for (const auto& widget : set) { |
+ widget->dispose(); |
+ } |
} |
} |
@@ -210,6 +226,15 @@ bool HTMLFrameOwnerElement::isKeyboardFocusable() const |
return m_contentFrame && HTMLElement::isKeyboardFocusable(); |
} |
+void HTMLFrameOwnerElement::disposeWidgetSoon(Widget* widget) |
+{ |
+ if (s_updateSuspendCount) { |
+ widgetsPendingDispose().add(widget); |
+ return; |
+ } |
+ widget->dispose(); |
+} |
+ |
void HTMLFrameOwnerElement::dispatchLoad() |
{ |
dispatchScopedEvent(Event::create(EventTypeNames::load)); |