| 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 8cdc71dbe282ba0e2de74b79f04fa3e3970d9dab..b5df44a362648d33018fcd5f5f80a1a17fe91f05 100644
|
| --- a/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp
|
| +++ b/third_party/WebKit/Source/core/html/HTMLFrameOwnerElement.cpp
|
| @@ -76,6 +76,10 @@ HTMLFrameOwnerElement::UpdateSuspendScope::UpdateSuspendScope() {
|
|
|
| void HTMLFrameOwnerElement::UpdateSuspendScope::
|
| PerformDeferredWidgetTreeOperations() {
|
| + VLOG(1) << "Performing deferred operations NewParent.size="
|
| + << FrameOrPluginNewParentMap().size() << ", TempRemoval.size="
|
| + << FrameOrPluginsPendingTemporaryRemovalFromParent().size()
|
| + << ", Dispose.size=" << FrameOrPluginsPendingDispose().size();
|
| FrameOrPluginToParentMap map;
|
| FrameOrPluginNewParentMap().swap(map);
|
| for (const auto& entry : map) {
|
| @@ -117,7 +121,11 @@ HTMLFrameOwnerElement::UpdateSuspendScope::~UpdateSuspendScope() {
|
|
|
| // Unlike MoveFrameOrPluginToParentSoon, this will not call dispose.
|
| void TemporarilyRemoveFrameOrPluginFromParentSoon(FrameOrPlugin* child) {
|
| + // child->SetFrameOrPluginState(FrameOrPlugin::kDeferred);
|
| if (g_update_suspend_count) {
|
| + VLOG(1) << "Defered temp remove child=" << child;
|
| + if (VLOG_IS_ON(2))
|
| + base::debug::StackTrace(10).Print();
|
| FrameOrPluginsPendingTemporaryRemovalFromParent().insert(child);
|
| } else {
|
| if (child->Parent())
|
| @@ -126,6 +134,7 @@ void TemporarilyRemoveFrameOrPluginFromParentSoon(FrameOrPlugin* child) {
|
| }
|
|
|
| void MoveFrameOrPluginToParentSoon(FrameOrPlugin* child, FrameView* parent) {
|
| + // child->SetFrameOrPluginState(FrameOrPlugin::kDeferred);
|
| if (!g_update_suspend_count) {
|
| if (parent) {
|
| DCHECK(child != parent && !child->Parent());
|
| @@ -136,6 +145,9 @@ void MoveFrameOrPluginToParentSoon(FrameOrPlugin* child, FrameView* parent) {
|
| }
|
| return;
|
| }
|
| + VLOG(1) << "Deferred New Parent child=" << child << ", parent=" << parent;
|
| + if (VLOG_IS_ON(2))
|
| + base::debug::StackTrace(10).Print();
|
| FrameOrPluginNewParentMap().Set(child, parent);
|
| }
|
|
|
| @@ -276,6 +288,9 @@ Document* HTMLFrameOwnerElement::getSVGDocument(
|
| }
|
|
|
| void HTMLFrameOwnerElement::SetWidget(FrameOrPlugin* frame_or_plugin) {
|
| + VLOG(1) << "SetWidget old=" << widget_ << ", new=" << frame_or_plugin
|
| + << ", old parent=" << (!widget_ ? -1 : widget_ && widget_->Parent())
|
| + << ", count=" << g_update_suspend_count;
|
| if (frame_or_plugin == widget_)
|
| return;
|
|
|
| @@ -298,14 +313,18 @@ void HTMLFrameOwnerElement::SetWidget(FrameOrPlugin* frame_or_plugin) {
|
|
|
| LayoutPart* layout_part = ToLayoutPart(GetLayoutObject());
|
| LayoutPartItem layout_part_item = LayoutPartItem(layout_part);
|
| - if (layout_part_item.IsNull())
|
| + if (layout_part_item.IsNull()) {
|
| + VLOG(1) << "SetWidget new=" << frame_or_plugin << ", parent=0";
|
| return;
|
| + }
|
|
|
| if (widget_) {
|
| layout_part_item.UpdateOnWidgetChange();
|
|
|
| DCHECK_EQ(GetDocument().View(), layout_part_item.GetFrameView());
|
| DCHECK(layout_part_item.GetFrameView());
|
| + VLOG(1) << "SetWidget new=" << frame_or_plugin
|
| + << ", parent=" << layout_part_item.GetFrameView();
|
| MoveFrameOrPluginToParentSoon(widget_, layout_part_item.GetFrameView());
|
| }
|
|
|
|
|