| 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
|
| index 2ae84a6b203469799177395a7870e94bfd8ab7ef..8af193ff1c9698056a47f27fdf5360b737cf8dfb 100644
|
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/VisualStateTest.java
|
| @@ -9,13 +9,12 @@ import android.graphics.Color;
|
| import android.graphics.Rect;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
| import android.util.Base64;
|
| -import android.view.View;
|
| -import android.webkit.WebChromeClient;
|
|
|
| import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
|
|
|
| import org.chromium.android_webview.AwContents;
|
| import org.chromium.android_webview.AwContents.VisualStateCallback;
|
| +import org.chromium.android_webview.AwContentsClient;
|
| import org.chromium.android_webview.AwWebResourceResponse;
|
| import org.chromium.android_webview.test.util.CommonResources;
|
| import org.chromium.android_webview.test.util.GraphicsTestUtils;
|
| @@ -32,6 +31,7 @@ import java.io.FilterInputStream;
|
| import java.io.IOException;
|
| import java.io.InputStream;
|
|
|
| +import java.util.concurrent.Callable;
|
| import java.util.concurrent.CountDownLatch;
|
| import java.util.concurrent.TimeUnit;
|
| import java.util.concurrent.atomic.AtomicReference;
|
| @@ -42,6 +42,8 @@ import java.util.concurrent.atomic.AtomicReference;
|
| public class VisualStateTest extends AwTestBase {
|
| private static final String WAIT_FOR_JS_TEST_URL =
|
| "file:///android_asset/visual_state_waits_for_js_test.html";
|
| + private static final String WAIT_FOR_JS_DETACHED_TEST_URL =
|
| + "file:///android_asset/visual_state_waits_for_js_detached_test.html";
|
| private static final String ON_PAGE_COMMIT_VISIBLE_TEST_URL =
|
| "file:///android_asset/visual_state_on_page_commit_visible_test.html";
|
| private static final String FULLSCREEN_TEST_URL =
|
| @@ -403,77 +405,60 @@ public class VisualStateTest extends AwTestBase {
|
| assertTrue(testFinishedSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
| }
|
|
|
| + private AwTestContainerView createDetachedTestContainerViewOnMainSync(
|
| + final AwContentsClient awContentsClient) {
|
| + return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<AwTestContainerView>() {
|
| + @Override
|
| + public AwTestContainerView call() {
|
| + AwTestContainerView detachedView =
|
| + createDetachedAwTestContainerView(awContentsClient);
|
| + detachedView.setClipBounds(new Rect(0, 0, 100, 100));
|
| + detachedView.measure(100, 100);
|
| + detachedView.layout(0, 0, 100, 100);
|
| + return detachedView;
|
| + }
|
| + });
|
| + }
|
| +
|
| @Feature({"AndroidWebView"})
|
| @SmallTest
|
| - public void testVisualStateCallbackWhenContainerViewDetached()
|
| - throws Throwable {
|
| - final CountDownLatch readyToEnterFullscreenSignal = new CountDownLatch(1);
|
| - final CountDownLatch hasCustomViewSignal = new CountDownLatch(1);
|
| + public void testVisualStateCallbackWhenContainerViewDetached() throws Throwable {
|
| final CountDownLatch testFinishedSignal = new CountDownLatch(1);
|
|
|
| - final AtomicReference<AwContents> awContentsRef = new AtomicReference<>();
|
| - final AtomicReference<View> customViewRef = new AtomicReference<>();
|
| -
|
| - final TestAwContentsClient awContentsClient = new TestAwContentsClient() {
|
| - @Override
|
| - public void onPageFinished(String url) {
|
| - super.onPageFinished(url);
|
| - readyToEnterFullscreenSignal.countDown();
|
| - }
|
| -
|
| - @Override
|
| - public void onShowCustomView(
|
| - final View customView, WebChromeClient.CustomViewCallback callback) {
|
| - // Please note that we don't attach the custom view to the window here
|
| - // (awContentsClient is an instance of TestAwContentsClient, not
|
| - // FullScreenVideoTestAwContentsClient).
|
| - customView.setClipBounds(new Rect(0, 0, 100, 100));
|
| - customView.measure(100, 100);
|
| - customView.layout(0, 0, 100, 100);
|
| - customViewRef.set(customView);
|
| - hasCustomViewSignal.countDown();
|
| - }
|
| - };
|
| - final AwTestContainerView testView = createAwTestContainerViewOnMainSync(awContentsClient);
|
| + final TestAwContentsClient awContentsClient = new TestAwContentsClient();
|
| + final AwTestContainerView testView =
|
| + createDetachedTestContainerViewOnMainSync(awContentsClient);
|
| final AwContents awContents = testView.getAwContents();
|
| - awContentsRef.set(awContents);
|
| final ContentViewCore contentViewCore = testView.getContentViewCore();
|
| +
|
| enableJavaScriptOnUiThread(awContents);
|
| - awContents.getSettings().setFullscreenSupported(true);
|
|
|
| - // JS will notify this observer once it has entered fullscreen.
|
| - final JavascriptEventObserver jsObserver = new JavascriptEventObserver();
|
| - runTestOnUiThread(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - jsObserver.register(contentViewCore, "jsObserver");
|
| + // JS will notify this observer once it has changed the background color of the page.
|
| + final Object pageChangeNotifier = new Object() {
|
| + public void onPageChanged() {
|
| + ThreadUtils.postOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + awContents.insertVisualStateCallback(20, new VisualStateCallback() {
|
| + @Override
|
| + public void onComplete(long id) {
|
| + Bitmap redScreenshot =
|
| + GraphicsTestUtils.drawAwContents(awContents, 100, 100);
|
| + assertEquals(Color.RED, redScreenshot.getPixel(50, 50));
|
| + testFinishedSignal.countDown();
|
| + }
|
| + });
|
| + }
|
| + });
|
| }
|
| - });
|
| -
|
| - loadUrlSync(awContents, awContentsClient.getOnPageFinishedHelper(), FULLSCREEN_TEST_URL);
|
| -
|
| - assertTrue(readyToEnterFullscreenSignal.await(
|
| - AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
| - DOMUtils.clickNode(VisualStateTest.this, contentViewCore, ENTER_FULLSCREEN_CONTROL_ID);
|
| -
|
| - assertTrue(hasCustomViewSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
|
| - assertTrue(jsObserver.waitForEvent(WAIT_TIMEOUT_MS));
|
| + };
|
|
|
| runTestOnUiThread(new Runnable() {
|
| @Override
|
| public void run() {
|
| - awContents.insertVisualStateCallback(20, new VisualStateCallback() {
|
| - @Override
|
| - public void onComplete(long id) {
|
| - assertFalse(customViewRef.get().isAttachedToWindow());
|
| - // NOTE: We cannot use drawAwContents here because the web contents
|
| - // are rendered into the custom view while in fullscreen.
|
| - Bitmap redScreenshot = GraphicsTestUtils.drawView(
|
| - customViewRef.get(), 100, 100);
|
| - assertEquals(Color.RED, redScreenshot.getPixel(50, 50));
|
| - testFinishedSignal.countDown();
|
| - }
|
| - });
|
| + contentViewCore.addPossiblyUnsafeJavascriptInterface(
|
| + pageChangeNotifier, "pageChangeNotifier", null);
|
| + awContents.loadUrl(WAIT_FOR_JS_DETACHED_TEST_URL);
|
| }
|
| });
|
|
|
|
|