GestureDetectorResetTest.java revision 0529e5d033099cbfc42635f6f6183833b09dff6e
147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Copyright 2012 The Chromium Authors. All rights reserved. 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Use of this source code is governed by a BSD-style license that can be 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// found in the LICENSE file. 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgpackage org.chromium.content.browser; 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport junit.framework.Assert; 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.base.test.util.DisabledTest; 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.base.test.util.UrlUtils; 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.content.browser.test.util.Criteria; 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.content.browser.test.util.CriteriaHelper; 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.content.browser.test.util.DOMUtils; 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.content.browser.test.util.TestCallbackHelperContainer; 17a127c9555d5bc8d9404562840ebfd5281c670600henrike@webrtc.orgimport org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper; 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport org.chromium.content_shell_apk.ContentShellTestBase; 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgimport java.util.concurrent.TimeUnit; 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgpublic class GestureDetectorResetTest extends ContentShellTestBase { 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final long WAIT_TIMEOUT_SECONDS = scaleTimeout(2); 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static final String CLICK_TEST_URL = UrlUtils.encodeHtmlDataUri( 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "<html><body>" + 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "<button id=\"button\" " + 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org " onclick=\"document.getElementById('test').textContent = 'clicked';\">" + 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "Button" + 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "</button><br/>" + 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "<div id=\"test\">not clicked</div><br/>" + 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org "</body></html>"); 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private static class NodeContentsIsEqualToCriteria implements Criteria { 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private final ContentViewCore mViewCore; 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private final String mNodeId; 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private final String mExpectedContents; 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public NodeContentsIsEqualToCriteria( 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ContentViewCore viewCore, 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org String nodeId, String expectedContents) { 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org mViewCore = viewCore; 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org mNodeId = nodeId; 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org mExpectedContents = expectedContents; 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org assert mExpectedContents != null; 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org @Override 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public boolean isSatisfied() { 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org try { 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org String contents = DOMUtils.getNodeContents(mViewCore, mNodeId); 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return mExpectedContents.equals(contents); 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } catch (Throwable e) { 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org Assert.fail("Failed to retrieve node contents: " + e); 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return false; 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public GestureDetectorResetTest() { 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private void verifyClicksAreRegistered( 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org String disambiguation, 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org ContentViewCore contentViewCore) 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org throws InterruptedException, Exception, Throwable { 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Initially the text on the page should say "not clicked". 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org assertTrue("The page contents is invalid " + disambiguation, 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org CriteriaHelper.pollForCriteria(new NodeContentsIsEqualToCriteria( 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org contentViewCore, "test", "not clicked"))); 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Click the button. 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DOMUtils.clickNode(this, contentViewCore, "button"); 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // After the click, the text on the page should say "clicked". 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org assertTrue("The page contents didn't change after a click " + disambiguation, 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org CriteriaHelper.pollForCriteria(new NodeContentsIsEqualToCriteria( 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org contentViewCore, "test", "clicked"))); 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org /** 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Tests that showing a select popup and having the page reload while the popup is showing does 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * not assert. 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * @LargeTest 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * @Feature({"Browser"}) 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * BUG 172967 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org @DisabledTest 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public void testSeparateClicksAreRegisteredOnReload() 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org throws InterruptedException, Exception, Throwable { 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Load the test page. 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org launchContentShellWithUrl(CLICK_TEST_URL); 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading()); 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org final ContentViewCore viewCore = getContentViewCore(); 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org final TestCallbackHelperContainer viewClient = 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org new TestCallbackHelperContainer(viewCore); 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org final OnPageFinishedHelper onPageFinishedHelper = 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org viewClient.getOnPageFinishedHelper(); 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Test that the button click works. 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org verifyClicksAreRegistered("on initial load", viewCore); 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Reload the test page. 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org int currentCallCount = onPageFinishedHelper.getCallCount(); 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org getInstrumentation().runOnMainSync(new Runnable() { 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org @Override 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public void run() { 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org getActivity().getActiveShell().loadUrl(CLICK_TEST_URL); 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }); 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org onPageFinishedHelper.waitForCallback(currentCallCount, 1, 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Test that the button click still works. 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org verifyClicksAreRegistered("after reload", viewCore); 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Directly navigate to the test page. 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org currentCallCount = onPageFinishedHelper.getCallCount(); 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org getInstrumentation().runOnMainSync(new Runnable() { 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org @Override 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public void run() { 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org getActivity().getActiveShell().getContentViewCore().loadUrl( 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org new LoadUrlParams(CLICK_TEST_URL)); 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org }); 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org onPageFinishedHelper.waitForCallback(currentCallCount, 1, 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13060b0bb686eaec50337df5a6253eb9bc57882189akjellander@webrtc.org // Test that the button click still works. 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org verifyClicksAreRegistered("after direct navigation", viewCore); 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org