Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 2413723002: Re-Compute slow scroll region on frameview visibility change. (Closed)
Patch Set: addressed reviiew comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 411
412 m_needsScrollbarsUpdate = frameSizeChanged; 412 m_needsScrollbarsUpdate = frameSizeChanged;
413 // TODO(wjmaclean): find out why scrollbars fail to resize for complex 413 // TODO(wjmaclean): find out why scrollbars fail to resize for complex
414 // subframes after changing the zoom level. For now always calling 414 // subframes after changing the zoom level. For now always calling
415 // updateScrollbarsIfNeeded() here fixes the issue, but it would be good to 415 // updateScrollbarsIfNeeded() here fixes the issue, but it would be good to
416 // discover the deeper cause of this. http://crbug.com/607987. 416 // discover the deeper cause of this. http://crbug.com/607987.
417 updateScrollbarsIfNeeded(); 417 updateScrollbarsIfNeeded();
418 418
419 frameRectsChanged(); 419 frameRectsChanged();
420 420
421 updateScrollableAreaSet(); 421 updateParentScrollableAreaSet();
422 422
423 if (LayoutViewItem layoutView = this->layoutViewItem()) { 423 if (LayoutViewItem layoutView = this->layoutViewItem()) {
424 // TODO(majidvp): It seems that this only needs to be called when size 424 // TODO(majidvp): It seems that this only needs to be called when size
425 // is updated ignoring any change in the location. 425 // is updated ignoring any change in the location.
426 if (layoutView.usesCompositing()) 426 if (layoutView.usesCompositing())
427 layoutView.compositor()->frameViewDidChangeSize(); 427 layoutView.compositor()->frameViewDidChangeSize();
428 } 428 }
429 429
430 if (frameSizeChanged) { 430 if (frameSizeChanged) {
431 viewportSizeChanged(newRect.width() != oldRect.width(), 431 viewportSizeChanged(newRect.width() != oldRect.width(),
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return; 533 return;
534 534
535 m_contentsSize = size; 535 m_contentsSize = size;
536 updateScrollbars(); 536 updateScrollbars();
537 ScrollableArea::contentsResized(); 537 ScrollableArea::contentsResized();
538 538
539 Page* page = frame().page(); 539 Page* page = frame().page();
540 if (!page) 540 if (!page)
541 return; 541 return;
542 542
543 updateScrollableAreaSet(); 543 updateParentScrollableAreaSet();
544 544
545 page->chromeClient().contentsSizeChanged(m_frame.get(), size); 545 page->chromeClient().contentsSizeChanged(m_frame.get(), size);
546 frame().loader().restoreScrollPositionAndViewState(); 546 frame().loader().restoreScrollPositionAndViewState();
547 } 547 }
548 548
549 void FrameView::adjustViewSize() { 549 void FrameView::adjustViewSize() {
550 if (m_suppressAdjustViewSize) 550 if (m_suppressAdjustViewSize)
551 return; 551 return;
552 552
553 LayoutViewItem layoutViewItem = this->layoutViewItem(); 553 LayoutViewItem layoutViewItem = this->layoutViewItem();
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after
2379 ScrollbarMode verticalMode; 2379 ScrollbarMode verticalMode;
2380 calculateScrollbarModes(horizontalMode, verticalMode, 2380 calculateScrollbarModes(horizontalMode, verticalMode,
2381 RulesFromWebContentOnly); 2381 RulesFromWebContentOnly);
2382 if (horizontalMode == ScrollbarAlwaysOff && 2382 if (horizontalMode == ScrollbarAlwaysOff &&
2383 verticalMode == ScrollbarAlwaysOff) 2383 verticalMode == ScrollbarAlwaysOff)
2384 return NotScrollableExplicitlyDisabled; 2384 return NotScrollableExplicitlyDisabled;
2385 2385
2386 return Scrollable; 2386 return Scrollable;
2387 } 2387 }
2388 2388
2389 void FrameView::updateScrollableAreaSet() { 2389 void FrameView::updateParentScrollableAreaSet() {
2390 // That ensures that only inner frames are cached. 2390 // That ensures that only inner frames are cached.
2391 FrameView* parentFrameView = this->parentFrameView(); 2391 FrameView* parentFrameView = this->parentFrameView();
2392 if (!parentFrameView) 2392 if (!parentFrameView)
2393 return; 2393 return;
2394 2394
2395 if (!isScrollable()) { 2395 if (!isScrollable()) {
2396 parentFrameView->removeScrollableArea(this); 2396 parentFrameView->removeScrollableArea(this);
2397 return; 2397 return;
2398 } 2398 }
2399 2399
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
3330 return; 3330 return;
3331 m_animatingScrollableAreas->remove(scrollableArea); 3331 m_animatingScrollableAreas->remove(scrollableArea);
3332 } 3332 }
3333 3333
3334 void FrameView::setParent(Widget* parentView) { 3334 void FrameView::setParent(Widget* parentView) {
3335 if (parentView == parent()) 3335 if (parentView == parent())
3336 return; 3336 return;
3337 3337
3338 Widget::setParent(parentView); 3338 Widget::setParent(parentView);
3339 3339
3340 updateScrollableAreaSet(); 3340 updateParentScrollableAreaSet();
3341 setNeedsUpdateViewportIntersection(); 3341 setNeedsUpdateViewportIntersection();
3342 } 3342 }
3343 3343
3344 void FrameView::removeChild(Widget* child) { 3344 void FrameView::removeChild(Widget* child) {
3345 ASSERT(child->parent() == this); 3345 ASSERT(child->parent() == this);
3346 3346
3347 if (child->isFrameView()) 3347 if (child->isFrameView())
3348 removeScrollableArea(toFrameView(child)); 3348 removeScrollableArea(toFrameView(child));
3349 3349
3350 child->setParent(0); 3350 child->setParent(0);
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
4213 4213
4214 Widget::setParentVisible(visible); 4214 Widget::setParentVisible(visible);
4215 4215
4216 if (!isSelfVisible()) 4216 if (!isSelfVisible())
4217 return; 4217 return;
4218 4218
4219 for (const auto& child : m_children) 4219 for (const auto& child : m_children)
4220 child->setParentVisible(visible); 4220 child->setParentVisible(visible);
4221 } 4221 }
4222 4222
4223 void FrameView::frameViewVisibilityChanged() {
majidvp 2016/11/02 14:15:17 This function seems superfulous. It is reducing on
MuVen 2016/11/02 17:07:47 Done.
4224 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
4225 scrollingCoordinator->frameViewVisibilityDidChange();
4226 }
4227
4223 void FrameView::show() { 4228 void FrameView::show() {
4224 if (!isSelfVisible()) { 4229 if (!isSelfVisible()) {
4225 setSelfVisible(true); 4230 setSelfVisible(true);
4231 frameViewVisibilityChanged();
4226 setNeedsCompositingUpdate(layoutViewItem(), CompositingUpdateRebuildTree); 4232 setNeedsCompositingUpdate(layoutViewItem(), CompositingUpdateRebuildTree);
4227 updateScrollableAreaSet(); 4233 updateParentScrollableAreaSet();
4228 if (isParentVisible()) { 4234 if (isParentVisible()) {
4229 for (const auto& child : m_children) 4235 for (const auto& child : m_children)
4230 child->setParentVisible(true); 4236 child->setParentVisible(true);
4231 } 4237 }
4232 } 4238 }
4233 4239
4234 Widget::show(); 4240 Widget::show();
4235 } 4241 }
4236 4242
4237 void FrameView::hide() { 4243 void FrameView::hide() {
4238 if (isSelfVisible()) { 4244 if (isSelfVisible()) {
4239 if (isParentVisible()) { 4245 if (isParentVisible()) {
4240 for (const auto& child : m_children) 4246 for (const auto& child : m_children)
4241 child->setParentVisible(false); 4247 child->setParentVisible(false);
4242 } 4248 }
4243 setSelfVisible(false); 4249 setSelfVisible(false);
4250 frameViewVisibilityChanged();
4244 setNeedsCompositingUpdate(layoutViewItem(), CompositingUpdateRebuildTree); 4251 setNeedsCompositingUpdate(layoutViewItem(), CompositingUpdateRebuildTree);
4245 updateScrollableAreaSet(); 4252 updateParentScrollableAreaSet();
4246 } 4253 }
4247 4254
4248 Widget::hide(); 4255 Widget::hide();
4249 } 4256 }
4250 4257
4251 int FrameView::viewportWidth() const { 4258 int FrameView::viewportWidth() const {
4252 int viewportWidth = layoutSize(IncludeScrollbars).width(); 4259 int viewportWidth = layoutSize(IncludeScrollbars).width();
4253 return adjustForAbsoluteZoom(viewportWidth, layoutView()); 4260 return adjustForAbsoluteZoom(viewportWidth, layoutView());
4254 } 4261 }
4255 4262
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
4489 DCHECK(m_frame->isMainFrame()); 4496 DCHECK(m_frame->isMainFrame());
4490 return m_initialViewportSize.width(); 4497 return m_initialViewportSize.width();
4491 } 4498 }
4492 4499
4493 int FrameView::initialViewportHeight() const { 4500 int FrameView::initialViewportHeight() const {
4494 DCHECK(m_frame->isMainFrame()); 4501 DCHECK(m_frame->isMainFrame());
4495 return m_initialViewportSize.height(); 4502 return m_initialViewportSize.height();
4496 } 4503 }
4497 4504
4498 } // namespace blink 4505 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698