| 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 8481f106a5ded6f97b6773783c04e35229460227..80477b8f55d22c16c64ebf20129a914dd58133cb 100644
|
| --- a/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| @@ -220,7 +220,7 @@ FrameView* FrameView::create(LocalFrame& frame) {
|
|
|
| FrameView* FrameView::create(LocalFrame& frame, const IntSize& initialSize) {
|
| FrameView* view = new FrameView(frame);
|
| - view->Widget::setFrameRect(IntRect(view->location(), initialSize));
|
| + view->FrameViewBase::setFrameRect(IntRect(view->location(), initialSize));
|
| view->setLayoutSizeInternal(initialSize);
|
|
|
| view->show();
|
| @@ -244,7 +244,7 @@ DEFINE_TRACE(FrameView) {
|
| visitor->trace(m_anchoringAdjustmentQueue);
|
| visitor->trace(m_scrollbarManager);
|
| visitor->trace(m_printContext);
|
| - Widget::trace(visitor);
|
| + FrameViewBase::trace(visitor);
|
| ScrollableArea::trace(visitor);
|
| }
|
|
|
| @@ -371,10 +371,11 @@ void FrameView::dispose() {
|
| // FIXME: Do we need to do something here for OOPI?
|
| HTMLFrameOwnerElement* ownerElement = m_frame->deprecatedLocalOwner();
|
| // TODO(dcheng): It seems buggy that we can have an owner element that points
|
| - // to another Widget. This can happen when a plugin element loads a frame
|
| - // (widget A of type FrameView) and then loads a plugin (widget B of type
|
| - // WebPluginContainerImpl). In this case, the frame's view is A and the frame
|
| - // element's owned widget is B. See https://crbug.com/673170 for an example.
|
| + // to another FrameViewBase. This can happen when a plugin element loads a
|
| + // frame (FrameViewBase A of type FrameView) and then loads a plugin
|
| + // (FrameViewBase B of type WebPluginContainerImpl). In this case, the frame's
|
| + // view is A and the frame element's owned FrameViewBase is B. See
|
| + // https://crbug.com/673170 for an example.
|
| if (ownerElement && ownerElement->ownedWidget() == this)
|
| ownerElement->setWidget(nullptr);
|
|
|
| @@ -490,13 +491,15 @@ void FrameView::invalidateAllCustomScrollbarsOnActiveChanged() {
|
| m_frame->document()->styleEngine().usesWindowInactiveSelector();
|
|
|
| const ChildrenWidgetSet* viewChildren = children();
|
| - for (const Member<Widget>& child : *viewChildren) {
|
| - Widget* widget = child.get();
|
| - if (widget->isFrameView())
|
| - toFrameView(widget)->invalidateAllCustomScrollbarsOnActiveChanged();
|
| - else if (usesWindowInactiveSelector && widget->isScrollbar() &&
|
| - toScrollbar(widget)->isCustomScrollbar())
|
| - toScrollbar(widget)->styleChanged();
|
| + for (const Member<FrameViewBase>& child : *viewChildren) {
|
| + FrameViewBase* frameViewBase = child.get();
|
| + if (frameViewBase->isFrameView()) {
|
| + toFrameView(frameViewBase)
|
| + ->invalidateAllCustomScrollbarsOnActiveChanged();
|
| + } else if (usesWindowInactiveSelector && frameViewBase->isScrollbar() &&
|
| + toScrollbar(frameViewBase)->isCustomScrollbar()) {
|
| + toScrollbar(frameViewBase)->styleChanged();
|
| + }
|
| }
|
| if (usesWindowInactiveSelector)
|
| recalculateCustomScrollbarStyle();
|
| @@ -531,7 +534,7 @@ void FrameView::setFrameRect(const IntRect& newRect) {
|
| if (newRect == oldRect)
|
| return;
|
|
|
| - Widget::setFrameRect(newRect);
|
| + FrameViewBase::setFrameRect(newRect);
|
|
|
| const bool frameSizeChanged = oldRect.size() != newRect.size();
|
|
|
| @@ -1140,9 +1143,10 @@ void FrameView::scheduleOrPerformPostLayoutTasks() {
|
| if (!m_postLayoutTasksTimer.isActive() &&
|
| (needsLayout() || m_inSynchronousPostLayout)) {
|
| // If we need layout or are already in a synchronous call to
|
| - // postLayoutTasks(), defer widget updates and event dispatch until after we
|
| - // return. postLayoutTasks() can make us need to update again, and we can
|
| - // get stuck in a nasty cycle unless we call it through the timer here.
|
| + // postLayoutTasks(), defer FrameViewBase updates and event dispatch until
|
| + // after we return. postLayoutTasks() can make us need to update again, and
|
| + // we can get stuck in a nasty cycle unless we call it through the timer
|
| + // here.
|
| m_postLayoutTasksTimer.startOneShot(0, BLINK_FROM_HERE);
|
| if (needsLayout())
|
| layout();
|
| @@ -1469,9 +1473,9 @@ void FrameView::updateWidgetGeometries() {
|
| if (layoutViewItem().isNull())
|
| break;
|
|
|
| - if (Widget* widget = part->widget()) {
|
| - if (widget->isFrameView()) {
|
| - FrameView* frameView = toFrameView(widget);
|
| + if (FrameViewBase* frameViewBase = part->widget()) {
|
| + if (frameViewBase->isFrameView()) {
|
| + FrameView* frameView = toFrameView(frameViewBase);
|
| bool didNeedLayout = frameView->needsLayout();
|
| part->updateWidgetGeometry();
|
| if (!didNeedLayout && !frameView->shouldThrottleRendering())
|
| @@ -1485,7 +1489,7 @@ void FrameView::updateWidgetGeometries() {
|
|
|
| void FrameView::addPartToUpdate(LayoutEmbeddedObject& object) {
|
| ASSERT(isInPerformLayout());
|
| - // Tell the DOM element that it needs a widget update.
|
| + // Tell the DOM element that it needs a FrameViewBase update.
|
| Node* node = object.node();
|
| ASSERT(node);
|
| if (isHTMLObjectElement(*node) || isHTMLEmbedElement(*node))
|
| @@ -1995,8 +1999,8 @@ void FrameView::updateLayersAndCompositingAfterScrollIfNeeded() {
|
| }
|
|
|
| // If there fixed position elements, scrolling may cause compositing layers to
|
| - // change. Update widget and layer positions after scrolling, but only if
|
| - // we're not inside of layout.
|
| + // change. Update FrameViewBase and layer positions after scrolling, but only
|
| + // if we're not inside of layout.
|
| if (!m_nestedLayoutCount) {
|
| updateWidgetGeometries();
|
| LayoutViewItem layoutViewItem = this->layoutViewItem();
|
| @@ -2407,8 +2411,9 @@ void FrameView::scrollToFragmentAnchor() {
|
|
|
| bool FrameView::updateWidgets() {
|
| // This is always called from updateWidgetsTimerFired.
|
| - // m_updateWidgetsTimer should only be scheduled if we have widgets to update.
|
| - // Thus I believe we can stop checking isEmpty here, and just ASSERT isEmpty:
|
| + // m_updateWidgetsTimer should only be scheduled if we have FrameViewBases to
|
| + // update. Thus I believe we can stop checking isEmpty here, and just ASSERT
|
| + // isEmpty:
|
| // FIXME: This assert has been temporarily removed due to
|
| // https://crbug.com/430344
|
| if (m_nestedLayoutCount > 1 || m_partUpdateSet.isEmpty())
|
| @@ -3305,7 +3310,7 @@ void FrameView::updateStyleAndLayoutIfNeededRecursiveInternal() {
|
| // We should have a way to only run these other Documents to the same
|
| // lifecycle stage as this frame.
|
| const ChildrenWidgetSet* viewChildren = children();
|
| - for (const Member<Widget>& child : *viewChildren) {
|
| + for (const Member<FrameViewBase>& child : *viewChildren) {
|
| if ((*child).isPluginContainer())
|
| toPluginView(child.get())->updateAllLifecyclePhases();
|
| }
|
| @@ -3743,11 +3748,11 @@ void FrameView::removeAnimatingScrollableArea(ScrollableArea* scrollableArea) {
|
| m_animatingScrollableAreas->erase(scrollableArea);
|
| }
|
|
|
| -void FrameView::setParent(Widget* parentView) {
|
| +void FrameView::setParent(FrameViewBase* parentView) {
|
| if (parentView == parent())
|
| return;
|
|
|
| - Widget::setParent(parentView);
|
| + FrameViewBase::setParent(parentView);
|
|
|
| updateParentScrollableAreaSet();
|
| setupRenderThrottling();
|
| @@ -3756,7 +3761,7 @@ void FrameView::setParent(Widget* parentView) {
|
| m_subtreeThrottled = parentFrameView()->canThrottleRendering();
|
| }
|
|
|
| -void FrameView::removeChild(Widget* child) {
|
| +void FrameView::removeChild(FrameViewBase* child) {
|
| ASSERT(child->parent() == this);
|
|
|
| if (child->isFrameView() &&
|
| @@ -3852,7 +3857,7 @@ IntSize FrameView::maximumScrollOffsetInt() const {
|
| return maximumOffset.expandedTo(minimumScrollOffsetInt());
|
| }
|
|
|
| -void FrameView::addChild(Widget* child) {
|
| +void FrameView::addChild(FrameViewBase* child) {
|
| ASSERT(child != this && !child->parent());
|
| child->setParent(this);
|
| m_children.insert(child);
|
| @@ -4307,8 +4312,8 @@ void FrameView::scrollContents(const IntSize& scrollDelta) {
|
| setNeedsPaintPropertyUpdate();
|
| }
|
|
|
| - // This call will move children with native widgets (plugins) and invalidate
|
| - // them as well.
|
| + // This call will move children with native FrameViewBases (plugins) and
|
| + // invalidate them as well.
|
| frameRectsChanged();
|
| }
|
|
|
| @@ -4474,7 +4479,7 @@ bool FrameView::shouldPlaceVerticalScrollbarOnLeft() const {
|
| return false;
|
| }
|
|
|
| -Widget* FrameView::getWidget() {
|
| +FrameViewBase* FrameView::getWidget() {
|
| return this;
|
| }
|
|
|
| @@ -4642,7 +4647,7 @@ void FrameView::setParentVisible(bool visible) {
|
| // and potentially child frame views.
|
| setNeedsCompositingUpdate(layoutViewItem(), CompositingUpdateRebuildTree);
|
|
|
| - Widget::setParentVisible(visible);
|
| + FrameViewBase::setParentVisible(visible);
|
|
|
| if (!isSelfVisible())
|
| return;
|
| @@ -4671,7 +4676,7 @@ void FrameView::show() {
|
| }
|
| }
|
|
|
| - Widget::show();
|
| + FrameViewBase::show();
|
| }
|
|
|
| void FrameView::hide() {
|
| @@ -4694,7 +4699,7 @@ void FrameView::hide() {
|
| }
|
| }
|
|
|
| - Widget::hide();
|
| + FrameViewBase::hide();
|
| }
|
|
|
| int FrameView::viewportWidth() const {
|
| @@ -4745,11 +4750,11 @@ void FrameView::collectAnnotatedRegions(
|
|
|
| void FrameView::updateViewportIntersectionsForSubtree(
|
| DocumentLifecycle::LifecycleState targetState) {
|
| - // TODO(dcheng): Since widget tree updates are deferred, FrameViews might
|
| - // still be in the widget hierarchy even though the associated Document is
|
| - // already detached. Investigate if this check and a similar check in
|
| - // lifecycle updates are still needed when there are no more deferred widget
|
| - // updates: https://crbug.com/561683
|
| + // TODO(dcheng): Since FrameViewBase tree updates are deferred, FrameViews
|
| + // might still be in the FrameViewBase hierarchy even though the associated
|
| + // Document is already detached. Investigate if this check and a similar check
|
| + // in lifecycle updates are still needed when there are no more deferred
|
| + // FrameViewBase updates: https://crbug.com/561683
|
| if (!frame().document()->isActive())
|
| return;
|
|
|
| @@ -4824,7 +4829,7 @@ void FrameView::updateRenderThrottlingStatus(
|
| if (notifyChildrenBehavior == NotifyChildren &&
|
| (wasThrottled != isThrottled ||
|
| forceThrottlingInvalidationBehavior == ForceThrottlingInvalidation)) {
|
| - for (const Member<Widget>& child : *children()) {
|
| + for (const Member<FrameViewBase>& child : *children()) {
|
| if (child->isFrameView()) {
|
| FrameView* childView = toFrameView(child);
|
| childView->updateRenderThrottlingStatus(
|
|
|