Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1883)

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java

Issue 831903004: [WebView] Add a new flushVisualState API to AwContents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: int -> uint62 everywhere for real. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a20ddb5f79f5cd14367042c38f9a22a2c0bfb6bc
--- /dev/null
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java
@@ -0,0 +1,117 @@
+// 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.android_webview.test;
+
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.android_webview.AwContents;
+import org.chromium.android_webview.AwContents.VisualStateFlushCallback;
+import org.chromium.android_webview.test.util.CommonResources;
+import org.chromium.android_webview.test.util.GraphicsTestUtils;
+import org.chromium.base.test.util.Feature;
+import org.chromium.content.browser.test.util.CallbackHelper;
+import org.chromium.content_public.browser.LoadUrlParams;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Visual state related tests.
+ */
+public class VisualStateTest extends AwTestBase {
+
+ private TestAwContentsClient mContentsClient = new TestAwContentsClient();
+
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testFlushVisualStateCallbackIsReceived() throws Throwable {
+ AwTestContainerView testContainer = createAwTestContainerViewOnMainSync(mContentsClient);
+ final AwContents awContents = testContainer.getAwContents();
+ loadUrlSync(
+ awContents, mContentsClient.getOnPageFinishedHelper(), CommonResources.ABOUT_HTML);
+ final CallbackHelper ch = new CallbackHelper();
+ final int chCount = ch.getCallCount();
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ awContents.flushVisualState(new AwContents.VisualStateFlushCallback() {
+ @Override
+ public void onComplete() {
+ ch.notifyCalled();
+ }
+
+ @Override
+ public void onFailure() {
+ fail("onFailure received");
+ }
+ });
+ }
+ });
+ ch.waitForCallback(chCount);
+ }
+
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testFlushVisualStateCallbackWaitsForContentsToBeOnScreen() throws Throwable {
+ // This test loads a page with a blue background color. It then waits for the DOM tree
+ // in blink to contain the contents of the blue page (which happens when the onPageFinished
+ // event is received). It then flushes the contents and verifies that the blue page
+ // background color is drawn when the flush callback is received.
+ final LoadUrlParams bluePageUrl = createTestPageUrl("blue");
+ final CountDownLatch testFinishedSignal = new CountDownLatch(1);
+
+ final AtomicReference<AwContents> awContentsRef = new AtomicReference<>();
+ final AwTestContainerView testView =
+ createAwTestContainerViewOnMainSync(new TestAwContentsClient() {
+ @Override
+ public void onPageFinished(String url) {
+ if (bluePageUrl.getUrl().equals(url)) {
+ awContentsRef.get().flushVisualState(new VisualStateFlushCallback() {
+ @Override
+ public void onFailure() {
+ fail("onFailure received");
+ }
+
+ @Override
+ public void onComplete() {
+ Bitmap blueScreenshot = GraphicsTestUtils.drawAwContents(
+ awContentsRef.get(), 1, 1);
+ assertEquals(Color.BLUE, blueScreenshot.getPixel(0, 0));
+ testFinishedSignal.countDown();
+ }
+ });
+ }
+ }
+ });
+ final AwContents awContents = testView.getAwContents();
+ awContentsRef.set(awContents);
+
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ awContents.setBackgroundColor(Color.RED);
+ awContents.loadUrl(bluePageUrl);
+
+ // We have just loaded the blue page, but the graphics pipeline is asynchronous
+ // so at this point the WebView still draws red, ie. the View background color.
+ // Only when the flush callback is received will we know for certain that the
+ // blue page contents are on screen.
+ Bitmap redScreenshot = GraphicsTestUtils.drawAwContents(
+ awContentsRef.get(), 1, 1);
+ assertEquals(Color.RED, redScreenshot.getPixel(0, 0));
+ }
+ });
+
+ assertTrue(testFinishedSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ }
+
+ private static final LoadUrlParams createTestPageUrl(String backgroundColor) {
+ return LoadUrlParams.createLoadDataParams(
+ "<html><body bgcolor=" + backgroundColor + "></body></html>", "text/html", false);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698