SelectPopupTest.java revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)package org.chromium.content.browser.input; 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import android.test.suitebuilder.annotation.LargeTest; 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.base.test.util.Feature; 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.base.test.util.UrlUtils; 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.ContentView; 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.ContentViewCore; 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.test.util.Criteria; 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.test.util.CriteriaHelper; 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.test.util.DOMUtils; 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer; 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import org.chromium.content_shell_apk.ContentShellTestBase; 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import java.util.concurrent.TimeUnit; 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public class SelectPopupTest extends ContentShellTestBase { 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private static final long WAIT_TIMEOUT_SECONDS = scaleTimeout(2); 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private static final String SELECT_URL = UrlUtils.encodeHtmlDataUri( 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<html><head><meta name=\"viewport\"" + 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" /></head>" + 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<body>Which animal is the strongest:<br/>" + 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<select id=\"select\">" + 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<option>Black bear</option>" + 32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) "<option>Polar bear</option>" + 33e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) "<option>Grizzly</option>" + 34e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) "<option>Tiger</option>" + 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<option>Lion</option>" + 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) "<option>Gorilla</option>" + 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "<option>Chipmunk</option>" + 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "</select>" + 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "</body></html>"); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) private class PopupShowingCriteria implements Criteria { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @Override 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public boolean isSatisfied() { 44d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ContentViewCore contentViewCore 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) = getActivity().getActiveContentView().getContentViewCore(); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return contentViewCore.getSelectPopupForTest() != null; 4776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) } 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private class PopupHiddenCriteria implements Criteria { 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @Override 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public boolean isSatisfied() { 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ContentViewCore contentViewCore 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) = getActivity().getActiveContentView().getContentViewCore(); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return contentViewCore.getSelectPopupForTest() == null; 56d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) @Override 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public void setUp() throws Exception { 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) super.setUp(); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) launchContentShellWithUrl(SELECT_URL); 63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading()); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TODO(aurimas) remove this wait once crbug.com/179511 is fixed. 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) assertWaitForPageScaleFactorMatch(1); 66 } 67 68 /** 69 * Tests that showing a select popup and having the page reload while the popup is showing does 70 * not assert. 71 */ 72 @LargeTest 73 @Feature({"Browser"}) 74 public void testReloadWhilePopupShowing() throws InterruptedException, Exception, Throwable { 75 // The popup should be hidden before the click. 76 assertTrue("The select popup is shown after load.", 77 CriteriaHelper.pollForCriteria(new PopupHiddenCriteria())); 78 79 final ContentView view = getActivity().getActiveContentView(); 80 final TestCallbackHelperContainer viewClient = 81 new TestCallbackHelperContainer(view); 82 final OnPageFinishedHelper onPageFinishedHelper = 83 viewClient.getOnPageFinishedHelper(); 84 85 // Once clicked, the popup should show up. 86 DOMUtils.clickNode(this, view, "select"); 87 assertTrue("The select popup did not show up on click.", 88 CriteriaHelper.pollForCriteria(new PopupShowingCriteria())); 89 90 // Reload the test page. 91 int currentCallCount = onPageFinishedHelper.getCallCount(); 92 getInstrumentation().runOnMainSync(new Runnable() { 93 @Override 94 public void run() { 95 // Now reload the page while the popup is showing, it gets hidden. 96 getActivity().getActiveShell().loadUrl(SELECT_URL); 97 } 98 }); 99 onPageFinishedHelper.waitForCallback(currentCallCount, 1, 100 WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); 101 102 // The popup should be hidden after the page reload. 103 assertTrue("The select popup did not hide after reload.", 104 CriteriaHelper.pollForCriteria(new PopupHiddenCriteria())); 105 106 // Click the select and wait for the popup to show. 107 DOMUtils.clickNode(this, view, "select"); 108 assertTrue("The select popup did not show on click after reload.", 109 CriteriaHelper.pollForCriteria(new PopupShowingCriteria())); 110 } 111} 112