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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 2860433002: Update WebView/FrameView size from LayoutView::UpdateAfterLayout (Closed)
Patch Set: s/IsLocalRoot/IsMainFrame/ Created 3 years, 7 months 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
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 1803 matching lines...) Expand 10 before | Expand all | Expand 10 after
1814 1814
1815 UpdatePageDefinedViewportConstraints( 1815 UpdatePageDefinedViewportConstraints(
1816 MainFrameImpl()->GetFrame()->GetDocument()->GetViewportDescription()); 1816 MainFrameImpl()->GetFrame()->GetDocument()->GetViewportDescription());
1817 UpdateMainFrameLayoutSize(); 1817 UpdateMainFrameLayoutSize();
1818 1818
1819 GetPage()->GetVisualViewport().SetSize(size_); 1819 GetPage()->GetVisualViewport().SetSize(size_);
1820 1820
1821 if (MainFrameImpl()->GetFrameView()) { 1821 if (MainFrameImpl()->GetFrameView()) {
1822 MainFrameImpl()->GetFrameView()->SetInitialViewportSize(icb_size); 1822 MainFrameImpl()->GetFrameView()->SetInitialViewportSize(icb_size);
1823 if (!MainFrameImpl()->GetFrameView()->NeedsLayout()) 1823 if (!MainFrameImpl()->GetFrameView()->NeedsLayout())
1824 ResizeFrameView(MainFrameImpl()); 1824 resize_viewport_anchor_->ResizeFrameView(MainFrameSize());
1825 } 1825 }
1826 } 1826 }
1827 1827
1828 void WebViewImpl::UpdateBrowserControlsState(WebBrowserControlsState constraint, 1828 void WebViewImpl::UpdateBrowserControlsState(WebBrowserControlsState constraint,
1829 WebBrowserControlsState current, 1829 WebBrowserControlsState current,
1830 bool animate) { 1830 bool animate) {
1831 WebBrowserControlsState old_permitted_state = 1831 WebBrowserControlsState old_permitted_state =
1832 GetBrowserControls().PermittedState(); 1832 GetBrowserControls().PermittedState();
1833 1833
1834 GetBrowserControls().UpdateConstraintsAndState(constraint, current, animate); 1834 GetBrowserControls().UpdateConstraintsAndState(constraint, current, animate);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1890 bool browser_controls_shrink_layout) { 1890 bool browser_controls_shrink_layout) {
1891 DCHECK(MainFrameImpl()); 1891 DCHECK(MainFrameImpl());
1892 1892
1893 GetBrowserControls().SetHeight(browser_controls_height, 1893 GetBrowserControls().SetHeight(browser_controls_height,
1894 browser_controls_shrink_layout); 1894 browser_controls_shrink_layout);
1895 1895
1896 { 1896 {
1897 // Avoids unnecessary invalidations while various bits of state in 1897 // Avoids unnecessary invalidations while various bits of state in
1898 // TextAutosizer are updated. 1898 // TextAutosizer are updated.
1899 TextAutosizer::DeferUpdatePageInfo defer_update_page_info(GetPage()); 1899 TextAutosizer::DeferUpdatePageInfo defer_update_page_info(GetPage());
1900 FrameView* frame_view = MainFrameImpl()->GetFrameView();
1901 IntRect old_rect = frame_view->FrameRect();
1900 UpdateICBAndResizeViewport(); 1902 UpdateICBAndResizeViewport();
1903 IntRect new_rect = frame_view->FrameRect();
1904 frame_view->MarkViewportConstrainedObjectsForLayout(
1905 old_rect.Width() != new_rect.Width(),
1906 old_rect.Height() != new_rect.Height());
1901 } 1907 }
1902 1908
1903 fullscreen_controller_->UpdateSize(); 1909 fullscreen_controller_->UpdateSize();
1904 1910
1905 // Update lifecyle phases immediately to recalculate the minimum scale limit 1911 // Update lifecyle phases immediately to recalculate the minimum scale limit
1906 // for rotation anchoring, and to make sure that no lifecycle states are 1912 // for rotation anchoring, and to make sure that no lifecycle states are
1907 // stale if this WebView is embedded in another one. 1913 // stale if this WebView is embedded in another one.
1908 UpdateAllLifecyclePhases(); 1914 UpdateAllLifecyclePhases();
1909 } 1915 }
1910 1916
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
3146 float new_page_scale_factor = PageScaleFactor(); 3152 float new_page_scale_factor = PageScaleFactor();
3147 if (GetPageScaleConstraintsSet().NeedsReset() && 3153 if (GetPageScaleConstraintsSet().NeedsReset() &&
3148 GetPageScaleConstraintsSet().FinalConstraints().initial_scale != -1) { 3154 GetPageScaleConstraintsSet().FinalConstraints().initial_scale != -1) {
3149 new_page_scale_factor = 3155 new_page_scale_factor =
3150 GetPageScaleConstraintsSet().FinalConstraints().initial_scale; 3156 GetPageScaleConstraintsSet().FinalConstraints().initial_scale;
3151 GetPageScaleConstraintsSet().SetNeedsReset(false); 3157 GetPageScaleConstraintsSet().SetNeedsReset(false);
3152 } 3158 }
3153 SetPageScaleFactor(new_page_scale_factor); 3159 SetPageScaleFactor(new_page_scale_factor);
3154 3160
3155 UpdateLayerTreeViewport(); 3161 UpdateLayerTreeViewport();
3156
3157 // Changes to page-scale during layout may require an additional frame.
3158 // We can't update the lifecycle here because we may be in the middle of
3159 // layout in the caller of this method.
3160 // TODO(chrishtr): clean all this up. All layout should happen in one
3161 // lifecycle run (crbug.com/578239).
3162 if (MainFrameImpl()->GetFrameView()->NeedsLayout())
3163 MainFrameImpl()->FrameWidget()->ScheduleAnimation();
3164 } 3162 }
3165 3163
3166 void WebViewImpl::UpdatePageDefinedViewportConstraints( 3164 void WebViewImpl::UpdatePageDefinedViewportConstraints(
3167 const ViewportDescription& description) { 3165 const ViewportDescription& description) {
3168 if (!GetPage() || (!size_.width && !size_.height) || 3166 if (!GetPage() || (!size_.width && !size_.height) ||
3169 !GetPage()->MainFrame()->IsLocalFrame()) 3167 !GetPage()->MainFrame()->IsLocalFrame())
3170 return; 3168 return;
3171 3169
3172 if (!GetSettings()->ViewportEnabled()) { 3170 if (!GetSettings()->ViewportEnabled()) {
3173 GetPageScaleConstraintsSet().ClearPageDefinedConstraints(); 3171 GetPageScaleConstraintsSet().ClearPageDefinedConstraints();
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
3641 } 3639 }
3642 3640
3643 // Give the visual viewport's scroll layer its initial size. 3641 // Give the visual viewport's scroll layer its initial size.
3644 GetPage()->GetVisualViewport().MainFrameDidChangeSize(); 3642 GetPage()->GetVisualViewport().MainFrameDidChangeSize();
3645 3643
3646 // Make sure link highlight from previous page is cleared. 3644 // Make sure link highlight from previous page is cleared.
3647 link_highlights_.clear(); 3645 link_highlights_.clear();
3648 EndActiveFlingAnimation(); 3646 EndActiveFlingAnimation();
3649 } 3647 }
3650 3648
3651 void WebViewImpl::ResizeFrameView(WebLocalFrameImpl* webframe) {
3652 FrameView* view = webframe->GetFrame()->View();
3653 if (webframe == MainFrame())
3654 resize_viewport_anchor_->ResizeFrameView(MainFrameSize());
3655 else
3656 view->Resize(webframe->GetFrameView()->Size());
3657 }
3658
3659 void WebViewImpl::ResizeAfterLayout(WebLocalFrameImpl* webframe) { 3649 void WebViewImpl::ResizeAfterLayout(WebLocalFrameImpl* webframe) {
3660 LocalFrame* frame = webframe->GetFrame(); 3650 LocalFrame* frame = webframe->GetFrame();
3661 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame()) 3651 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame())
3662 return; 3652 return;
3663 3653
3664 if (should_auto_resize_) { 3654 if (should_auto_resize_) {
3665 WebSize frame_size = frame->View()->FrameRect().Size(); 3655 WebSize frame_size = frame->View()->FrameRect().Size();
3666 if (frame_size != size_) { 3656 if (frame_size != size_) {
3667 size_ = frame_size; 3657 size_ = frame_size;
3668 3658
3669 GetPage()->GetVisualViewport().SetSize(size_); 3659 GetPage()->GetVisualViewport().SetSize(size_);
3670 GetPageScaleConstraintsSet().DidChangeInitialContainingBlockSize(size_); 3660 GetPageScaleConstraintsSet().DidChangeInitialContainingBlockSize(size_);
3671 frame->View()->SetInitialViewportSize(size_); 3661 frame->View()->SetInitialViewportSize(size_);
3672 3662
3673 client_->DidAutoResize(size_); 3663 client_->DidAutoResize(size_);
3674 SendResizeEventAndRepaint(); 3664 SendResizeEventAndRepaint();
3675 } 3665 }
3676 } 3666 }
3677 3667
3678 if (GetPageScaleConstraintsSet().ConstraintsDirty()) 3668 if (GetPageScaleConstraintsSet().ConstraintsDirty())
3679 RefreshPageScaleFactorAfterLayout(); 3669 RefreshPageScaleFactorAfterLayout();
3680 3670
3681 ResizeFrameView(webframe); 3671 resize_viewport_anchor_->ResizeFrameView(MainFrameSize());
3682 } 3672 }
3683 3673
3684 void WebViewImpl::LayoutUpdated(WebLocalFrameImpl* webframe) { 3674 void WebViewImpl::LayoutUpdated(WebLocalFrameImpl* webframe) {
3685 LocalFrame* frame = webframe->GetFrame(); 3675 LocalFrame* frame = webframe->GetFrame();
3686 if (!client_ || !client_->CanUpdateLayout() || !frame->IsMainFrame()) 3676 if (!client_ || !frame->IsMainFrame())
3687 return; 3677 return;
3688 3678
3689 ResizeAfterLayout(webframe);
3690
3691 // Relayout immediately to avoid violating the rule that needsLayout()
3692 // isn't set at the end of a layout.
3693 FrameView* view = frame->View();
3694 if (view->NeedsLayout())
3695 view->UpdateLayout();
3696
3697 UpdatePageOverlays(); 3679 UpdatePageOverlays();
3698 3680
3699 fullscreen_controller_->DidUpdateLayout(); 3681 fullscreen_controller_->DidUpdateLayout();
3700 client_->DidUpdateLayout(); 3682 client_->DidUpdateLayout();
3701 } 3683 }
3702 3684
3703 void WebViewImpl::DidChangeContentsSize() { 3685 void WebViewImpl::DidChangeContentsSize() {
3704 GetPageScaleConstraintsSet().DidChangeContentsSize(ContentsSize(), 3686 GetPageScaleConstraintsSet().DidChangeContentsSize(ContentsSize(),
3705 PageScaleFactor()); 3687 PageScaleFactor());
3706 } 3688 }
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
4169 if (focused_frame->LocalFrameRoot() != MainFrameImpl()->GetFrame()) 4151 if (focused_frame->LocalFrameRoot() != MainFrameImpl()->GetFrame())
4170 return nullptr; 4152 return nullptr;
4171 return focused_frame; 4153 return focused_frame;
4172 } 4154 }
4173 4155
4174 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const { 4156 LocalFrame* WebViewImpl::FocusedLocalFrameAvailableForIme() const {
4175 return ime_accept_events_ ? FocusedLocalFrameInWidget() : nullptr; 4157 return ime_accept_events_ ? FocusedLocalFrameInWidget() : nullptr;
4176 } 4158 }
4177 4159
4178 } // namespace blink 4160 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698