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

Side by Side Diff: Source/web/PageScaleConstraintsSet.cpp

Issue 271593005: Moved main frame resize to happen outside refreshPageScaleFactor. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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 | « Source/web/PageScaleConstraintsSet.h ('k') | Source/web/WebViewImpl.cpp » ('j') | 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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 , m_constraintsDirty(false) 47 , m_constraintsDirty(false)
48 { 48 {
49 m_finalConstraints = defaultConstraints(); 49 m_finalConstraints = defaultConstraints();
50 } 50 }
51 51
52 PageScaleConstraints PageScaleConstraintsSet::defaultConstraints() const 52 PageScaleConstraints PageScaleConstraintsSet::defaultConstraints() const
53 { 53 {
54 return PageScaleConstraints(-1, defaultMinimumScale, defaultMaximumScale); 54 return PageScaleConstraints(-1, defaultMinimumScale, defaultMaximumScale);
55 } 55 }
56 56
57 void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportDescrip tion& description, IntSize viewSize, Length legacyFallbackWidth) 57 void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportDescrip tion& description, Length legacyFallbackWidth)
58 { 58 {
59 m_pageDefinedConstraints = description.resolve(viewSize, legacyFallbackWidth ); 59 m_pageDefinedConstraints = description.resolve(m_viewSize, legacyFallbackWid th);
60 60
61 m_constraintsDirty = true; 61 m_constraintsDirty = true;
62 } 62 }
63 63
64 void PageScaleConstraintsSet::setUserAgentConstraints(const PageScaleConstraints & userAgentConstraints) 64 void PageScaleConstraintsSet::setUserAgentConstraints(const PageScaleConstraints & userAgentConstraints)
65 { 65 {
66 m_userAgentConstraints = userAgentConstraints; 66 m_userAgentConstraints = userAgentConstraints;
67 m_constraintsDirty = true; 67 m_constraintsDirty = true;
68 } 68 }
69 69
70 PageScaleConstraints PageScaleConstraintsSet::computeConstraintsStack() const 70 PageScaleConstraints PageScaleConstraintsSet::computeConstraintsStack() const
71 { 71 {
72 PageScaleConstraints constraints = defaultConstraints(); 72 PageScaleConstraints constraints = defaultConstraints();
73 constraints.overrideWith(m_pageDefinedConstraints); 73 constraints.overrideWith(m_pageDefinedConstraints);
74 constraints.overrideWith(m_userAgentConstraints); 74 constraints.overrideWith(m_userAgentConstraints);
75 return constraints; 75 return constraints;
76 } 76 }
77 77
78 void PageScaleConstraintsSet::computeFinalConstraints() 78 void PageScaleConstraintsSet::computeFinalConstraints()
79 { 79 {
80 m_finalConstraints = computeConstraintsStack(); 80 m_finalConstraints = computeConstraintsStack();
81 81
82 m_constraintsDirty = false; 82 m_constraintsDirty = false;
83 } 83 }
84 84
85 void PageScaleConstraintsSet::adjustFinalConstraintsToContentsSize(IntSize viewS ize, IntSize contentsSize, int nonOverlayScrollbarWidth) 85 void PageScaleConstraintsSet::adjustFinalConstraintsToContentsSize(IntSize conte ntsSize, int nonOverlayScrollbarWidth)
86 { 86 {
87 m_finalConstraints.fitToContentsWidth(contentsSize.width(), viewSize.width() - nonOverlayScrollbarWidth); 87 m_finalConstraints.fitToContentsWidth(contentsSize.width(), m_viewSize.width () - nonOverlayScrollbarWidth);
88 } 88 }
89 89
90 void PageScaleConstraintsSet::setNeedsReset(bool needsReset) 90 void PageScaleConstraintsSet::setNeedsReset(bool needsReset)
91 { 91 {
92 m_needsReset = needsReset; 92 m_needsReset = needsReset;
93 if (needsReset) 93 if (needsReset)
94 m_constraintsDirty = true; 94 m_constraintsDirty = true;
95 } 95 }
96 96
97 void PageScaleConstraintsSet::didChangeContentsSize(IntSize contentsSize, float pageScaleFactor) 97 void PageScaleConstraintsSet::didChangeContentsSize(IntSize contentsSize, float pageScaleFactor)
(...skipping 30 matching lines...) Expand all
128 static float getLayoutWidthForNonWideViewport(const FloatSize& deviceSize, float initialScale) 128 static float getLayoutWidthForNonWideViewport(const FloatSize& deviceSize, float initialScale)
129 { 129 {
130 return initialScale == -1 ? deviceSize.width() : deviceSize.width() / initia lScale; 130 return initialScale == -1 ? deviceSize.width() : deviceSize.width() / initia lScale;
131 } 131 }
132 132
133 static float computeHeightByAspectRatio(float width, const FloatSize& deviceSize ) 133 static float computeHeightByAspectRatio(float width, const FloatSize& deviceSize )
134 { 134 {
135 return width * (deviceSize.height() / deviceSize.width()); 135 return width * (deviceSize.height() / deviceSize.width());
136 } 136 }
137 137
138 IntSize PageScaleConstraintsSet::mainFrameSize(const IntSize& viewportSize, cons t IntSize& contentsSize) const 138 void PageScaleConstraintsSet::didChangeViewSize(const IntSize& size)
139 {
140 if (m_viewSize == size)
141 return;
142
143 m_viewSize = size;
144 m_constraintsDirty = true;
145 }
146
147 IntSize PageScaleConstraintsSet::mainFrameSize(const IntSize& contentsSize) cons t
139 { 148 {
140 // If there's no explicit minimum scale factor set, size the frame so that i ts width == content width 149 // If there's no explicit minimum scale factor set, size the frame so that i ts width == content width
141 // so there's no horizontal scrolling at the minimum scale. 150 // so there's no horizontal scrolling at the minimum scale.
142 if (m_pageDefinedConstraints.minimumScale < finalConstraints().minimumScale 151 if (m_pageDefinedConstraints.minimumScale < finalConstraints().minimumScale
143 && m_userAgentConstraints.minimumScale < finalConstraints().minimumScale 152 && m_userAgentConstraints.minimumScale < finalConstraints().minimumScale
144 && contentsSize.width() 153 && contentsSize.width()
145 && viewportSize.width()) 154 && m_viewSize.width())
146 return IntSize(contentsSize.width(), computeHeightByAspectRatio(contents Size.width(), viewportSize)); 155 return IntSize(contentsSize.width(), computeHeightByAspectRatio(contents Size.width(), m_viewSize));
147 156
148 // If there is a minimum scale (or there's no content size yet), the frame s ize should match the viewport 157 // If there is a minimum scale (or there's no content size yet), the frame s ize should match the viewport
149 // size at minimum scale, since the viewport must always be contained by the frame. 158 // size at minimum scale, since the viewport must always be contained by the frame.
150 IntSize frameSize(viewportSize); 159 IntSize frameSize(m_viewSize);
151 frameSize.scale(1 / finalConstraints().minimumScale); 160 frameSize.scale(1 / finalConstraints().minimumScale);
152 return frameSize; 161 return frameSize;
153 } 162 }
154 163
155 void PageScaleConstraintsSet::adjustForAndroidWebViewQuirks(const ViewportDescri ption& description, IntSize viewSize, int layoutFallbackWidth, float deviceScale Factor, bool supportTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWid eViewport, bool loadWithOverviewMode, bool nonUserScalableQuirkEnabled) 164 void PageScaleConstraintsSet::adjustForAndroidWebViewQuirks(const ViewportDescri ption& description, int layoutFallbackWidth, float deviceScaleFactor, bool suppo rtTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWideViewport, bool lo adWithOverviewMode, bool nonUserScalableQuirkEnabled)
156 { 165 {
157 if (!supportTargetDensityDPI && !wideViewportQuirkEnabled && loadWithOvervie wMode && !nonUserScalableQuirkEnabled) 166 if (!supportTargetDensityDPI && !wideViewportQuirkEnabled && loadWithOvervie wMode && !nonUserScalableQuirkEnabled)
158 return; 167 return;
159 168
160 const float oldInitialScale = m_pageDefinedConstraints.initialScale; 169 const float oldInitialScale = m_pageDefinedConstraints.initialScale;
161 if (!loadWithOverviewMode) { 170 if (!loadWithOverviewMode) {
162 bool resetInitialScale = false; 171 bool resetInitialScale = false;
163 if (description.zoom == -1) { 172 if (description.zoom == -1) {
164 if (description.maxWidth.isAuto() || description.maxWidth.type() == ExtendToZoom) 173 if (description.maxWidth.isAuto() || description.maxWidth.type() == ExtendToZoom)
165 resetInitialScale = true; 174 resetInitialScale = true;
(...skipping 18 matching lines...) Expand all
184 m_pageDefinedConstraints.maximumScale *= targetDensityDPIFactor; 193 m_pageDefinedConstraints.maximumScale *= targetDensityDPIFactor;
185 if (wideViewportQuirkEnabled && (!useWideViewport || description.maxWidt h.type() == DeviceWidth)) { 194 if (wideViewportQuirkEnabled && (!useWideViewport || description.maxWidt h.type() == DeviceWidth)) {
186 adjustedLayoutSizeWidth /= targetDensityDPIFactor; 195 adjustedLayoutSizeWidth /= targetDensityDPIFactor;
187 adjustedLayoutSizeHeight /= targetDensityDPIFactor; 196 adjustedLayoutSizeHeight /= targetDensityDPIFactor;
188 } 197 }
189 } 198 }
190 199
191 if (wideViewportQuirkEnabled) { 200 if (wideViewportQuirkEnabled) {
192 if (useWideViewport && (description.maxWidth.isAuto() || description.max Width.type() == ExtendToZoom) && description.zoom != 1.0f) { 201 if (useWideViewport && (description.maxWidth.isAuto() || description.max Width.type() == ExtendToZoom) && description.zoom != 1.0f) {
193 adjustedLayoutSizeWidth = layoutFallbackWidth; 202 adjustedLayoutSizeWidth = layoutFallbackWidth;
194 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, viewSize); 203 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, m_viewSize);
195 } else if (!useWideViewport) { 204 } else if (!useWideViewport) {
196 const float nonWideScale = description.zoom < 1 && description.maxWi dth.type() != DeviceWidth && description.maxWidth.type() != DeviceHeight ? -1 : oldInitialScale; 205 const float nonWideScale = description.zoom < 1 && description.maxWi dth.type() != DeviceWidth && description.maxWidth.type() != DeviceHeight ? -1 : oldInitialScale;
197 adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(viewSize, nonWideScale) / targetDensityDPIFactor; 206 adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(m_viewSiz e, nonWideScale) / targetDensityDPIFactor;
198 float newInitialScale = targetDensityDPIFactor; 207 float newInitialScale = targetDensityDPIFactor;
199 if (m_userAgentConstraints.initialScale != -1 && (description.maxWid th.type() == DeviceWidth || ((description.maxWidth.isAuto() || description.maxWi dth.type() == ExtendToZoom) && description.zoom == -1))) { 208 if (m_userAgentConstraints.initialScale != -1 && (description.maxWid th.type() == DeviceWidth || ((description.maxWidth.isAuto() || description.maxWi dth.type() == ExtendToZoom) && description.zoom == -1))) {
200 adjustedLayoutSizeWidth /= m_userAgentConstraints.initialScale; 209 adjustedLayoutSizeWidth /= m_userAgentConstraints.initialScale;
201 newInitialScale = m_userAgentConstraints.initialScale; 210 newInitialScale = m_userAgentConstraints.initialScale;
202 } 211 }
203 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, viewSize); 212 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, m_viewSize);
204 if (description.zoom < 1) { 213 if (description.zoom < 1) {
205 m_pageDefinedConstraints.initialScale = newInitialScale; 214 m_pageDefinedConstraints.initialScale = newInitialScale;
206 if (m_pageDefinedConstraints.minimumScale != -1) 215 if (m_pageDefinedConstraints.minimumScale != -1)
207 m_pageDefinedConstraints.minimumScale = std::min<float>(m_pa geDefinedConstraints.minimumScale, m_pageDefinedConstraints.initialScale); 216 m_pageDefinedConstraints.minimumScale = std::min<float>(m_pa geDefinedConstraints.minimumScale, m_pageDefinedConstraints.initialScale);
208 if (m_pageDefinedConstraints.maximumScale != -1) 217 if (m_pageDefinedConstraints.maximumScale != -1)
209 m_pageDefinedConstraints.maximumScale = std::max<float>(m_pa geDefinedConstraints.maximumScale, m_pageDefinedConstraints.initialScale); 218 m_pageDefinedConstraints.maximumScale = std::max<float>(m_pa geDefinedConstraints.maximumScale, m_pageDefinedConstraints.initialScale);
210 } 219 }
211 } 220 }
212 } 221 }
213 222
214 if (nonUserScalableQuirkEnabled && !description.userZoom) { 223 if (nonUserScalableQuirkEnabled && !description.userZoom) {
215 m_pageDefinedConstraints.initialScale = targetDensityDPIFactor; 224 m_pageDefinedConstraints.initialScale = targetDensityDPIFactor;
216 m_pageDefinedConstraints.minimumScale = m_pageDefinedConstraints.initial Scale; 225 m_pageDefinedConstraints.minimumScale = m_pageDefinedConstraints.initial Scale;
217 m_pageDefinedConstraints.maximumScale = m_pageDefinedConstraints.initial Scale; 226 m_pageDefinedConstraints.maximumScale = m_pageDefinedConstraints.initial Scale;
218 if (description.maxWidth.isAuto() || description.maxWidth.type() == Exte ndToZoom || description.maxWidth.type() == DeviceWidth) { 227 if (description.maxWidth.isAuto() || description.maxWidth.type() == Exte ndToZoom || description.maxWidth.type() == DeviceWidth) {
219 adjustedLayoutSizeWidth = viewSize.width() / targetDensityDPIFactor; 228 adjustedLayoutSizeWidth = m_viewSize.width() / targetDensityDPIFacto r;
220 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, viewSize); 229 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout SizeWidth, m_viewSize);
221 } 230 }
222 } 231 }
223 232
224 m_pageDefinedConstraints.layoutSize.setWidth(adjustedLayoutSizeWidth); 233 m_pageDefinedConstraints.layoutSize.setWidth(adjustedLayoutSizeWidth);
225 m_pageDefinedConstraints.layoutSize.setHeight(adjustedLayoutSizeHeight); 234 m_pageDefinedConstraints.layoutSize.setHeight(adjustedLayoutSizeHeight);
226 } 235 }
227 236
228 } // namespace WebCore 237 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/web/PageScaleConstraintsSet.h ('k') | Source/web/WebViewImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698