Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
index ef454af67f3c07c6ca6e4338cc7fda6e9600f334..be0c591ae48f78552666d1a34d009e9839254f49 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
@@ -48,6 +48,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreatorManager; |
import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
import org.chromium.chrome.browser.widget.ControlContainer; |
import org.chromium.content.browser.ContentReadbackHandler; |
+import org.chromium.content.browser.ContentViewClient; |
import org.chromium.content.browser.ContentViewCore; |
import org.chromium.content.browser.SPenSupport; |
import org.chromium.ui.UiUtils; |
@@ -432,7 +433,7 @@ public class CompositorViewHolder extends FrameLayout |
mLayoutManager.getActiveLayout().getAllContentViewCores(sCachedCVCList); |
for (int i = 0; i < sCachedCVCList.size(); i++) { |
- sCachedCVCList.get(i).onPhysicalBackingSizeChanged(width, height); |
+ adjustPhysicalBackingSize(sCachedCVCList.get(i), width, height); |
} |
sCachedCVCList.clear(); |
} |
@@ -932,12 +933,42 @@ public class CompositorViewHolder extends FrameLayout |
contentViewCore.setCurrentMotionEventOffsets(0.f, 0.f); |
contentViewCore.setTopControlsHeight( |
getTopControlsHeightPixels(), contentViewCore.doTopControlsShrinkBlinkSize()); |
- contentViewCore.onPhysicalBackingSizeChanged( |
+ |
+ adjustPhysicalBackingSize(contentViewCore, |
mCompositorView.getWidth(), mCompositorView.getHeight()); |
+ |
contentViewCore.onOverdrawBottomHeightChanged(mCompositorView.getOverdrawBottomHeight()); |
} |
/** |
+ * Adjusts the physical backing size of a given ContentViewCore. This method will first check |
+ * if the ContentViewCore's client wants to override the size and, if so, it will use the |
+ * values provided by the {@link ContentViewClient#getDesiredWidthMeasureSpec()} and |
+ * {@link ContentViewClient#getDesiredHeightMeasureSpec()} methods. If no value is provided |
+ * in one of these methods, the values from the |width| and |height| arguments will be |
+ * used instead. |
+ * |
+ * @param contentViewCore The {@link ContentViewCore} to resize. |
+ * @param width The default width. |
+ * @param height The default height. |
+ */ |
+ private void adjustPhysicalBackingSize(ContentViewCore contentViewCore, int width, int height) { |
+ ContentViewClient client = contentViewCore.getContentViewClient(); |
+ |
+ int desiredWidthMeasureSpec = client.getDesiredWidthMeasureSpec(); |
+ if (MeasureSpec.getMode(desiredWidthMeasureSpec) != MeasureSpec.UNSPECIFIED) { |
+ width = MeasureSpec.getSize(desiredWidthMeasureSpec); |
+ } |
+ |
+ int desiredHeightMeasureSpec = client.getDesiredHeightMeasureSpec(); |
+ if (MeasureSpec.getMode(desiredHeightMeasureSpec) != MeasureSpec.UNSPECIFIED) { |
+ height = MeasureSpec.getSize(desiredHeightMeasureSpec); |
+ } |
+ |
+ contentViewCore.onPhysicalBackingSizeChanged(width, height); |
donnd
2015/07/14 22:24:12
Should this be called even when the width and heig
David Trainor- moved to gerrit
2015/07/14 23:12:00
I think internally it checks the values and ignore
pedro (no code reviews)
2015/07/15 00:19:16
Acknowledged.
pedro (no code reviews)
2015/07/15 00:19:16
I tried to keep the previous behavior, so whenever
|
+ } |
+ |
+ /** |
* Resize {@code view} to match the size of this {@link FrameLayout}. This will only happen if |
* {@code view} is not {@code null} and if {@link View#getWindowToken()} returns {@code null} |
* (the {@link View} is not part of the view hierarchy). |
@@ -954,7 +985,7 @@ public class CompositorViewHolder extends FrameLayout |
int height = getHeight(); |
view.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), |
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); |
- view.layout(0, 0, width, height); |
+ view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); |
return true; |
} |