| Index: chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/MockLayoutHost.java | 
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/MockLayoutHost.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/MockLayoutHost.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..cc50f6c14d89fc6e05d0101ab616a31d43fc4d66 | 
| --- /dev/null | 
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/MockLayoutHost.java | 
| @@ -0,0 +1,151 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.chrome.browser.compositor.layouts; | 
| + | 
| +import android.content.Context; | 
| +import android.graphics.Bitmap; | 
| +import android.graphics.Rect; | 
| + | 
| +import org.chromium.chrome.browser.compositor.TitleCache; | 
| +import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; | 
| +import org.chromium.content.browser.ContentViewCore; | 
| +import org.chromium.ui.resources.ResourceManager; | 
| + | 
| +/** | 
| + * The {@link LayoutManagerHost} usually is based on a {@link android.view.View}. This | 
| + * implementation is stripped down with static sizes but still support 2 different orientations. | 
| + */ | 
| +class MockLayoutHost implements LayoutManagerHost, LayoutRenderHost { | 
| + | 
| +    public static final int LAYOUT_HOST_PORTRAIT_WIDTH = 320; // dp | 
| +    public static final int LAYOUT_HOST_PORTRAIT_HEIGHT = 460; // dp | 
| + | 
| +    private final Context mContext; | 
| +    private boolean mPortrait = true; | 
| + | 
| +    static class MockTitleCache implements TitleCache { | 
| +        @Override | 
| +        public void put(int tabId, Bitmap titleBitmap, Bitmap faviconBitmap, boolean isIncognito, | 
| +                boolean isRtl) { } | 
| + | 
| +        @Override | 
| +        public void remove(int tabId) { } | 
| + | 
| +        @Override | 
| +        public void clearExcept(int tabId) { } | 
| +    } | 
| + | 
| +    private final MockTitleCache mMockTitleCache = new MockTitleCache(); | 
| + | 
| +    MockLayoutHost(Context context) { | 
| +        mContext = context; | 
| +    } | 
| + | 
| +    public void setOrientation(boolean portrait) { | 
| +        mPortrait = portrait; | 
| +    } | 
| + | 
| +    @Override | 
| +    public void requestRender() { } | 
| + | 
| +    @Override | 
| +    public void onCompositorLayout() { } | 
| + | 
| +    @Override | 
| +    public void onSwapBuffersCompleted(int pendingSwapBuffersCount) { } | 
| + | 
| +    @Override | 
| +    public void onSurfaceCreated() { } | 
| + | 
| +    @Override | 
| +    public void onPhysicalBackingSizeChanged(int width, int height) { } | 
| + | 
| +    @Override | 
| +    public void onOverdrawBottomHeightChanged(int overdrawHeight) {} | 
| + | 
| +    @Override | 
| +    public int getCurrentOverdrawBottomHeight() { | 
| +        return 0; | 
| +    } | 
| + | 
| +    @Override | 
| +    public Context getContext() { | 
| +        return mContext; | 
| +    } | 
| + | 
| +    @Override | 
| +    public int getWidth() { | 
| +        final float density = mContext.getResources().getDisplayMetrics().density; | 
| +        final float size = mPortrait ? LAYOUT_HOST_PORTRAIT_WIDTH : LAYOUT_HOST_PORTRAIT_HEIGHT; | 
| +        return (int) (density * size); | 
| +    } | 
| + | 
| +    @Override | 
| +    public int getHeight() { | 
| +        final float density = mContext.getResources().getDisplayMetrics().density; | 
| +        final float size = mPortrait ? LAYOUT_HOST_PORTRAIT_HEIGHT : LAYOUT_HOST_PORTRAIT_WIDTH; | 
| +        return (int) (density * size); | 
| +    } | 
| + | 
| +    @Override | 
| +    public LayoutRenderHost getLayoutRenderHost() { | 
| +        return this; | 
| +    } | 
| + | 
| +    @Override | 
| +    public void pushDebugRect(Rect rect, int color) { } | 
| + | 
| +    @Override | 
| +    public void loadPersitentTextureDataIfNeeded() { } | 
| + | 
| +    @Override | 
| +    public int getLayoutTabsDrawnCount() { | 
| +        return 0; | 
| +    } | 
| + | 
| +    @Override | 
| +    public void setContentOverlayVisibility(boolean visible) { } | 
| + | 
| +    @Override | 
| +    public TitleCache getTitleCache() { | 
| +        return mMockTitleCache; | 
| +    } | 
| + | 
| +    @Override | 
| +    public ChromeFullscreenManager getFullscreenManager() { | 
| +        return null; | 
| +    } | 
| + | 
| +    @Override | 
| +    public Rect getVisibleViewport(Rect rect) { | 
| +        if (rect == null) rect = new Rect(); | 
| +        rect.set(0, 0, getWidth(), getHeight()); | 
| +        return rect; | 
| +    } | 
| + | 
| +    @Override | 
| +    public int getTopControlsHeightPixels() { | 
| +        return 0; | 
| +    } | 
| + | 
| +    @Override | 
| +    public boolean areTopControlsPermanentlyHidden() { | 
| +        return false; | 
| +    } | 
| + | 
| +    @Override | 
| +    public ResourceManager getResourceManager() { | 
| +        return null; | 
| +    } | 
| + | 
| +    @Override | 
| +    public void invalidateAccessibilityProvider() { } | 
| + | 
| +    @Override | 
| +    public void onContentViewCoreAdded(ContentViewCore content) { } | 
| + | 
| +    @Override | 
| +    public void onContentChanged() { } | 
| +} | 
|  |