Index: chrome/android/javatests/src/org/chromium/chrome/browser/download/ContextMenuTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ContextMenuTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..de8be56a2937ebe14cd35aea6fdd798e5967138f |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ContextMenuTest.java |
@@ -0,0 +1,144 @@ |
+// 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.download; |
+ |
+import android.test.FlakyTest; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.base.test.util.CommandLineFlags; |
+import org.chromium.chrome.browser.ChromeSwitches; |
+import org.chromium.chrome.browser.CompositorChromeActivity; |
+import org.chromium.chrome.browser.Tab; |
+import org.chromium.chrome.browser.compositor.layouts.LayoutManager; |
+import org.chromium.chrome.test.util.ChromeTabUtils; |
+import org.chromium.chrome.test.util.TestHttpServerClient; |
+import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; |
+import org.chromium.content.browser.test.util.Criteria; |
+import org.chromium.content.browser.test.util.CriteriaHelper; |
+ |
+import java.io.IOException; |
+import java.util.concurrent.TimeoutException; |
+ |
+/** |
+ * Context menu related tests |
+ */ |
+@CommandLineFlags.Add(ChromeSwitches.GOOGLE_BASE_URL + "=http://example.com/") |
+public class ContextMenuTest extends DownloadTestBase { |
+ private static final String TEST_URL = |
+ TestHttpServerClient.getUrl("chrome/test/data/android/context_menu_test.html"); |
+ |
+ @Override |
+ public void setUp() throws Exception { |
+ super.setUp(); |
+ loadUrl(TEST_URL); |
+ assertWaitForPageScaleFactorMatch(0.5f); |
+ } |
+ |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityFromLauncher(); |
+ } |
+ |
+ /* |
+ * Bug: http://crbug.com/332154 |
+ * @LargeTest |
+ * @Feature({"Browser"}) |
+ */ |
+ @FlakyTest |
+ public void testSaveDataUrl() |
+ throws InterruptedException, TimeoutException, SecurityException, IOException { |
+ saveMediaFromContextMenu("dataUrlIcon", R.id.contextmenu_save_image, "download.gif"); |
+ } |
+ |
+ /* |
+ * Bug: http://crbug.com/332154 |
+ * @LargeTest |
+ * @Feature({"Browser"}) |
+ */ |
+ @FlakyTest |
+ public void testSaveImage() |
+ throws InterruptedException, TimeoutException, SecurityException, IOException { |
+ saveMediaFromContextMenu("testImage", R.id.contextmenu_save_image, "google.png"); |
+ } |
+ |
+ /* |
+ * Bug: http://crbug.com/332154 |
+ * @LargeTest |
+ * @Feature({"Browser"}) |
+ */ |
+ @FlakyTest |
+ public void testSaveVideo() |
+ throws InterruptedException, TimeoutException, SecurityException, IOException { |
+ saveMediaFromContextMenu("videoDOMElement", R.id.contextmenu_save_video, "test.mp4"); |
+ } |
+ |
+ // Open link and image in new tabs and Verify the order of indices of the tabs in the TabModel. |
+ // Also verify, that the parent page remains in front after opening links in new tabs. |
+ /* |
+ * Bug: http://crbug.com/412816 |
+ * @LargeTest |
+ * @Feature({"Browser"}) |
+ */ |
+ @FlakyTest |
+ public void testOpenLinksInNewTabsAndVerifyTabIndexOrdering() |
+ throws InterruptedException, TimeoutException { |
+ int nOpenedTabs = getActivity().getCurrentTabModel().getCount(); |
+ Tab tab = getActivity().getActivityTab(); |
+ ContextMenuUtils.selectContextMenuItem(this, tab, "testLink", |
+ R.id.contextmenu_open_in_new_tab); |
+ getInstrumentation().waitForIdleSync(); |
+ int indexOfLinkPage = nOpenedTabs; |
+ nOpenedTabs += 1; |
+ assertEquals("Number of open tabs does not match", |
+ nOpenedTabs , getActivity().getCurrentTabModel().getCount()); |
+ |
+ // Wait for any new tab animation to finish if we're being driven by the compositor. |
+ if (getActivity() instanceof CompositorChromeActivity) { |
+ final LayoutManager layoutDriver = ((CompositorChromeActivity) getActivity()) |
+ .getCompositorViewHolder().getLayoutManager(); |
+ assertTrue("Background tab animation not finished.", |
+ CriteriaHelper.pollForUIThreadCriteria(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return layoutDriver.getActiveLayout().shouldDisplayContentOverlay(); |
+ } |
+ })); |
+ } |
+ |
+ ContextMenuUtils.selectContextMenuItem(this, tab, "testImage", |
+ R.id.contextmenu_open_image_in_new_tab); |
+ getInstrumentation().waitForIdleSync(); |
+ int indexOfLogoPage = nOpenedTabs; |
+ nOpenedTabs += 1; |
+ assertEquals("Number of open tabs does not match", |
+ nOpenedTabs, getActivity().getCurrentTabModel().getCount()); |
+ |
+ // Verify the Url is still the same of Parent page. |
+ assertEquals(TEST_URL, getActivity().getActivityTab().getUrl()); |
+ |
+ // Switch to child tab page and verify Url. |
+ ChromeTabUtils.switchTabInCurrentTabModel(getActivity(), indexOfLinkPage); |
+ String newTabUrl = TestHttpServerClient.getUrl("chrome/test/data/android/about.html"); |
+ assertEquals(newTabUrl, getActivity().getActivityTab().getUrl()); |
+ |
+ // Switch to another child tab page and verify Url. |
+ ChromeTabUtils.switchTabInCurrentTabModel(getActivity(), indexOfLogoPage); |
+ String logoTabUrl = TestHttpServerClient.getUrl("chrome/test/data/android/google.png"); |
+ assertEquals(logoTabUrl, getActivity().getActivityTab().getUrl()); |
+ } |
+ |
+ private void saveMediaFromContextMenu(String mediaDOMElement, int saveMenuID, |
+ String expectedFilename) throws InterruptedException, TimeoutException, |
+ SecurityException, IOException { |
+ // Select "save [image/video]" in that menu. |
+ Tab tab = getActivity().getActivityTab(); |
+ ContextMenuUtils.selectContextMenuItem(this, tab, mediaDOMElement, saveMenuID); |
+ |
+ // Wait for the download to complete and see if we got the right file |
+ assertTrue(waitForChromeDownloadToFinish()); |
+ checkLastDownload(expectedFilename); |
+ } |
+} |