| Index: third_party/WebKit/Source/core/frame/FrameView.cpp
|
| diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| index fc031a82fd5e5cc7d1038f35ed2e5e08021f4d00..db2ee4b233d8dab7ebc5736b177856ad63136137 100644
|
| --- a/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| @@ -236,6 +236,7 @@ DEFINE_TRACE(FrameView) {
|
| visitor->trace(m_animatingScrollableAreas);
|
| visitor->trace(m_autoSizeInfo);
|
| visitor->trace(m_children);
|
| + visitor->trace(m_plugins);
|
| visitor->trace(m_viewportScrollableArea);
|
| visitor->trace(m_visibilityObserver);
|
| visitor->trace(m_scrollAnchor);
|
| @@ -1483,7 +1484,7 @@ void FrameView::updateGeometries() {
|
| if (layoutViewItem().isNull())
|
| break;
|
|
|
| - if (FrameViewBase* frameViewBase = part->frameViewBase()) {
|
| + if (FrameViewBase* frameViewBase = part->pluginOrFrame()) {
|
| if (frameViewBase->isFrameView()) {
|
| FrameView* frameView = toFrameView(frameViewBase);
|
| bool didNeedLayout = frameView->needsLayout();
|
| @@ -3299,10 +3300,8 @@ void FrameView::updateStyleAndLayoutIfNeededRecursiveInternal() {
|
| // TODO(leviw): This currently runs the entire lifecycle on plugin WebViews.
|
| // We should have a way to only run these other Documents to the same
|
| // lifecycle stage as this frame.
|
| - const ChildrenSet* viewChildren = children();
|
| - for (const Member<FrameViewBase>& child : *viewChildren) {
|
| - if ((*child).isPluginContainer())
|
| - toPluginView(child.get())->updateAllLifecyclePhases();
|
| + for (const Member<PluginView>& plugin : *plugins()) {
|
| + plugin->updateAllLifecyclePhases();
|
| }
|
| checkDoesNotNeedLayout();
|
|
|
| @@ -3755,16 +3754,30 @@ void FrameView::setParent(FrameViewBase* parentView) {
|
| }
|
|
|
| void FrameView::removeChild(FrameViewBase* child) {
|
| - ASSERT(child->parent() == this);
|
| + DCHECK(child->parent() == this);
|
|
|
| if (child->isFrameView() &&
|
| !RuntimeEnabledFeatures::rootLayerScrollingEnabled())
|
| removeScrollableArea(toFrameView(child));
|
|
|
| - child->setParent(0);
|
| + child->setParent(nullptr);
|
| m_children.erase(child);
|
| }
|
|
|
| +void FrameView::removePlugin(PluginView* plugin) {
|
| + DCHECK(plugin->parent() == this);
|
| + DCHECK(m_plugins.contains(plugin));
|
| + plugin->setParent(nullptr);
|
| + m_plugins.erase(plugin);
|
| +}
|
| +
|
| +void FrameView::addPlugin(PluginView* plugin) {
|
| + DCHECK(!plugin->parent());
|
| + DCHECK(!m_plugins.contains(plugin));
|
| + plugin->setParent(this);
|
| + m_plugins.insert(plugin);
|
| +}
|
| +
|
| bool FrameView::visualViewportSuppliesScrollbars() {
|
| // On desktop, we always use the layout viewport's scrollbars.
|
| if (!m_frame->settings() || !m_frame->settings()->getViewportEnabled() ||
|
| @@ -3801,6 +3814,9 @@ void FrameView::frameRectsChanged() {
|
|
|
| for (const auto& child : m_children)
|
| child->frameRectsChanged();
|
| +
|
| + for (const auto& plugin : m_plugins)
|
| + plugin->frameRectsChanged();
|
| }
|
|
|
| void FrameView::setLayoutSizeInternal(const IntSize& size) {
|
| @@ -3851,7 +3867,8 @@ IntSize FrameView::maximumScrollOffsetInt() const {
|
| }
|
|
|
| void FrameView::addChild(FrameViewBase* child) {
|
| - ASSERT(child != this && !child->parent());
|
| + DCHECK(child != this && !child->parent());
|
| + DCHECK(!child->isPluginView());
|
| child->setParent(this);
|
| m_children.insert(child);
|
| }
|
| @@ -4647,6 +4664,9 @@ void FrameView::setParentVisible(bool visible) {
|
|
|
| for (const auto& child : m_children)
|
| child->setParentVisible(visible);
|
| +
|
| + for (const auto& plugin : m_plugins)
|
| + plugin->setParentVisible(visible);
|
| }
|
|
|
| void FrameView::show() {
|
| @@ -4666,6 +4686,9 @@ void FrameView::show() {
|
| if (isParentVisible()) {
|
| for (const auto& child : m_children)
|
| child->setParentVisible(true);
|
| +
|
| + for (const auto& plugin : m_plugins)
|
| + plugin->setParentVisible(true);
|
| }
|
| }
|
|
|
| @@ -4677,6 +4700,9 @@ void FrameView::hide() {
|
| if (isParentVisible()) {
|
| for (const auto& child : m_children)
|
| child->setParentVisible(false);
|
| +
|
| + for (const auto& plugin : m_plugins)
|
| + plugin->setParentVisible(false);
|
| }
|
| setSelfVisible(false);
|
| if (ScrollingCoordinator* scrollingCoordinator =
|
|
|