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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java

Issue 2290133002: Make WebView keep keyboard when losing focus (Closed)
Patch Set: Only for Test. Use CallbackHelper, but still flaky. Created 4 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 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.chrome.browser; 5 package org.chromium.chrome.browser;
6 6
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE; 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE;
8 8
9 import android.content.DialogInterface; 9 import android.content.DialogInterface;
10 import android.content.pm.ActivityInfo; 10 import android.content.pm.ActivityInfo;
11 import android.os.Debug; 11 import android.os.Debug;
12 import android.os.Environment; 12 import android.os.Environment;
13 import android.os.IBinder;
14 import android.os.ResultReceiver;
13 import android.os.SystemClock; 15 import android.os.SystemClock;
14 import android.test.suitebuilder.annotation.LargeTest; 16 import android.test.suitebuilder.annotation.LargeTest;
15 import android.test.suitebuilder.annotation.MediumTest; 17 import android.test.suitebuilder.annotation.MediumTest;
16 import android.test.suitebuilder.annotation.SmallTest; 18 import android.test.suitebuilder.annotation.SmallTest;
17 import android.test.suitebuilder.annotation.Smoke; 19 import android.test.suitebuilder.annotation.Smoke;
18 import android.util.DisplayMetrics; 20 import android.util.DisplayMetrics;
19 import android.util.Log; 21 import android.util.Log;
20 import android.view.View; 22 import android.view.View;
21 23
22 import org.chromium.base.ThreadUtils; 24 import org.chromium.base.ThreadUtils;
(...skipping 30 matching lines...) Expand all
53 import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy; 55 import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy;
54 import org.chromium.chrome.browser.toolbar.ToolbarPhone; 56 import org.chromium.chrome.browser.toolbar.ToolbarPhone;
55 import org.chromium.chrome.test.ChromeTabbedActivityTestBase; 57 import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
56 import org.chromium.chrome.test.util.ApplicationTestUtils; 58 import org.chromium.chrome.test.util.ApplicationTestUtils;
57 import org.chromium.chrome.test.util.ChromeRestriction; 59 import org.chromium.chrome.test.util.ChromeRestriction;
58 import org.chromium.chrome.test.util.ChromeTabUtils; 60 import org.chromium.chrome.test.util.ChromeTabUtils;
59 import org.chromium.chrome.test.util.MenuUtils; 61 import org.chromium.chrome.test.util.MenuUtils;
60 import org.chromium.chrome.test.util.NewTabPageTestUtils; 62 import org.chromium.chrome.test.util.NewTabPageTestUtils;
61 import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher; 63 import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher;
62 import org.chromium.content.browser.ContentViewCore; 64 import org.chromium.content.browser.ContentViewCore;
65 import org.chromium.content.browser.input.ImeAdapter;
66 import org.chromium.content.browser.input.InputMethodManagerWrapper;
63 import org.chromium.content.browser.test.util.CallbackHelper; 67 import org.chromium.content.browser.test.util.CallbackHelper;
64 import org.chromium.content.browser.test.util.Criteria; 68 import org.chromium.content.browser.test.util.Criteria;
65 import org.chromium.content.browser.test.util.CriteriaHelper; 69 import org.chromium.content.browser.test.util.CriteriaHelper;
70 import org.chromium.content.browser.test.util.DOMUtils;
66 import org.chromium.content.browser.test.util.JavaScriptUtils; 71 import org.chromium.content.browser.test.util.JavaScriptUtils;
67 import org.chromium.content.browser.test.util.UiUtils; 72 import org.chromium.content.browser.test.util.UiUtils;
68 import org.chromium.content.common.ContentSwitches; 73 import org.chromium.content.common.ContentSwitches;
69 import org.chromium.content_public.browser.WebContents; 74 import org.chromium.content_public.browser.WebContents;
70 import org.chromium.content_public.browser.WebContentsObserver; 75 import org.chromium.content_public.browser.WebContentsObserver;
71 import org.chromium.net.test.EmbeddedTestServer; 76 import org.chromium.net.test.EmbeddedTestServer;
72 77
73 import java.io.File; 78 import java.io.File;
74 import java.util.Locale; 79 import java.util.Locale;
75 import java.util.concurrent.Callable; 80 import java.util.concurrent.Callable;
(...skipping 12 matching lines...) Expand all
88 private static final String TEST_PAGE_FILE_PATH = "/chrome/test/data/google/ google.html"; 93 private static final String TEST_PAGE_FILE_PATH = "/chrome/test/data/google/ google.html";
89 94
90 private EmbeddedTestServer mTestServer; 95 private EmbeddedTestServer mTestServer;
91 96
92 private float mPxToDp = 1.0f; 97 private float mPxToDp = 1.0f;
93 private float mTabsViewHeightDp; 98 private float mTabsViewHeightDp;
94 private float mTabsViewWidthDp; 99 private float mTabsViewWidthDp;
95 100
96 private boolean mNotifyChangedCalled; 101 private boolean mNotifyChangedCalled;
97 102
103 public boolean mKeyboardShown = false;
104
98 private static final int SWIPE_TO_RIGHT_DIRECTION = 1; 105 private static final int SWIPE_TO_RIGHT_DIRECTION = 1;
99 private static final int SWIPE_TO_LEFT_DIRECTION = -1; 106 private static final int SWIPE_TO_LEFT_DIRECTION = -1;
100 107
101 private static final long WAIT_RESIZE_TIMEOUT_MS = 3000; 108 private static final long WAIT_RESIZE_TIMEOUT_MS = 3000;
102 109
103 private static final int STRESSFUL_TAB_COUNT = 100; 110 private static final int STRESSFUL_TAB_COUNT = 100;
104 111
105 private static final String INITIAL_SIZE_TEST_URL = UrlUtils.encodeHtmlDataU ri( 112 private static final String INITIAL_SIZE_TEST_URL = UrlUtils.encodeHtmlDataU ri(
106 "<html><head><meta name=\"viewport\" content=\"width=device-width\"> " 113 "<html><head><meta name=\"viewport\" content=\"width=device-width\"> "
107 + "<script>" 114 + "<script>"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 228
222 /** 229 /**
223 * Verify New Tab Open and Close Event not from the context menu. 230 * Verify New Tab Open and Close Event not from the context menu.
224 * @throws InterruptedException 231 * @throws InterruptedException
225 * 232 *
226 * https://crbug.com/490473 233 * https://crbug.com/490473
227 * @LargeTest 234 * @LargeTest
228 * @Feature({"Android-TabSwitcher"}) 235 * @Feature({"Android-TabSwitcher"})
229 * @Restriction(RESTRICTION_TYPE_PHONE) 236 * @Restriction(RESTRICTION_TYPE_PHONE)
230 */ 237 */
231 @DisabledTest 238 // @DisabledTest
239 @LargeTest
232 public void testOpenAndCloseNewTabButton() throws InterruptedException { 240 public void testOpenAndCloseNewTabButton() throws InterruptedException {
233 mTestServer = EmbeddedTestServer.createAndStartFileServer( 241 mTestServer = EmbeddedTestServer.createAndStartFileServer(
234 getInstrumentation().getContext(), Environment.getExternalStorag eDirectory()); 242 getInstrumentation().getContext(), Environment.getExternalStorag eDirectory());
235 startMainActivityWithURL(mTestServer.getURL(TEST_FILE_PATH)); 243 startMainActivityWithURL(mTestServer.getURL(TEST_FILE_PATH));
236 getInstrumentation().runOnMainSync(new Runnable() { 244 getInstrumentation().runOnMainSync(new Runnable() {
237 @Override 245 @Override
238 public void run() { 246 public void run() {
239 String title = getActivity().getCurrentTabModel().getTabAt(0).ge tTitle(); 247 String title = getActivity().getCurrentTabModel().getTabAt(0).ge tTitle();
240 assertEquals("Data file for TabsTest", title); 248 assertEquals("Data file for TabsTest", title);
241 } 249 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 282
275 ChromeTabUtils.closeCurrentTab(getInstrumentation(), getActivity()); 283 ChromeTabUtils.closeCurrentTab(getInstrumentation(), getActivity());
276 getInstrumentation().runOnMainSync(new Runnable() { 284 getInstrumentation().runOnMainSync(new Runnable() {
277 @Override 285 @Override
278 public void run() { 286 public void run() {
279 assertEquals(tabCount, getActivity().getCurrentTabModel().getCou nt()); 287 assertEquals(tabCount, getActivity().getCurrentTabModel().getCou nt());
280 } 288 }
281 }); 289 });
282 } 290 }
283 291
292 private void setInputMethodManagerWrapperForTest(final CallbackHelper callba ckHelper) {
293 ImeAdapter imeAdapter =
Changwan Ryu 2016/10/12 12:15:49 So the flakiness we talked about was caused becaus
Changwan Ryu 2016/10/12 12:19:45 How about listening to TabModelObserver#didSelectT
yabinh 2016/10/13 03:13:45 Actually we use "onViewDetachedFromWindow()" inste
294 getActivity().getActivityTab().getContentViewCore().getImeAdapte rForTest();
295 imeAdapter.setInputMethodManagerWrapperForTest(
296 new InputMethodManagerWrapper(getInstrumentation().getContext()) {
297 @Override
298 public void showSoftInput(View view, int flags, ResultReceiv er resultReceiver) {
299 super.showSoftInput(view, flags, resultReceiver);
300 mKeyboardShown = true;
301 callbackHelper.notifyCalled();
302 }
303
304 @Override
305 public boolean hideSoftInputFromWindow(
306 IBinder windowToken, int flags, ResultReceiver resul tReceiver) {
307 super.hideSoftInputFromWindow(windowToken, flags, result Receiver);
308 mKeyboardShown = false;
309 callbackHelper.notifyCalled();
310 return true;
311 }
312 });
313 }
314 /**
315 * Verify that opening a new tab, switching to an existing tab and closing c urrent tab hide
316 * keyboard.
317 */
318 @LargeTest
319 public void testHideKeyboard() throws Exception {
320 mTestServer = EmbeddedTestServer.createAndStartFileServer(
321 getInstrumentation().getContext(), Environment.getExternalStorag eDirectory());
322
323 // Failed 100% at this step. It didn't happen before. Also, I tried
324 // testOpenAndCloseNewTabButton(), it's flaky at this step, but failure rate is not 100%.
325 startMainActivityWithURL(mTestServer.getURL(TEST_FILE_PATH));
326
327 final CallbackHelper callbackHelper = new CallbackHelper();
328 int curCallCount = callbackHelper.getCallCount();
329 setInputMethodManagerWrapperForTest(callbackHelper);
330
331 DOMUtils.clickNode(this, getActivity().getActivityTab().getContentViewCo re(), "input_text");
332 callbackHelper.waitForCallback(curCallCount, 1);
333 assertTrue(mKeyboardShown);
334
335 // Opens a new tab.
336 curCallCount = callbackHelper.getCallCount();
337 startMainActivityWithURL(mTestServer.getURL(TEST_FILE_PATH));
338 callbackHelper.waitForCallback(curCallCount, 1); // Flaky at this step.
339 assertFalse(mKeyboardShown);
340
341 // TODO: closes a tab, switches to an existing tab.
342 }
343
284 /** 344 /**
285 * Verify that opening a new tab and navigating immediately sets a size on t he newly created 345 * Verify that opening a new tab and navigating immediately sets a size on t he newly created
286 * renderer. https://crbug.com/434477. 346 * renderer. https://crbug.com/434477.
287 * @throws InterruptedException 347 * @throws InterruptedException
288 * @throws TimeoutException 348 * @throws TimeoutException
289 */ 349 */
290 @SmallTest 350 @SmallTest
291 @RetryOnFailure 351 @RetryOnFailure
292 public void testNewTabSetsContentViewSize() throws InterruptedException, Tim eoutException { 352 public void testNewTabSetsContentViewSize() throws InterruptedException, Tim eoutException {
293 ChromeTabUtils.newTabFromMenu(getInstrumentation(), getActivity()); 353 ChromeTabUtils.newTabFromMenu(getInstrumentation(), getActivity());
(...skipping 1433 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 throws InterruptedException { 1787 throws InterruptedException {
1728 CriteriaHelper.pollInstrumentationThread( 1788 CriteriaHelper.pollInstrumentationThread(
1729 Criteria.equals(expected, new Callable<Boolean>() { 1789 Criteria.equals(expected, new Callable<Boolean>() {
1730 @Override 1790 @Override
1731 public Boolean call() { 1791 public Boolean call() {
1732 return fileToCheck.exists(); 1792 return fileToCheck.exists();
1733 } 1793 }
1734 })); 1794 }));
1735 } 1795 }
1736 } 1796 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698