| Index: chrome/android/javatests/src/org/chromium/chrome/browser/tab/UndoIntegrationTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/UndoIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/UndoIntegrationTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5c40c490892faa366eba349f3d73bf200c61b999
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/UndoIntegrationTest.java
|
| @@ -0,0 +1,91 @@
|
| +// 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.tab;
|
| +
|
| +import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE;
|
| +
|
| +import android.test.suitebuilder.annotation.LargeTest;
|
| +
|
| +import org.chromium.base.CommandLine;
|
| +import org.chromium.base.ThreadUtils;
|
| +import org.chromium.base.test.util.Restriction;
|
| +import org.chromium.base.test.util.UrlUtils;
|
| +import org.chromium.chrome.browser.ChromeSwitches;
|
| +import org.chromium.chrome.browser.Tab;
|
| +import org.chromium.chrome.browser.snackbar.SnackbarManager;
|
| +import org.chromium.chrome.browser.tabmodel.TabModel;
|
| +import org.chromium.chrome.browser.tabmodel.TabModelUtils;
|
| +import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +import org.chromium.content.browser.test.util.DOMUtils;
|
| +
|
| +import java.util.concurrent.TimeoutException;
|
| +
|
| +/**
|
| + * Tests undo and it's interactions with the UI.
|
| + */
|
| +public class UndoIntegrationTest extends ChromeTabbedActivityTestBase {
|
| + private static final String WINDOW_OPEN_BUTTON_URL = UrlUtils.encodeHtmlDataUri(
|
| + "<html>"
|
| + + " <head>"
|
| + + " <script>"
|
| + + " function openWindow() {"
|
| + + " window.open('about:blank');"
|
| + + " }"
|
| + + " </script>"
|
| + + " </head>"
|
| + + " <body>"
|
| + + " <a id=\"link\" onclick=\"setTimeout(openWindow, 500);\">Open</a>"
|
| + + " </body>"
|
| + + "</html>"
|
| + );
|
| +
|
| + @Override
|
| + public void startMainActivity() throws InterruptedException {
|
| + CommandLine.getInstance().appendSwitch(ChromeSwitches.ENABLE_HIGH_END_UI_UNDO);
|
| + SnackbarManager.setTimeoutForTesting(1500);
|
| + startMainActivityOnBlankPage();
|
| + }
|
| +
|
| + /**
|
| + * Test that a tab that is closing can't open other windows.
|
| + * @throws InterruptedException
|
| + * @throws TimeoutException
|
| + */
|
| + @LargeTest
|
| + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
|
| + public void testAddNewContentsFromClosingTab() throws InterruptedException, TimeoutException {
|
| + loadUrl(WINDOW_OPEN_BUTTON_URL);
|
| +
|
| + final TabModel model = getActivity().getTabModelSelector().getCurrentModel();
|
| + final Tab tab = TabModelUtils.getCurrentTab(model);
|
| +
|
| + // Clock on the link that will trigger a delayed window popup.
|
| + DOMUtils.clickNode(this, tab.getContentViewCore(), "link");
|
| +
|
| + // Attempt to close the tab, which will delay closing until the undo timeout goes away.
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + TabModelUtils.closeTabById(model, tab.getId(), true);
|
| + assertTrue("Tab was not marked as closing", tab.isClosing());
|
| + assertTrue("Tab is not actually closing", model.isClosurePending(tab.getId()));
|
| + }
|
| + });
|
| +
|
| + // Give the model a chance to process the undo and close the tab.
|
| + CriteriaHelper.pollForUIThreadCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return !model.isClosurePending(tab.getId()) && model.getCount() == 0;
|
| + }
|
| + });
|
| +
|
| + // Validate that the model doesn't contain the original tab or any newly opened tabs.
|
| + assertFalse("Model is still waiting to close the tab", model.isClosurePending(tab.getId()));
|
| + assertEquals("Model still has tabs", 0, model.getCount());
|
| + }
|
| +}
|
|
|