| Index: chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java
|
| index 404003f9a88fa722dacd7f9e40b24e3023279590..5ee3b0a62e417c0609b06c5b83505ddfa4e19c71 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java
|
| @@ -4,19 +4,29 @@
|
|
|
| package org.chromium.chrome.browser.download;
|
|
|
| +import android.os.Environment;
|
| import android.test.FlakyTest;
|
| import android.test.suitebuilder.annotation.MediumTest;
|
| import android.view.View;
|
|
|
| +import org.chromium.base.test.util.CommandLineFlags;
|
| import org.chromium.base.test.util.Feature;
|
| import org.chromium.chrome.R;
|
| +import org.chromium.chrome.browser.ChromeSwitches;
|
| +import org.chromium.chrome.browser.compositor.CompositorViewHolder;
|
| +import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
|
| +import org.chromium.chrome.browser.compositor.layouts.StaticLayout;
|
| import org.chromium.chrome.browser.infobar.InfoBar;
|
| +import org.chromium.chrome.browser.tabmodel.TabModel;
|
| +import org.chromium.chrome.browser.tabmodel.TabModelUtils;
|
| 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 org.chromium.content.browser.test.util.TouchCommon;
|
|
|
| +import java.io.File;
|
| +
|
| /**
|
| * Tests Chrome download feature by attempting to download some files.
|
| */
|
| @@ -242,6 +252,96 @@ public class DownloadTest extends DownloadTestBase {
|
| assertTrue("Missing third download", hasDownload("superbo (2).txt", SUPERBO_CONTENTS));
|
| }
|
|
|
| + private void goToLastTab() throws Exception {
|
| + final TabModel model = getActivity().getCurrentTabModel();
|
| + final int count = model.getCount();
|
| +
|
| + getInstrumentation().runOnMainSync(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + TabModelUtils.setIndex(model, count - 1);
|
| + }
|
| + });
|
| +
|
| + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return getActivity().getActivityTab() == model.getTabAt(count - 1)
|
| + && getActivity().getActivityTab().isReady();
|
| + }
|
| + }));
|
| + }
|
| +
|
| + private void waitForNewTabToStabilize(final int numTabsAfterNewTab)
|
| + throws InterruptedException {
|
| + // Wait until we have a new tab first. This should be called before checking the active
|
| + // layout because the active layout changes StaticLayout --> SimpleAnimationLayout
|
| + // --> (tab added) --> StaticLayout.
|
| + assertTrue("Actual tab count: " + getActivity().getCurrentTabModel().getCount(),
|
| + CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return getActivity().getCurrentTabModel().getCount() >= numTabsAfterNewTab;
|
| + }
|
| + }));
|
| +
|
| + // Now wait until the new tab animation finishes. Something wonky happens
|
| + // if we try to go to the new tab before this.
|
| + assertTrue(CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + CompositorViewHolder compositorViewHolder =
|
| + (CompositorViewHolder) getActivity().findViewById(
|
| + R.id.compositor_view_holder);
|
| + LayoutManager layoutManager = compositorViewHolder.getLayoutManager();
|
| +
|
| + return layoutManager.getActiveLayout() instanceof StaticLayout;
|
| + }
|
| + }));
|
| + }
|
| +
|
| + /*
|
| + Bug http://crbug/481758
|
| + */
|
| + @CommandLineFlags.Add(ChromeSwitches.DISABLE_DOCUMENT_MODE)
|
| + @MediumTest
|
| + @Feature({"Downloads"})
|
| + public void testDuplicateHttpPostDownload_OpenNewTabAndReplace() throws Exception {
|
| + final String url =
|
| + TestHttpServerClient.getUrl("chrome/test/data/android/download/get.html");
|
| +
|
| + // Create the file in advance so that duplicate download infobar can show up.
|
| + File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
| + assertTrue(dir.isDirectory());
|
| + final File file = new File(dir, "test.gzip");
|
| + if (!file.exists()) {
|
| + assertTrue(file.createNewFile());
|
| + }
|
| +
|
| + // Open in a new tab again.
|
| + loadUrl(url);
|
| + waitForFocus();
|
| +
|
| + View currentView = getActivity().getActivityTab().getView();
|
| + TouchCommon.longPressView(
|
| + currentView, currentView.getWidth() / 2, currentView.getHeight() / 2);
|
| + getInstrumentation().invokeContextMenuAction(
|
| + getActivity(), R.id.contextmenu_open_in_new_tab, 0);
|
| + waitForNewTabToStabilize(2);
|
| +
|
| + goToLastTab();
|
| + assertPollForInfoBarSize(1);
|
| +
|
| + // Now create two new files by clicking on the infobars.
|
| + assertTrue("OVERWRITE button wasn't found",
|
| + InfoBarUtil.clickPrimaryButton(getInfoBars().get(0)));
|
| +
|
| + // Try to wait for download to finish. This will fail if there is no external Internet
|
| + // connection. Android's DownloadManager will abort download request when there is
|
| + // no Internet connection, even though we are connecting to a local host.
|
| + waitForGetDownloadToFinish();
|
| + }
|
| +
|
| /*
|
| @MediumTest
|
| @Feature({"Downloads"})
|
|
|