| Index: ui/android/java/src/org/chromium/ui/resources/dynamics/ViewResourceInflater.java | 
| diff --git a/ui/android/java/src/org/chromium/ui/resources/dynamics/ViewResourceInflater.java b/ui/android/java/src/org/chromium/ui/resources/dynamics/ViewResourceInflater.java | 
| index 38888dd17f86d6ad7edfffb3ef59670a0daf5bfa..a7349e69242f427e15f0a72afc19a1bfcfe869af 100644 | 
| --- a/ui/android/java/src/org/chromium/ui/resources/dynamics/ViewResourceInflater.java | 
| +++ b/ui/android/java/src/org/chromium/ui/resources/dynamics/ViewResourceInflater.java | 
| @@ -128,6 +128,15 @@ public class ViewResourceInflater { | 
| * Invalidate the inflated View, causing a snapshot of the View to be captured. | 
| */ | 
| public void invalidate() { | 
| +        invalidate(false); | 
| +    } | 
| + | 
| +    /** | 
| +     * Invalidate the inflated View, causing a snapshot of the View to be captured. | 
| +     * | 
| +     * @param didViewSizeChange Whether the View's size has changed.. | 
| +     */ | 
| +    public void invalidate(boolean didViewSizeChange) { | 
| // View must be inflated at this point. If it's not, do it now. | 
| if (mView == null) { | 
| inflate(); | 
| @@ -135,22 +144,26 @@ public class ViewResourceInflater { | 
|  | 
| mIsInvalidated = true; | 
|  | 
| -        // If the View is already attached, we don't need to do anything because the | 
| -        // snapshot will be captured automatically when the View is drawn. | 
| -        if (!mIsAttached) { | 
| -            if (shouldAttachView()) { | 
| -                // TODO(pedrosimonetti): investigate if complex views can be rendered offline. | 
| -                // NOTE(pedrosimonetti): it seems that complex views don't get rendered | 
| -                // properly if not attached to the hierarchy. The problem seem to be related | 
| -                // to the use of the property "layout_gravity: end", possibly in combination | 
| -                // of other things like elastic views (layout_weight: 1) and/or fading edges. | 
| -                attachView(); | 
| -            } else { | 
| -                // When the View is not attached, we need to manually layout the View | 
| -                // and invalidate the resource in order to capture a new snapshot. | 
| -                layout(); | 
| -                invalidateResource(); | 
| +        if (!mIsAttached && shouldAttachView()) { | 
| +            // TODO(pedrosimonetti): investigate if complex views can be rendered offline. | 
| +            // NOTE(pedrosimonetti): it seems that complex views don't get rendered | 
| +            // properly if not attached to the hierarchy. The problem seem to be related | 
| +            // to the use of the property "layout_gravity: end", possibly in combination | 
| +            // of other things like elastic views (layout_weight: 1) and/or fading edges. | 
| +            attachView(); | 
| +        } | 
| + | 
| +        if (mIsAttached) { | 
| +            // Update the View's layout params, which will trigger a re-layout. | 
| +            if (didViewSizeChange) { | 
| +                updateLayoutParams(); | 
| } | 
| +        } else { | 
| +            // When the View is not attached, we need to manually layout the View and | 
| +            // invalidate the resource in order to capture a new snapshot. | 
| +            mView.measure(getWidthMeasureSpec(), getHeightMeasureSpec()); | 
| +            mView.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); | 
| +            invalidateResource(); | 
| } | 
| } | 
|  | 
| @@ -283,14 +296,29 @@ public class ViewResourceInflater { | 
| } | 
|  | 
| /** | 
| -     * Layout the View. This is to be used when the View is not attached to the hierarchy. | 
| +     * Lay out the view according to the current width and height measure specs. | 
| */ | 
| -    private void layout() { | 
| +    private void updateLayoutParams() { | 
| // View must be inflated at this point. | 
| assert mView != null; | 
|  | 
| -        mView.measure(getWidthMeasureSpec(), getHeightMeasureSpec()); | 
| -        mView.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); | 
| +        // Update LayoutParams according to the current measure spec. | 
| +        final int widthMeasureSpec = getWidthMeasureSpec(); | 
| +        int width = ViewGroup.LayoutParams.WRAP_CONTENT; | 
| +        if (View.MeasureSpec.getMode(widthMeasureSpec) == View.MeasureSpec.EXACTLY) { | 
| +            width = View.MeasureSpec.getSize(widthMeasureSpec); | 
| +        } | 
| + | 
| +        final int heightMeasureSpec = getHeightMeasureSpec(); | 
| +        int height = ViewGroup.LayoutParams.WRAP_CONTENT; | 
| +        if (View.MeasureSpec.getMode(heightMeasureSpec) == View.MeasureSpec.EXACTLY) { | 
| +            height = View.MeasureSpec.getSize(heightMeasureSpec); | 
| +        } | 
| + | 
| +        ViewGroup.LayoutParams params = mView.getLayoutParams(); | 
| +        params.width = width; | 
| +        params.height = height; | 
| +        mView.setLayoutParams(params); | 
| } | 
|  | 
| /** | 
|  |