| Index: chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest2.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest2.java b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest2.java
|
| deleted file mode 100644
|
| index d9481bcde3ba30cf68db2ab7129ccdbf861a3025..0000000000000000000000000000000000000000
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest2.java
|
| +++ /dev/null
|
| @@ -1,432 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.chrome.browser.infobar;
|
| -
|
| -import android.graphics.Rect;
|
| -import android.graphics.Region;
|
| -import android.test.FlakyTest;
|
| -import android.test.suitebuilder.annotation.MediumTest;
|
| -import android.view.ViewGroup;
|
| -import android.view.ViewTreeObserver;
|
| -
|
| -import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.test.util.Feature;
|
| -import org.chromium.chrome.browser.ChromeActivity;
|
| -import org.chromium.chrome.browser.preferences.NetworkPredictionOptions;
|
| -import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
| -import org.chromium.chrome.browser.tab.Tab;
|
| -import org.chromium.chrome.test.ChromeActivityTestCaseBase;
|
| -import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
|
| -import org.chromium.chrome.test.util.InfoBarUtil;
|
| -import org.chromium.chrome.test.util.TestHttpServerClient;
|
| -import org.chromium.content.browser.test.util.Criteria;
|
| -import org.chromium.content.browser.test.util.CriteriaHelper;
|
| -
|
| -import java.util.List;
|
| -import java.util.concurrent.Callable;
|
| -import java.util.concurrent.ExecutionException;
|
| -import java.util.concurrent.TimeoutException;
|
| -import java.util.concurrent.atomic.AtomicInteger;
|
| -
|
| -/**
|
| - * Tests for InfoBars.
|
| - *
|
| - * TODO(newt): rename this to InfoBarContainerTest.
|
| - */
|
| -public class InfoBarTest2 extends ChromeActivityTestCaseBase<ChromeActivity> {
|
| - static class MutableBoolean {
|
| - public boolean mValue = false;
|
| - }
|
| -
|
| - private InfoBarTestAnimationListener mListener;
|
| -
|
| - public InfoBarTest2() {
|
| - super(ChromeActivity.class);
|
| - }
|
| -
|
| - @Override
|
| - protected void setUp() throws Exception {
|
| - super.setUp();
|
| -
|
| - // Register for animation notifications
|
| - InfoBarContainer container =
|
| - getActivity().getActivityTab().getInfoBarContainer();
|
| - mListener = new InfoBarTestAnimationListener();
|
| - container.setAnimationListener(mListener);
|
| - }
|
| -
|
| - // Adds an infobar to the currrent tab. Blocks until the infobar has been added.
|
| - protected void addInfoBarToCurrentTab(final InfoBar infoBar) throws InterruptedException {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar);
|
| - }
|
| - });
|
| - assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
|
| - getInstrumentation().waitForIdleSync();
|
| - }
|
| -
|
| - // Removes an infobar from the currrent tab. Blocks until the infobar has been removed.
|
| - protected void removeInfoBarFromCurrentTab(final InfoBar infoBar) throws InterruptedException {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().removeInfoBar(infoBar);
|
| - }
|
| - });
|
| - assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
|
| - getInstrumentation().waitForIdleSync();
|
| - }
|
| -
|
| - // Dismisses the passed infobar. Blocks until the bar has been removed.
|
| - protected void dismissInfoBar(final InfoBar infoBar) throws InterruptedException {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - infoBar.dismissJavaOnlyInfoBar();
|
| - }
|
| - });
|
| - assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
|
| - getInstrumentation().waitForIdleSync();
|
| - }
|
| -
|
| - /**
|
| - * Verifies that infobars added from Java expire or not as expected.
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testInfoBarExpiration() throws InterruptedException {
|
| - // First add an infobar that expires.
|
| - final MutableBoolean dismissed = new MutableBoolean();
|
| - MessageInfoBar expiringInfoBar = new MessageInfoBar("Hello!");
|
| - expiringInfoBar.setDismissedListener(new InfoBarListeners.Dismiss() {
|
| - @Override
|
| - public void onInfoBarDismissed(InfoBar infoBar) {
|
| - dismissed.mValue = true;
|
| - }
|
| - });
|
| - expiringInfoBar.setExpireOnNavigation(true);
|
| - addInfoBarToCurrentTab(expiringInfoBar);
|
| -
|
| - // Verify it's really there.
|
| - List<InfoBar> infoBars = getInfoBars();
|
| - assertEquals(1, infoBars.size());
|
| - assertSame(expiringInfoBar, infoBars.get(0));
|
| -
|
| - // Now navigate, it should expire.
|
| - loadUrl(TestHttpServerClient.getUrl("chrome/test/data/android/google.html"));
|
| - assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
|
| - assertTrue("InfoBar did not expire on navigation.", dismissed.mValue);
|
| - assertTrue(getInfoBars().isEmpty());
|
| -
|
| - // Now test a non-expiring infobar.
|
| - MessageInfoBar persistentInfoBar = new MessageInfoBar("Hello!");
|
| - persistentInfoBar.setDismissedListener(new InfoBarListeners.Dismiss() {
|
| - @Override
|
| - public void onInfoBarDismissed(InfoBar infoBar) {
|
| - dismissed.mValue = true;
|
| - }
|
| - });
|
| - dismissed.mValue = false;
|
| - persistentInfoBar.setExpireOnNavigation(false);
|
| - addInfoBarToCurrentTab(persistentInfoBar);
|
| -
|
| - // Navigate, it should still be there.
|
| - loadUrl(TestHttpServerClient.getUrl("chrome/test/data/android/google.html"));
|
| - assertFalse("InfoBar did expire on navigation.", dismissed.mValue);
|
| - infoBars = getInfoBars();
|
| - assertEquals(1, infoBars.size());
|
| - assertSame(persistentInfoBar, infoBars.get(0));
|
| -
|
| - // Close the infobar.
|
| - dismissInfoBar(persistentInfoBar);
|
| - }
|
| -
|
| - // Define function to pass parameter to Runnable to be used in testInfoBarExpirationNoPrerender.
|
| - private Runnable setNetworkPredictionOptions(
|
| - final NetworkPredictionOptions networkPredictionOptions) {
|
| - return new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - PrefServiceBridge.getInstance().setNetworkPredictionOptions(
|
| - networkPredictionOptions);
|
| - }
|
| - };
|
| - }
|
| -
|
| - /**
|
| - * Same as testInfoBarExpiration but with prerender turned-off.
|
| - * The behavior when prerender is on/off is different as in the prerender case the infobars are
|
| - * added when we swap tabs.
|
| - * @throws InterruptedException
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testInfoBarExpirationNoPrerender() throws InterruptedException, ExecutionException {
|
| - // Save prediction preference.
|
| - NetworkPredictionOptions networkPredictionOption =
|
| - ThreadUtils.runOnUiThreadBlocking(new Callable<NetworkPredictionOptions>() {
|
| - @Override
|
| - public NetworkPredictionOptions call() {
|
| - return PrefServiceBridge.getInstance().getNetworkPredictionOptions();
|
| - }
|
| - });
|
| - try {
|
| - ThreadUtils.runOnUiThreadBlocking(setNetworkPredictionOptions(
|
| - NetworkPredictionOptions.NETWORK_PREDICTION_NEVER));
|
| - testInfoBarExpiration();
|
| - } finally {
|
| - // Make sure we restore prediction preference.
|
| - ThreadUtils.runOnUiThreadBlocking(setNetworkPredictionOptions(networkPredictionOption));
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Tests that adding and then immediately removing an infobar works as expected (and does not
|
| - * assert).
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testQuickAddOneAndRemove() throws InterruptedException {
|
| - final InfoBar infoBar = new MessageInfoBar("Hello");
|
| - addInfoBarToCurrentTab(infoBar);
|
| - removeInfoBarFromCurrentTab(infoBar);
|
| - assertTrue(getInfoBars().isEmpty());
|
| - }
|
| -
|
| - /**
|
| - * Tests that adding and then immediately dismissing an infobar works as expected (and does not
|
| - * assert).
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testQuickAddOneAndDismiss() throws InterruptedException {
|
| - final InfoBar infoBar = new MessageInfoBar("Hello");
|
| - addInfoBarToCurrentTab(infoBar);
|
| - dismissInfoBar(infoBar);
|
| - assertTrue(getInfoBars().isEmpty());
|
| - }
|
| -
|
| - /**
|
| - * Tests that adding 2 infobars and then immediately removing the last one works as expected.
|
| - * This scenario is special as the 2nd infobar does not even get added to the view hierarchy.
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testAddTwoAndRemoveOneQuick() throws InterruptedException {
|
| - final InfoBar infoBar1 = new MessageInfoBar("One");
|
| - final InfoBar infoBar2 = new MessageInfoBar("Two");
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar1);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar2);
|
| - tab.getInfoBarContainer().removeInfoBar(infoBar2);
|
| - }
|
| - });
|
| -
|
| - // We should get an infobar added event for the first infobar.
|
| - assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
|
| -
|
| - // But no infobar removed event as the 2nd infobar was removed before it got added.
|
| - assertFalse("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
|
| - List<InfoBar> infoBars = getInfoBars();
|
| - assertEquals(1, infoBars.size());
|
| - assertSame(infoBar1, infoBars.get(0));
|
| - }
|
| -
|
| - /**
|
| - * Tests that adding 2 infobars and then immediately dismissing the last one works as expected
|
| - * This scenario is special as the 2nd infobar does not even get added to the view hierarchy.
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testAddTwoAndDismissOneQuick() throws InterruptedException {
|
| - final InfoBar infoBar1 = new MessageInfoBar("One");
|
| - final InfoBar infoBar2 = new MessageInfoBar("Two");
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar1);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar2);
|
| - infoBar2.dismissJavaOnlyInfoBar();
|
| - }
|
| - });
|
| -
|
| - // We should get an infobar added event for the first infobar.
|
| - assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
|
| -
|
| - // But no infobar removed event as the 2nd infobar was removed before it got added.
|
| - assertFalse("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
|
| - List<InfoBar> infoBars = getInfoBars();
|
| - assertEquals(1, infoBars.size());
|
| - assertSame(infoBar1, infoBars.get(0));
|
| - }
|
| -
|
| - /**
|
| - * Tests that we don't assert when a tab is getting closed while an infobar is being shown and
|
| - * had been removed.
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testCloseTabOnAdd() throws InterruptedException {
|
| - loadUrl(TestHttpServerClient.getUrl(
|
| - "chrome/test/data/android/google.html"));
|
| -
|
| - final InfoBar infoBar = new MessageInfoBar("Hello");
|
| - addInfoBarToCurrentTab(infoBar);
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().removeInfoBar(infoBar);
|
| - getActivity().getTabModelSelector().closeTab(tab);
|
| - }
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Tests that the x button in the infobar does close the infobar and that the event is not
|
| - * propagated to the ContentView.
|
| - * @MediumTest
|
| - * @Feature({"Browser"})
|
| - * Bug: http://crbug.com/172427
|
| - */
|
| - @FlakyTest
|
| - public void testCloseButton() throws InterruptedException, TimeoutException {
|
| - loadUrl(TestHttpServerClient.getUrl(
|
| - "chrome/test/data/android/click_listener.html"));
|
| - final InfoBar infoBar = new MessageInfoBar("Hello");
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - Tab tab = getActivity().getActivityTab();
|
| - assertTrue("Failed to find tab.", tab != null);
|
| - tab.getInfoBarContainer().addInfoBar(infoBar);
|
| - }
|
| - });
|
| - assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
|
| -
|
| - // Now press the close button.
|
| - assertTrue("Close button wasn't found", InfoBarUtil.clickCloseButton(infoBar));
|
| - assertTrue("Infobar not removed.", mListener.removeInfoBarAnimationFinished());
|
| -
|
| - // The page should not have received the click.
|
| - assertTrue("The page recieved the click.",
|
| - !Boolean.parseBoolean(runJavaScriptCodeInCurrentTab("wasClicked")));
|
| - }
|
| -
|
| - /**
|
| - * Tests that adding and removing correctly manages the transparent region, which allows for
|
| - * optimizations in SurfaceFlinger (less overlays).
|
| - */
|
| - @MediumTest
|
| - @Feature({"Browser"})
|
| - public void testAddAndDismissSurfaceFlingerOverlays() throws InterruptedException {
|
| - final ViewGroup decorView = (ViewGroup) getActivity().getWindow().getDecorView();
|
| - final InfoBarContainer infoBarContainer =
|
| - getActivity().getActivityTab().getInfoBarContainer();
|
| -
|
| - // Detect layouts. Note this doesn't actually need to be atomic (just final).
|
| - final AtomicInteger layoutCount = new AtomicInteger();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - decorView.getViewTreeObserver().addOnGlobalLayoutListener(
|
| - new ViewTreeObserver.OnGlobalLayoutListener() {
|
| - @Override
|
| - public void onGlobalLayout() {
|
| - layoutCount.incrementAndGet();
|
| - }
|
| - });
|
| - }
|
| - });
|
| -
|
| - // First add an infobar.
|
| - final InfoBar infoBar = new MessageInfoBar("Hello");
|
| - addInfoBarToCurrentTab(infoBar);
|
| -
|
| - // A layout must occur to recalculate the transparent region.
|
| - CriteriaHelper.pollForUIThreadCriteria(
|
| - new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - return layoutCount.get() > 0;
|
| - }
|
| - });
|
| -
|
| - final Rect fullDisplayFrame = new Rect();
|
| - final Rect fullDisplayFrameMinusContainer = new Rect();
|
| - final Rect containerDisplayFrame = new Rect();
|
| -
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - decorView.getWindowVisibleDisplayFrame(fullDisplayFrame);
|
| - decorView.getWindowVisibleDisplayFrame(fullDisplayFrameMinusContainer);
|
| - fullDisplayFrameMinusContainer.bottom -= infoBarContainer.getHeight();
|
| - int windowLocation[] = new int[2];
|
| - infoBarContainer.getLocationInWindow(windowLocation);
|
| - containerDisplayFrame.set(
|
| - windowLocation[0],
|
| - windowLocation[1],
|
| - windowLocation[0] + infoBarContainer.getWidth(),
|
| - windowLocation[1] + infoBarContainer.getHeight());
|
| -
|
| - // The InfoBarContainer subtracts itself from the transparent region.
|
| - Region transparentRegion = new Region(fullDisplayFrame);
|
| - infoBarContainer.gatherTransparentRegion(transparentRegion);
|
| - assertEquals(transparentRegion.getBounds(), fullDisplayFrameMinusContainer);
|
| - }
|
| - });
|
| -
|
| - // Now remove the infobar.
|
| - layoutCount.set(0);
|
| - dismissInfoBar(infoBar);
|
| -
|
| - // A layout must occur to recalculate the transparent region.
|
| - CriteriaHelper.pollForUIThreadCriteria(
|
| - new Criteria() {
|
| - @Override
|
| - public boolean isSatisfied() {
|
| - return layoutCount.get() > 0;
|
| - }
|
| - });
|
| -
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - // The InfoBarContainer should no longer be subtracted from the transparent region.
|
| - // We really want assertTrue(transparentRegion.contains(containerDisplayFrame)),
|
| - // but region doesn't have 'contains(Rect)', so we invert the test. So, the old
|
| - // container rect can't touch the bounding rect of the non-transparent region).
|
| - Region transparentRegion = new Region();
|
| - decorView.gatherTransparentRegion(transparentRegion);
|
| - Region opaqueRegion = new Region(fullDisplayFrame);
|
| - opaqueRegion.op(transparentRegion, Region.Op.DIFFERENCE);
|
| - assertFalse(opaqueRegion.getBounds().intersect(containerDisplayFrame));
|
| - }
|
| - });
|
| -
|
| - // Additional manual test that this is working:
|
| - // - adb shell dumpsys SurfaceFlinger
|
| - // - Observe that Clank's overlay size changes (or disappears if URLbar is also gone).
|
| - }
|
| -
|
| - @Override
|
| - public void startMainActivity() throws InterruptedException {
|
| - startMainActivityOnBlankPage();
|
| - }
|
| -}
|
|
|