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

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

Issue 972013003: [WebView] Add test for visual state API when view dettached. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.android_webview.test; 5 package org.chromium.android_webview.test;
6 6
7 import android.graphics.Bitmap; 7 import android.graphics.Bitmap;
8 import android.graphics.Color; 8 import android.graphics.Color;
9 import android.graphics.Rect;
10 import android.os.Build;
9 import android.test.suitebuilder.annotation.SmallTest; 11 import android.test.suitebuilder.annotation.SmallTest;
10 import android.view.View; 12 import android.view.View;
11 import android.webkit.WebChromeClient; 13 import android.webkit.WebChromeClient;
12 14
13 import org.chromium.android_webview.AwContents; 15 import org.chromium.android_webview.AwContents;
14 import org.chromium.android_webview.AwContents.VisualStateCallback; 16 import org.chromium.android_webview.AwContents.VisualStateCallback;
15 import org.chromium.android_webview.test.util.CommonResources; 17 import org.chromium.android_webview.test.util.CommonResources;
16 import org.chromium.android_webview.test.util.GraphicsTestUtils; 18 import org.chromium.android_webview.test.util.GraphicsTestUtils;
17 import org.chromium.android_webview.test.util.JavascriptEventObserver; 19 import org.chromium.android_webview.test.util.JavascriptEventObserver;
18 import org.chromium.base.test.util.Feature; 20 import org.chromium.base.test.util.Feature;
21 import org.chromium.base.test.util.MinAndroidSdkLevel;
19 import org.chromium.content.browser.ContentViewCore; 22 import org.chromium.content.browser.ContentViewCore;
20 import org.chromium.content.browser.test.util.CallbackHelper; 23 import org.chromium.content.browser.test.util.CallbackHelper;
21 import org.chromium.content.browser.test.util.DOMUtils; 24 import org.chromium.content.browser.test.util.DOMUtils;
22 import org.chromium.content_public.browser.LoadUrlParams; 25 import org.chromium.content_public.browser.LoadUrlParams;
23 26
24 import java.util.concurrent.CountDownLatch; 27 import java.util.concurrent.CountDownLatch;
25 import java.util.concurrent.TimeUnit; 28 import java.util.concurrent.TimeUnit;
26 import java.util.concurrent.atomic.AtomicReference; 29 import java.util.concurrent.atomic.AtomicReference;
27 30
28 /** 31 /**
29 * Visual state related tests. 32 * Visual state related tests.
30 */ 33 */
34 @MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT)
31 public class VisualStateTest extends AwTestBase { 35 public class VisualStateTest extends AwTestBase {
32 36
33 private static final String WAIT_FOR_JS_TEST_URL = 37 private static final String WAIT_FOR_JS_TEST_URL =
34 "file:///android_asset/visual_state_waits_for_js_test.html"; 38 "file:///android_asset/visual_state_waits_for_js_test.html";
35 private static final String FULLSCREEN_TEST_URL = 39 private static final String FULLSCREEN_TEST_URL =
36 "file:///android_asset/visual_state_during_fullscreen_test.html"; 40 "file:///android_asset/visual_state_during_fullscreen_test.html";
37 private static final String UPDATE_COLOR_CONTROL_ID = "updateColorControl"; 41 private static final String UPDATE_COLOR_CONTROL_ID = "updateColorControl";
38 private static final String ENTER_FULLSCREEN_CONTROL_ID = "enterFullscreenCo ntrol"; 42 private static final String ENTER_FULLSCREEN_CONTROL_ID = "enterFullscreenCo ntrol";
39 43
40 private TestAwContentsClient mContentsClient = new TestAwContentsClient(); 44 private TestAwContentsClient mContentsClient = new TestAwContentsClient();
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 318
315 loadUrlSync(awContents, awContentsClient.getOnPageFinishedHelper(), FULL SCREEN_TEST_URL); 319 loadUrlSync(awContents, awContentsClient.getOnPageFinishedHelper(), FULL SCREEN_TEST_URL);
316 320
317 assertTrue(readyToEnterFullscreenSignal.await( 321 assertTrue(readyToEnterFullscreenSignal.await(
318 AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS)); 322 AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
319 DOMUtils.clickNode(VisualStateTest.this, contentViewCore, ENTER_FULLSCRE EN_CONTROL_ID); 323 DOMUtils.clickNode(VisualStateTest.this, contentViewCore, ENTER_FULLSCRE EN_CONTROL_ID);
320 324
321 assertTrue(testFinishedSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit .MILLISECONDS)); 325 assertTrue(testFinishedSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit .MILLISECONDS));
322 } 326 }
323 327
328 @Feature({"AndroidWebView"})
329 @SmallTest
330 public void testVisualStateCallbackWhenContainerViewDetached()
331 throws Throwable {
332 final CountDownLatch readyToEnterFullscreenSignal = new CountDownLatch(1 );
333 final CountDownLatch hasCustomViewSignal = new CountDownLatch(1);
334 final CountDownLatch testFinishedSignal = new CountDownLatch(1);
335
336 final AtomicReference<AwContents> awContentsRef = new AtomicReference<>( );
hush (inactive) 2015/03/04 18:39:08 Why not "AtomicReference<AwContents>" on the right
boliu 2015/03/04 19:16:43 http://docs.oracle.com/javase/7/docs/technotes/gui
hush (inactive) 2015/03/04 19:39:54 Okay.
337 final AtomicReference<View> customViewRef = new AtomicReference<>();
338
339 final TestAwContentsClient awContentsClient = new TestAwContentsClient() {
340 @Override
341 public void onPageFinished(String url) {
342 super.onPageFinished(url);
343 readyToEnterFullscreenSignal.countDown();
344 }
345
346 @Override
347 public void onShowCustomView(
348 final View customView, WebChromeClient.CustomViewCallback ca llback) {
349 // Please note that we don't attach the custom view to the windo w here
350 // (awContentsClient is an instance of TestAwContentsClient, not
351 // FullScreenVideoTestAwContentsClient).
352 customView.setClipBounds(new Rect(0, 0, 100, 100));
353 customView.measure(100, 100);
354 customView.layout(0, 0, 100, 100);
355 customViewRef.set(customView);
356 hasCustomViewSignal.countDown();
357 }
358 };
359 final AwTestContainerView testView = createAwTestContainerViewOnMainSync (awContentsClient);
360 final AwContents awContents = testView.getAwContents();
361 awContentsRef.set(awContents);
362 final ContentViewCore contentViewCore = testView.getContentViewCore();
363 enableJavaScriptOnUiThread(awContents);
364 awContents.getSettings().setFullscreenSupported(true);
365
366 // JS will notify this observer once it has entered fullscreen.
367 final JavascriptEventObserver jsObserver = new JavascriptEventObserver() ;
368 runTestOnUiThread(new Runnable() {
369 @Override
370 public void run() {
371 jsObserver.register(contentViewCore, "jsObserver");
372 }
373 });
374
375 loadUrlSync(awContents, awContentsClient.getOnPageFinishedHelper(), FULL SCREEN_TEST_URL);
376
377 assertTrue(readyToEnterFullscreenSignal.await(
378 AwTestBase.WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
379 DOMUtils.clickNode(VisualStateTest.this, contentViewCore, ENTER_FULLSCRE EN_CONTROL_ID);
380
381 assertTrue(hasCustomViewSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUni t.MILLISECONDS));
382 assertTrue(jsObserver.waitForEvent(WAIT_TIMEOUT_MS));
383
384 runTestOnUiThread(new Runnable() {
385 @Override
386 public void run() {
387 awContents.insertVisualStateCallback(20, new VisualStateCallback () {
388 @Override
389 public void onComplete(long id) {
390 assertFalse(customViewRef.get().isAttachedToWindow());
391 // NOTE: We cannot use drawAwContents here because the w eb contents
392 // are rendered into the custom view while in fullscreen .
393 Bitmap redScreenshot = GraphicsTestUtils.drawView(
394 customViewRef.get(), 100, 100);
395 assertEquals(Color.RED, redScreenshot.getPixel(50, 50));
396 testFinishedSignal.countDown();
397 }
398 });
399 }
400 });
401
402 assertTrue(testFinishedSignal.await(AwTestBase.WAIT_TIMEOUT_MS, TimeUnit .MILLISECONDS));
403 }
404
324 private static final LoadUrlParams createTestPageUrl(String backgroundColor) { 405 private static final LoadUrlParams createTestPageUrl(String backgroundColor) {
325 return LoadUrlParams.createLoadDataParams( 406 return LoadUrlParams.createLoadDataParams(
326 "<html><body bgcolor=" + backgroundColor + "></body></html>", "t ext/html", false); 407 "<html><body bgcolor=" + backgroundColor + "></body></html>", "t ext/html", false);
327 } 408 }
328 } 409 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698