1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.content.browser;
6
7import android.content.Context;
8import android.util.DisplayMetrics;
9import android.view.WindowManager;
10
11import org.chromium.base.test.util.DisabledTest;
12import org.chromium.content.browser.test.util.JavaScriptUtils;
13
14/**
15 * Test suite for viewport-related properties.
16 */
17public class ViewportTest extends ContentViewTestBase {
18
19    protected String evaluateStringValue(String expression) throws Throwable {
20        return JavaScriptUtils.executeJavaScriptAndWaitForResult(getContentViewCore(),
21                expression);
22    }
23
24    protected float evaluateFloatValue(String expression) throws Throwable {
25        return Float.valueOf(evaluateStringValue(expression));
26    }
27
28    protected int evaluateIntegerValue(String expression) throws Throwable {
29        return Integer.parseInt(evaluateStringValue(expression));
30    }
31
32    /*
33    @MediumTest
34    @Feature({"Viewport", "InitialViewportSize"})
35    https://bugs.webkit.org/show_bug.cgi?id=107424
36    */
37    @DisabledTest
38    public void testDefaultViewportSize() throws Throwable {
39        launchContentShellWithUrl("about:blank");
40        waitForActiveShellToBeDoneLoading();
41
42        Context context = getInstrumentation().getTargetContext();
43        WindowManager winManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
44        DisplayMetrics metrics = new DisplayMetrics();
45        winManager.getDefaultDisplay().getMetrics(metrics);
46
47        // window.devicePixelRatio should match the default display. Only check to 1 decimal place
48        // to allow for rounding.
49        assertEquals(metrics.density, evaluateFloatValue("window.devicePixelRatio"), 0.1);
50
51        // Check that the viewport width is vaguely sensible.
52        int viewportWidth = evaluateIntegerValue("document.documentElement.clientWidth");
53        assertTrue(Math.abs(evaluateIntegerValue("window.innerWidth") - viewportWidth) <= 1);
54        assertTrue(viewportWidth >= 979);
55        assertTrue(viewportWidth <= Math.max(981, metrics.widthPixels / metrics.density + 1));
56    }
57}
58