Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / android_webview / javatests / src / org / chromium / android_webview / test / AwContentsRenderTest.java
1 // Copyright 2013 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
5 package org.chromium.android_webview.test;
6
7 import android.graphics.Bitmap;
8 import android.graphics.Color;
9 import android.test.suitebuilder.annotation.SmallTest;
10
11 import org.chromium.android_webview.AwContents;
12 import org.chromium.base.ThreadUtils;
13 import org.chromium.base.test.util.Feature;
14
15 import java.util.concurrent.Callable;
16
17 /**
18  * AwContents rendering / pixel tests.
19  */
20 public class AwContentsRenderTest extends AwTestBase {
21
22     private TestAwContentsClient mContentsClient;
23     private AwContents mAwContents;
24
25     @Override
26     public void setUp() throws Exception {
27         super.setUp();
28         mContentsClient = new TestAwContentsClient();
29         final AwTestContainerView testContainerView =
30                 createAwTestContainerViewOnMainSync(mContentsClient);
31         mAwContents = testContainerView.getAwContents();
32     }
33
34     void setBackgroundColorOnUiThread(final int c) {
35         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
36             @Override
37             public void run() {
38                 mAwContents.setBackgroundColor(c);
39             }
40         });
41     }
42
43     Bitmap grabViewToBitmap() {
44         final Bitmap result = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);
45         mAwContents.onDraw(new android.graphics.Canvas(result));
46         return result;
47     }
48
49     int sampleBackgroundColorOnUiThread() throws Exception {
50         return ThreadUtils.runOnUiThreadBlocking(new Callable<Integer>() {
51             @Override
52             public Integer call() throws Exception {
53                 return grabViewToBitmap().getPixel(0, 0);
54             }
55         });
56     }
57
58     void pollForBackgroundColor(final int c) throws Throwable {
59         poll(new Callable<Boolean>() {
60             @Override
61             public Boolean call() throws Exception {
62                 return sampleBackgroundColorOnUiThread() == c;
63             }
64         });
65     }
66
67     /*
68     @SmallTest
69     @Feature({"AndroidWebView"})
70     */
71     public void testSetGetBackgroundColor() throws Throwable {
72         setBackgroundColorOnUiThread(Color.MAGENTA);
73         pollForBackgroundColor(Color.MAGENTA);
74
75         setBackgroundColorOnUiThread(Color.CYAN);
76         pollForBackgroundColor(Color.CYAN);
77
78         loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), "about:blank");
79         assertEquals(Color.CYAN, sampleBackgroundColorOnUiThread());
80
81         setBackgroundColorOnUiThread(Color.YELLOW);
82         pollForBackgroundColor(Color.YELLOW);
83
84         loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
85                 "data:text/html,<html><head><style>body {background-color:#227788}</style></head>" +
86                 "<body></body></html>");
87         pollForBackgroundColor(Color.rgb(0x22, 0x77, 0x88));
88
89         // Changing the base background should not override CSS background.
90         setBackgroundColorOnUiThread(Color.MAGENTA);
91         assertEquals(Color.rgb(0x22, 0x77, 0x88), sampleBackgroundColorOnUiThread());
92         // ...setting the background is asynchronous, so pause a bit and retest just to be sure.
93         Thread.sleep(500);
94         assertEquals(Color.rgb(0x22, 0x77, 0x88), sampleBackgroundColorOnUiThread());
95     }
96
97     @SmallTest
98     @Feature({"AndroidWebView"})
99     public void testPictureListener() throws Throwable {
100         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
101             @Override
102             public void run() {
103                 mAwContents.enableOnNewPicture(true, true);
104             }
105         });
106
107         int pictureCount = mContentsClient.getPictureListenerHelper().getCallCount();
108         loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), "about:blank");
109         mContentsClient.getPictureListenerHelper().waitForCallback(pictureCount, 1);
110         // Invalidation only, so picture should be null.
111         assertNull(mContentsClient.getPictureListenerHelper().getPicture());
112     }
113 }