Commit b0c89cfb authored by bsheedy's avatar bsheedy Committed by Commit Bot

Add VR Incognito tests

Adds automated versions of VR manual tests involving Incognito tabs.

Bug: 861925
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:linux_vr;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I197b2940755ec92d648c35fb77a1f213e2b402f5
Reviewed-on: https://chromium-review.googlesource.com/1134508Reviewed-by: default avatarAmirhossein Simjour <asimjour@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578335}
parent 67d21d10
...@@ -10,6 +10,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_M ...@@ -10,6 +10,7 @@ import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_LONG_M
import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS; import static org.chromium.chrome.browser.vr.XrTestFramework.POLL_TIMEOUT_SHORT_MS;
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM;
import android.graphics.PointF;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
...@@ -26,15 +27,19 @@ import org.chromium.chrome.browser.ChromeSwitches; ...@@ -26,15 +27,19 @@ import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.history.HistoryItemView; import org.chromium.chrome.browser.history.HistoryItemView;
import org.chromium.chrome.browser.history.HistoryPage; import org.chromium.chrome.browser.history.HistoryPage;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.vr.rules.ChromeTabbedActivityVrTestRule; import org.chromium.chrome.browser.vr.rules.ChromeTabbedActivityVrTestRule;
import org.chromium.chrome.browser.vr.util.NativeUiUtils;
import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils; import org.chromium.chrome.browser.vr.util.VrBrowserTransitionUtils;
import org.chromium.chrome.browser.vr.util.VrInfoBarUtils; import org.chromium.chrome.browser.vr.util.VrInfoBarUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.NewTabPageTestUtils;
import org.chromium.content.browser.test.util.ClickUtils; import org.chromium.content.browser.test.util.ClickUtils;
import org.chromium.content.browser.test.util.CriteriaHelper;
import org.chromium.content.browser.test.util.DOMUtils; import org.chromium.content.browser.test.util.DOMUtils;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
...@@ -536,4 +541,90 @@ public class VrBrowserNavigationTest { ...@@ -536,4 +541,90 @@ public class VrBrowserNavigationTest {
assertState(mVrBrowserTestFramework.getFirstTabWebContents(), Page.PAGE_2D, assertState(mVrBrowserTestFramework.getFirstTabWebContents(), Page.PAGE_2D,
PresentationMode.NON_PRESENTING, FullscreenMode.NON_FULLSCREENED); PresentationMode.NON_PRESENTING, FullscreenMode.NON_FULLSCREENED);
} }
/**
* Tests that Incognito and non-Incognito modes maintain separate history stacks. Automation of
* a manual test in https://crbug.com/861925.
*/
@Test
@MediumTest
public void testIncognitoMaintainsSeparateHistoryStack()
throws InterruptedException, TimeoutException {
// Test non-Incognito's forward/back.
mTestRule.loadUrl(TEST_PAGE_2D_URL);
mTestRule.loadUrl(TEST_PAGE_2D_2_URL);
VrBrowserTransitionUtils.navigateBack();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_2D_URL);
VrBrowserTransitionUtils.navigateForward();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_2D_2_URL);
// Open up an Incognito tab.
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.OVERFLOW_MENU, new PointF());
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.NEW_INCOGNITO_TAB, new PointF());
NewTabPageTestUtils.waitForNtpLoaded(mTestRule.getActivity().getActivityTab());
// Test Incognito's forward/back.
mTestRule.loadUrl(TEST_PAGE_WEBVR_URL);
mTestRule.loadUrl(TEST_PAGE_WEBXR_URL);
VrBrowserTransitionUtils.navigateBack();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_WEBVR_URL);
VrBrowserTransitionUtils.navigateForward();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_WEBXR_URL);
// Exit Incognito.
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.OVERFLOW_MENU, new PointF());
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.CLOSE_INCOGNITO_TABS, new PointF());
CriteriaHelper.pollUiThread(() -> {
return mTestRule.getWebContents().getVisibleUrl().equals(TEST_PAGE_2D_2_URL);
}, "Did not successfully exit Incognito mode");
// Ensure that non-Incognito's forward/back was unaffected by Incognito.
VrBrowserTransitionUtils.navigateBack();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_2D_URL);
VrBrowserTransitionUtils.navigateForward();
ChromeTabUtils.waitForTabPageLoaded(
mTestRule.getActivity().getActivityTab(), TEST_PAGE_2D_2_URL);
}
/**
* Tests that closing all Incognito tabs with no non-Incognito tabs open automatically opens
* a new non-Incognito tab. Automation of a manual test in https://crbug.com/861925.
*/
@Test
@MediumTest
public void testNewTabAutomaticallyOpenedWhenIncognitoClosed()
throws InterruptedException, TimeoutException {
VrBrowserTransitionUtils.forceExitVr();
ThreadUtils.runOnUiThreadBlocking(() -> {
// Close the tab that's automatically open at test start.
mTestRule.getActivity().getActivityTab().getTabModelSelector().closeAllTabs();
// Create an Incognito tab. Closing all tabs automatically goes to overview mode, but
// appears to take some amount of time to do so. Instead of waiting until then and
// creating through the menu item, just create an Incognito tab directly.
mTestRule.getActivity().getTabCreator(true /* incognito */).launchNTP();
});
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
// Close the Incognito tab and ensure a non-Incognito NTP is opened.
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.OVERFLOW_MENU, new PointF());
NativeUiUtils.clickElementAndWaitForUiQuiescence(
UserFriendlyElementName.CLOSE_INCOGNITO_TABS, new PointF());
CriteriaHelper.pollUiThread(() -> {
return mTestRule.getActivity().getActivityTab().getNativePage() != null;
}, "Closing Incognito tab did not load a native page");
Assert.assertFalse("Created native page is in Incognito mode",
mTestRule.getActivity().getActivityTab().isIncognito());
Assert.assertTrue("Created native page is not a NTP",
mTestRule.getActivity().getActivityTab().getNativePage() instanceof NewTabPage);
}
} }
...@@ -31,6 +31,7 @@ import org.chromium.base.test.util.Restriction; ...@@ -31,6 +31,7 @@ import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.ntp.IncognitoNewTabPage;
import org.chromium.chrome.browser.preferences.Preferences; import org.chromium.chrome.browser.preferences.Preferences;
import org.chromium.chrome.browser.preferences.PreferencesLauncher; import org.chromium.chrome.browser.preferences.PreferencesLauncher;
import org.chromium.chrome.browser.preferences.website.SingleWebsitePreferences; import org.chromium.chrome.browser.preferences.website.SingleWebsitePreferences;
...@@ -466,4 +467,35 @@ public class VrBrowserTransitionTest { ...@@ -466,4 +467,35 @@ public class VrBrowserTransitionTest {
VrBrowserTransitionUtils.forceExitVr(); VrBrowserTransitionUtils.forceExitVr();
mVrBrowserTestFramework.assertNoJavaScriptErrors(); mVrBrowserTestFramework.assertNoJavaScriptErrors();
} }
/**
* Tests that clicking on the Incognito mode's "Learn More" link triggers DOFF. Automation of
* a manual test in https://crbug.com/861925.
*/
@Test
@Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM)
@MediumTest
public void testIncognitoLearnMoreTriggersDoff() throws InterruptedException, TimeoutException {
mTestRule.newIncognitoTabFromMenu();
VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS);
final IncognitoNewTabPage ntp =
(IncognitoNewTabPage) mTestRule.getActivity().getActivityTab().getNativePage();
NativeUiUtils.performActionAndWaitForUiQuiescence(() -> {
ThreadUtils.runOnUiThreadBlocking(
() -> { ntp.getView().findViewById(R.id.learn_more).performClick(); });
});
// This is a roundabout way of ensuring that the UI that popped up was actually the DOFF
// prompt.
ThreadUtils.runOnUiThreadBlocking(
() -> { VrShellDelegateUtils.getDelegateInstance().acceptDoffPromptForTesting(); });
CriteriaHelper.pollUiThread(() -> {
return VrShellDelegateUtils.getDelegateInstance().isShowingDoff();
}, "Did not enter DOFF flow after accepting DOFF prompt");
// Not necessary for the test, but helps avoid having to exit VR during the next test's
// pre-test setup.
ThreadUtils.runOnUiThreadBlocking(() -> {
mTestRule.getActivity().onActivityResult(
VrShellDelegate.EXIT_VR_RESULT, Activity.RESULT_OK, null);
});
}
} }
...@@ -29,6 +29,10 @@ UiElementName UserFriendlyElementNameToUiElementName( ...@@ -29,6 +29,10 @@ UiElementName UserFriendlyElementNameToUiElementName(
return k2dBrowsingHostedUiContent; return k2dBrowsingHostedUiContent;
case UserFriendlyElementName::kContentQuad: case UserFriendlyElementName::kContentQuad:
return kContentQuad; return kContentQuad;
case UserFriendlyElementName::kNewIncognitoTab:
return kOverflowMenuNewIncognitoTabItem;
case UserFriendlyElementName::kCloseIncognitoTabs:
return kOverflowMenuCloseAllIncognitoTabsItem;
default: default:
NOTREACHED(); NOTREACHED();
return kNone; return kNone;
......
...@@ -15,14 +15,17 @@ namespace vr { ...@@ -15,14 +15,17 @@ namespace vr {
// element names for interaction during testing. // element names for interaction during testing.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.vr // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.vr
enum class UserFriendlyElementName : int { enum class UserFriendlyElementName : int {
kUrl = 0, // URL bar kUrl = 0, // URL bar
kBackButton, // Back button on the URL bar kBackButton, // Back button on the URL bar
kForwardButton, // Forward button in the overflow menu kForwardButton, // Forward button in the overflow menu
kReloadButton, // Reload button in the overflow menu kReloadButton, // Reload button in the overflow menu
kOverflowMenu, // Overflow menu kOverflowMenu, // Overflow menu
kPageInfoButton, // Page info button on the URL bar kPageInfoButton, // Page info button on the URL bar
kBrowsingDialog, // 2D fallback UI, e.g. permission prompts kBrowsingDialog, // 2D fallback UI, e.g. permission prompts
kContentQuad, // Main content quad showing web contents kContentQuad, // Main content quad showing web contents
kNewIncognitoTab, // Button to open a new Incognito tab in the overflow menu
kCloseIncognitoTabs, // Button to close all Incognito tabs in the overflow
// menu
}; };
// These are used to report the current state of the UI after performing an // These are used to report the current state of the UI after performing an
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment