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

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

Powered by Google App Engine
This is Rietveld 408576698