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

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java

Issue 2766393004: Convert most of the rest of instrumentation tests in content (Closed)
Patch Set: Keep @CommenLineFlags Created 3 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.content.pm.ActivityInfo; 7 import android.content.pm.ActivityInfo;
8 import android.graphics.Rect; 8 import android.graphics.Rect;
9 import android.support.test.InstrumentationRegistry;
9 import android.support.test.filters.MediumTest; 10 import android.support.test.filters.MediumTest;
10 11
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Rule;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17
18 import org.chromium.base.test.BaseJUnit4ClassRunner;
11 import org.chromium.base.test.util.CommandLineFlags; 19 import org.chromium.base.test.util.CommandLineFlags;
12 import org.chromium.base.test.util.Feature; 20 import org.chromium.base.test.util.Feature;
13 import org.chromium.content.browser.test.util.Criteria; 21 import org.chromium.content.browser.test.util.Criteria;
14 import org.chromium.content.browser.test.util.CriteriaHelper; 22 import org.chromium.content.browser.test.util.CriteriaHelper;
15 import org.chromium.content.browser.test.util.DOMUtils; 23 import org.chromium.content.browser.test.util.DOMUtils;
16 import org.chromium.content.browser.test.util.JavaScriptUtils; 24 import org.chromium.content.browser.test.util.JavaScriptUtils;
17 import org.chromium.content.browser.test.util.UiUtils; 25 import org.chromium.content.browser.test.util.UiUtils;
18 import org.chromium.content.common.ContentSwitches; 26 import org.chromium.content.common.ContentSwitches;
19 import org.chromium.content_shell_apk.ContentShellTestBase; 27 import org.chromium.content_shell_apk.ContentShellActivityTestRule;
20 import org.chromium.ui.base.DeviceFormFactor; 28 import org.chromium.ui.base.DeviceFormFactor;
21 29
22 import java.util.concurrent.Callable; 30 import java.util.concurrent.Callable;
23 import java.util.concurrent.TimeoutException; 31 import java.util.concurrent.TimeoutException;
24 32
25 /** 33 /**
26 * Integration tests for the feature that auto locks the orientation when a vide o goes fullscreen. 34 * Integration tests for the feature that auto locks the orientation when a vide o goes fullscreen.
27 * See also chrome layer org.chromium.chrome.browser.VideoFullscreenOrientationL ockChromeTest 35 * See also chrome layer org.chromium.chrome.browser.VideoFullscreenOrientationL ockChromeTest
28 */ 36 */
29 @CommandLineFlags.Add({ "enable-features=VideoFullscreenOrientationLock", 37 @RunWith(BaseJUnit4ClassRunner.class)
30 ContentSwitches.DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PL AYBACK }) 38 @CommandLineFlags.Add({"enable-features=VideoFullscreenOrientationLock",
31 public class VideoFullscreenOrientationLockTest extends ContentShellTestBase { 39 ContentSwitches.DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK})
40 public class VideoFullscreenOrientationLockTest {
41 @Rule
42 public ContentShellActivityTestRule mActivityTestRule = new ContentShellActi vityTestRule();
43
32 private static final String TEST_URL = "content/test/data/media/video-player .html"; 44 private static final String TEST_URL = "content/test/data/media/video-player .html";
33 private static final String VIDEO_ID = "video"; 45 private static final String VIDEO_ID = "video";
34 46
35 private void waitForContentsFullscreenState(boolean fullscreenValue) 47 private void waitForContentsFullscreenState(boolean fullscreenValue) {
36 throws InterruptedException {
37 CriteriaHelper.pollInstrumentationThread( 48 CriteriaHelper.pollInstrumentationThread(
38 Criteria.equals(fullscreenValue, new Callable<Boolean>() { 49 Criteria.equals(fullscreenValue, new Callable<Boolean>() {
39 @Override 50 @Override
40 public Boolean call() throws InterruptedException, TimeoutEx ception { 51 public Boolean call() throws InterruptedException, TimeoutEx ception {
41 return DOMUtils.isFullscreen(getWebContents()); 52 return DOMUtils.isFullscreen(mActivityTestRule.getWebCon tents());
42 } 53 }
43 }) 54 })
44 ); 55 );
45 } 56 }
46 57
47 private boolean isScreenOrientationLocked() { 58 private boolean isScreenOrientationLocked() {
48 return getActivity().getRequestedOrientation() 59 return mActivityTestRule.getActivity().getRequestedOrientation()
49 != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 60 != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
50 } 61 }
51 62
52 private boolean isScreenOrientationLandscape() throws InterruptedException, TimeoutException { 63 private boolean isScreenOrientationLandscape() throws InterruptedException, TimeoutException {
53 StringBuilder sb = new StringBuilder(); 64 StringBuilder sb = new StringBuilder();
54 sb.append("(function() {"); 65 sb.append("(function() {");
55 sb.append(" return screen.orientation.type.startsWith('landscape');"); 66 sb.append(" return screen.orientation.type.startsWith('landscape');");
56 sb.append("})();"); 67 sb.append("})();");
57 68
58 return JavaScriptUtils.executeJavaScriptAndWaitForResult(getWebContents( ), sb.toString()) 69 return JavaScriptUtils
70 .executeJavaScriptAndWaitForResult(
71 mActivityTestRule.getWebContents(), sb.toString())
59 .equals("true"); 72 .equals("true");
60 } 73 }
61 74
62 private void waitUntilLockedToLandscape() throws InterruptedException { 75 private void waitUntilLockedToLandscape() throws InterruptedException {
63 CriteriaHelper.pollInstrumentationThread(new Criteria() { 76 CriteriaHelper.pollInstrumentationThread(new Criteria() {
64 @Override 77 @Override
65 public boolean isSatisfied() { 78 public boolean isSatisfied() {
66 try { 79 try {
67 return isScreenOrientationLocked() && isScreenOrientationLan dscape(); 80 return isScreenOrientationLocked() && isScreenOrientationLan dscape();
68 } catch (InterruptedException e) { 81 } catch (InterruptedException e) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 113 }
101 114
102 private Rect fullscreenButtonBounds(Rect videoRect) { 115 private Rect fullscreenButtonBounds(Rect videoRect) {
103 Rect bar = controlBarBounds(videoRect); 116 Rect bar = controlBarBounds(videoRect);
104 int right = bar.right - BUTTON_RIGHT_MARGIN; 117 int right = bar.right - BUTTON_RIGHT_MARGIN;
105 int left = right - BUTTON_WIDTH; 118 int left = right - BUTTON_WIDTH;
106 return new Rect(left, bar.top, right, bar.bottom); 119 return new Rect(left, bar.top, right, bar.bottom);
107 } 120 }
108 121
109 private boolean clickFullscreenButton() throws InterruptedException, Timeout Exception { 122 private boolean clickFullscreenButton() throws InterruptedException, Timeout Exception {
110 return DOMUtils.clickRect(getContentViewCore(), 123 return DOMUtils.clickRect(mActivityTestRule.getContentViewCore(),
111 fullscreenButtonBounds(DOMUtils.getNodeBounds(getWebContents(), VIDEO_ID))); 124 fullscreenButtonBounds(
125 DOMUtils.getNodeBounds(mActivityTestRule.getWebContents( ), VIDEO_ID)));
112 } 126 }
113 127
114 @Override 128 @Before
115 public void setUp() throws Exception { 129 public void setUp() throws Exception {
116 super.setUp(); 130 mActivityTestRule.launchContentShellWithUrlSync(TEST_URL);
117
118 startActivityWithTestUrl(TEST_URL);
119 } 131 }
120 132
133 @Test
121 @MediumTest 134 @MediumTest
122 @Feature({"VideoFullscreenOrientationLock"}) 135 @Feature({"VideoFullscreenOrientationLock"})
123 public void testEnterExitFullscreenWithControlsButton() throws Exception { 136 public void testEnterExitFullscreenWithControlsButton() throws Exception {
124 if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return ; 137 if (DeviceFormFactor.isTablet(InstrumentationRegistry.getInstrumentation ().getContext())) {
138 return;
139 }
125 140
126 // Start playback to guarantee it's properly loaded. 141 // Start playback to guarantee it's properly loaded.
127 assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); 142 Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContent s(), VIDEO_ID));
128 DOMUtils.playMedia(getWebContents(), VIDEO_ID); 143 DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID);
129 DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); 144 DOMUtils.waitForMediaPlay(mActivityTestRule.getWebContents(), VIDEO_ID);
130 145
131 // Simulate click on fullscreen button. 146 // Simulate click on fullscreen button.
132 assertTrue(clickFullscreenButton()); 147 Assert.assertTrue(clickFullscreenButton());
133 waitForContentsFullscreenState(true); 148 waitForContentsFullscreenState(true);
134 149
135 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise. 150 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise.
136 waitUntilLockedToLandscape(); 151 waitUntilLockedToLandscape();
137 152
138 // Because of the fullscreen animation, the click on the exit fullscreen button will fail 153 // Because of the fullscreen animation, the click on the exit fullscreen button will fail
139 // roughly 10% of the time. Settling down the UI reduces the flake to 0% . 154 // roughly 10% of the time. Settling down the UI reduces the flake to 0% .
140 UiUtils.settleDownUI(getInstrumentation()); 155 UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
141 156
142 // Leave fullscreen by clicking back on the button. 157 // Leave fullscreen by clicking back on the button.
143 assertTrue(clickFullscreenButton()); 158 Assert.assertTrue(clickFullscreenButton());
144 waitForContentsFullscreenState(false); 159 waitForContentsFullscreenState(false);
145 waitUntilUnlocked(); 160 waitUntilUnlocked();
146 } 161 }
147 162
163 @Test
148 @MediumTest 164 @MediumTest
149 @Feature({"VideoFullscreenOrientationLock"}) 165 @Feature({"VideoFullscreenOrientationLock"})
150 public void testEnterExitFullscreenWithAPI() throws Exception { 166 public void testEnterExitFullscreenWithAPI() throws Exception {
151 if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return ; 167 if (DeviceFormFactor.isTablet(InstrumentationRegistry.getInstrumentation ().getContext())) {
168 return;
169 }
152 170
153 // Start playback to guarantee it's properly loaded. 171 // Start playback to guarantee it's properly loaded.
154 assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); 172 Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContent s(), VIDEO_ID));
155 DOMUtils.playMedia(getWebContents(), VIDEO_ID); 173 DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID);
156 DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); 174 DOMUtils.waitForMediaPlay(mActivityTestRule.getWebContents(), VIDEO_ID);
157 175
158 // Trigger requestFullscreen() via a click on a button. 176 // Trigger requestFullscreen() via a click on a button.
159 assertTrue(DOMUtils.clickNode(getContentViewCore(), "fullscreen")); 177 Assert.assertTrue(DOMUtils.clickNode(mActivityTestRule.getContentViewCor e(), "fullscreen"));
160 waitForContentsFullscreenState(true); 178 waitForContentsFullscreenState(true);
161 179
162 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise. 180 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise.
163 waitUntilLockedToLandscape(); 181 waitUntilLockedToLandscape();
164 182
165 // Leave fullscreen from API. 183 // Leave fullscreen from API.
166 DOMUtils.exitFullscreen(getWebContents()); 184 DOMUtils.exitFullscreen(mActivityTestRule.getWebContents());
167 waitForContentsFullscreenState(false); 185 waitForContentsFullscreenState(false);
168 waitUntilUnlocked(); 186 waitUntilUnlocked();
169 } 187 }
170 188
189 @Test
171 @MediumTest 190 @MediumTest
172 @Feature({"VideoFullscreenOrientationLock"}) 191 @Feature({"VideoFullscreenOrientationLock"})
173 public void testExitFullscreenByRemovingVideo() throws Exception { 192 public void testExitFullscreenByRemovingVideo() throws Exception {
174 if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return ; 193 if (DeviceFormFactor.isTablet(InstrumentationRegistry.getInstrumentation ().getContext())) {
194 return;
195 }
175 196
176 // Start playback to guarantee it's properly loaded. 197 // Start playback to guarantee it's properly loaded.
177 assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); 198 Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContent s(), VIDEO_ID));
178 DOMUtils.playMedia(getWebContents(), VIDEO_ID); 199 DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID);
179 DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); 200 DOMUtils.waitForMediaPlay(mActivityTestRule.getWebContents(), VIDEO_ID);
180 201
181 // Trigger requestFullscreen() via a click on a button. 202 // Trigger requestFullscreen() via a click on a button.
182 assertTrue(DOMUtils.clickNode(getContentViewCore(), "fullscreen")); 203 Assert.assertTrue(DOMUtils.clickNode(mActivityTestRule.getContentViewCor e(), "fullscreen"));
183 waitForContentsFullscreenState(true); 204 waitForContentsFullscreenState(true);
184 205
185 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise. 206 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise.
186 waitUntilLockedToLandscape(); 207 waitUntilLockedToLandscape();
187 208
188 // Leave fullscreen by removing video element from page. 209 // Leave fullscreen by removing video element from page.
189 JavaScriptUtils.executeJavaScriptAndWaitForResult( 210 JavaScriptUtils.executeJavaScriptAndWaitForResult(
190 getWebContents(), "document.body.innerHTML = '';"); 211 mActivityTestRule.getWebContents(), "document.body.innerHTML = ' ';");
191 waitForContentsFullscreenState(false); 212 waitForContentsFullscreenState(false);
192 waitUntilUnlocked(); 213 waitUntilUnlocked();
193 } 214 }
194 215
216 @Test
195 @MediumTest 217 @MediumTest
196 @Feature({"VideoFullscreenOrientationLock"}) 218 @Feature({"VideoFullscreenOrientationLock"})
197 public void testExitFullscreenWithNavigation() throws Exception { 219 public void testExitFullscreenWithNavigation() throws Exception {
198 if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return ; 220 if (DeviceFormFactor.isTablet(InstrumentationRegistry.getInstrumentation ().getContext())) {
221 return;
222 }
199 223
200 // Start playback to guarantee it's properly loaded. 224 // Start playback to guarantee it's properly loaded.
201 assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); 225 Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContent s(), VIDEO_ID));
202 DOMUtils.playMedia(getWebContents(), VIDEO_ID); 226 DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID);
203 DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); 227 DOMUtils.waitForMediaPlay(mActivityTestRule.getWebContents(), VIDEO_ID);
204 228
205 // Trigger requestFullscreen() via a click on a button. 229 // Trigger requestFullscreen() via a click on a button.
206 assertTrue(DOMUtils.clickNode(getContentViewCore(), "fullscreen")); 230 Assert.assertTrue(DOMUtils.clickNode(mActivityTestRule.getContentViewCor e(), "fullscreen"));
207 waitForContentsFullscreenState(true); 231 waitForContentsFullscreenState(true);
208 232
209 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise. 233 // Should be locked to landscape now, `waitUntilLockedToLandscape` will throw otherwise.
210 waitUntilLockedToLandscape(); 234 waitUntilLockedToLandscape();
211 235
212 // Leave fullscreen by navigating page. 236 // Leave fullscreen by navigating page.
213 JavaScriptUtils.executeJavaScriptAndWaitForResult(getWebContents(), "loc ation.reload();"); 237 JavaScriptUtils.executeJavaScriptAndWaitForResult(
238 mActivityTestRule.getWebContents(), "location.reload();");
214 waitForContentsFullscreenState(false); 239 waitForContentsFullscreenState(false);
215 waitUntilUnlocked(); 240 waitUntilUnlocked();
216 } 241 }
217 } 242 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698