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