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

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

Issue 667143002: [aw] Software mode tests for fullscreen API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fixPowerBlockerNonMedia
Patch Set: Created 6 years, 2 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/AwContentsClientFullScreenTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
index 840fbaa99eef92ba47d8e9086718aa6e188aa869..b03a0588209859e6054760fac0a69c640654cf21 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenTest.java
@@ -10,6 +10,7 @@ import android.view.ViewGroup;
import org.chromium.android_webview.test.util.JavascriptEventObserver;
import org.chromium.base.test.util.Feature;
+import org.chromium.content.browser.ContentVideoView;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -57,6 +58,32 @@ public class AwContentsClientFullScreenTest extends AwTestBase {
@MediumTest
@Feature({"AndroidWebView"})
+ @DisableHardwareAccelerationForTest
+ public void testFullscreenVideoInSoftwareModeDoesNotDeadlock() throws Throwable {
+ // Although fullscreen video is not supported without hardware acceleration
+ // we should not deadlock if apps try to use it.
+ loadTestPageAndClickFullscreen(VIDEO_TEST_URL);
+ mContentsClient.waitForCustomViewShown();
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mContentsClient.getExitCallback().onCustomViewHidden();
+ }
+ });
+ mContentsClient.waitForCustomViewHidden();
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
+ @DisableHardwareAccelerationForTest
+ public void testFullscreenForNonVideoElementIsSupportedInSoftwareMode() throws Throwable {
+ // Fullscreen for non-video elements is supported and works as expected. Note that
+ // this test is the same as testOnShowAndHideCustomViewWithCallback_videoInsideDiv below.
+ doTestOnShowAndHideCustomViewWithCallback(VIDEO_INSIDE_DIV_TEST_URL);
+ }
+
+ @MediumTest
+ @Feature({"AndroidWebView"})
public void testOnShowAndHideCustomViewWithCallback_video() throws Throwable {
doTestOnShowAndHideCustomViewWithCallback(VIDEO_TEST_URL);
}
@@ -295,6 +322,47 @@ public class AwContentsClientFullScreenTest extends AwTestBase {
return view.getKeepScreenOn();
}
+ private void assertContainsContentVideoView()
+ throws InterruptedException {
+ // We need to poll because the ContentVideoView is added to the customView asynchronously
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return containsVideoView(mContentsClient.getCustomView());
boliu 2014/10/22 02:01:02 Need to do this on the UI thread.
Ignacio Solla 2014/10/22 09:32:16 Why? I'm happy to change it but I'd like to unders
boliu 2014/10/22 15:53:45 Because AwContents/ContentViewCore, and the entire
Ignacio Solla 2014/10/27 11:42:06 OK done. (I was thinking that read-only operation
+ }
+ }));
+ }
+
+ private void assertIsFullscreen() throws InterruptedException {
+ // We need to poll because the Javascript state is updated asynchronously
+ assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ try {
+ return DOMUtils.isFullscreen(mContentViewCore.getWebContents());
boliu 2014/10/22 02:01:02 I didn't find this DOMUtils method?! I assume it n
Ignacio Solla 2014/10/22 09:32:16 To avoid conflicts, I have set the diffbase of thi
boliu 2014/10/22 15:53:45 Ok. isFullscreen itself looks thread safe. mConten
Ignacio Solla 2014/10/27 11:42:06 Ok, I'm calling mContentViewCore.getWebContents()
boliu 2014/10/27 16:49:44 Why? I don't see it just glancing at the code. Thr
Ignacio Solla 2014/10/27 16:59:52 See: https://code.google.com/p/chromium/codesearch
+ } catch (InterruptedException | TimeoutException e) {
+ fail(e.getMessage());
+ return false;
+ }
+ }
+ }));
+ }
+
+ private boolean containsVideoView(View view) {
boliu 2014/10/22 02:01:02 nit: move this next to assertContainsContentVideoV
Ignacio Solla 2014/10/22 09:32:16 Done.
+ if (view instanceof ContentVideoView) {
+ return true;
+ }
+ if (view instanceof ViewGroup) {
+ ViewGroup viewGroup = (ViewGroup) view;
+ for (int i = 0; i < viewGroup.getChildCount(); i++) {
+ if (containsVideoView(viewGroup.getChildAt(i))) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private JavascriptEventObserver registerObserver(final String observerName) {
final JavascriptEventObserver observer = new JavascriptEventObserver();
getInstrumentation().runOnMainSync(new Runnable() {
@@ -316,7 +384,12 @@ public class AwContentsClientFullScreenTest extends AwTestBase {
private void doOnShowCustomViewTest(String videoTestUrl) throws Exception {
loadTestPageAndClickFullscreen(videoTestUrl);
mContentsClient.waitForCustomViewShown();
- assertTrue(DOMUtils.isFullscreen(mContentViewCore.getWebContents()));
+ assertIsFullscreen();
+ if (videoTestUrl.equals(VIDEO_TEST_URL)) {
+ // We only create a ContentVideoView (ie. a hardware accelerated surface) when going
+ // fullscreen on a video element.
+ assertContainsContentVideoView();
+ }
}
private void loadTestPageAndClickFullscreen(String videoTestUrl) throws Exception {

Powered by Google App Engine
This is Rietveld 408576698