1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)package org.chromium.chrome.browser.contextmenu; 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.content.ClipData; 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.content.ClipboardManager; 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.content.Context; 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.os.Build; 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.test.FlakyTest; 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.view.ContextMenu; 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import junit.framework.Assert; 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.base.test.util.Feature; 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.R; 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.chrome.browser.Tab; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.chrome.shell.ChromeShellTestBase; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.test.util.TestHttpServerClient; 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.Criteria; 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.CriteriaHelper; 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.KeyUtils; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.content.browser.test.util.TestCallbackHelperContainer; 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.TestTouchUtils; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.concurrent.TimeoutException; 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.concurrent.atomic.AtomicReference; 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public class ContextMenuTest extends ChromeShellTestBase { 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Override 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void setUp() throws Exception { 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) super.setUp(); 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) launchChromeShellWithUrl(TestHttpServerClient.getUrl( 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "chrome/test/data/android/contextmenu/context_menu_test.html")); 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading()); 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertWaitForPageScaleFactorMatch(0.5f); 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser", "Main"}) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testCopyLinkURL() throws InterruptedException, TimeoutException { 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testLink", 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_copy_link_address_text); 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertStringContains("test_link.html", getClipboardText()); 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testCopyImageLinkCopiesLinkURL() throws InterruptedException, TimeoutException { 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testImageLink", 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_copy_link_address_text); 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertStringContains("test_link.html", getClipboardText()); 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testCopyLinkTextSimple() throws InterruptedException, TimeoutException { 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testLink", 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_copy_link_text); 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertEquals("Clipboard text was not what was expected", "Test Link", 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) getClipboardText()); 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testCopyLinkTextComplex() throws InterruptedException, TimeoutException { 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "copyLinkTextComplex", 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_copy_link_text); 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertEquals("Clipboard text was not what was expected", 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "This is pretty extreme \n(newline). ", getClipboardText()); 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testCopyImageToClipboard() throws InterruptedException, TimeoutException { 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) return; 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testImage", 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_copy_image); 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) String expectedUrl = TestHttpServerClient.getUrl( 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "chrome/test/data/android/contextmenu/test_image.png"); 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertEquals("Clipboard text is not correct", expectedUrl, getClipboardText()); 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testLongPressOnImage() throws InterruptedException, TimeoutException { 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) final Tab tab = getActivity().getActiveTab(); 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestCallbackHelperContainer helper = 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TestCallbackHelperContainer(tab.getContentViewCore()); 118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnPageFinishedHelper callback = helper.getOnPageFinishedHelper(); 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int callbackCount = callback.getCallCount(); 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testImage", 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_open_image); 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) callback.waitForCallback(callbackCount); 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) String expectedUrl = TestHttpServerClient.getUrl( 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) "chrome/test/data/android/contextmenu/test_image.png"); 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) final AtomicReference<String> actualUrl = new AtomicReference<String>(); 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) getInstrumentation().runOnMainSync(new Runnable() { 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Override 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void run() { 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) actualUrl.set(tab.getUrl()); 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }); 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertEquals("Failed to navigate to the image", expectedUrl, actualUrl.get()); 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testLongPressOnImageLink() throws InterruptedException, TimeoutException { 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) final Tab tab = getActivity().getActiveTab(); 147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestCallbackHelperContainer helper = 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TestCallbackHelperContainer(tab.getContentViewCore()); 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) OnPageFinishedHelper callback = helper.getOnPageFinishedHelper(); 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int callbackCount = callback.getCallCount(); 153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenuUtils.selectContextMenuItem(this, tab, "testImage", 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) R.id.contextmenu_open_image); 156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) callback.waitForCallback(callbackCount); 158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) final AtomicReference<String> actualTitle = new AtomicReference<String>(); 160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) getInstrumentation().runOnMainSync(new Runnable() { 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Override 162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void run() { 163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) actualTitle.set(tab.getTitle()); 164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }); 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertTrue("Navigated to the wrong page.", actualTitle.get().startsWith("test_image.png")); 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testDismissContextMenuOnBack() throws InterruptedException, TimeoutException { 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "testImage"); 177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertNotNull("Context menu was not properly created", menu); 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertFalse("Context menu did not have window focus", getActivity().hasWindowFocus()); 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) KeyUtils.pressBack(getInstrumentation()); 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Assert.assertTrue("Activity did not regain focus.", 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CriteriaHelper.pollForCriteria(new Criteria() { 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Override 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public boolean isSatisfied() { 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return getActivity().hasWindowFocus(); 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) })); 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // http://crbug.com/326769 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @FlakyTest 193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // @LargeTest 194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Feature({"Browser"}) 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void testDismissContextMenuOnClick() throws InterruptedException, TimeoutException { 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Tab tab = getActivity().getActiveTab(); 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "testImage"); 198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertNotNull("Context menu was not properly created", menu); 199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertFalse("Context menu did not have window focus", getActivity().hasWindowFocus()); 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TestTouchUtils.singleClickView(getInstrumentation(), tab.getView(), 0, 0); 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Assert.assertTrue("Activity did not regain focus.", 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CriteriaHelper.pollForCriteria(new Criteria() { 205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) @Override 206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public boolean isSatisfied() { 207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return getActivity().hasWindowFocus(); 208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) })); 210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private String getClipboardText() { 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ClipboardManager clipMgr = 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); 215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ClipData clipData = clipMgr.getPrimaryClip(); 216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertNotNull("Primary clip is null", clipData); 217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertTrue("Primary clip contains no items.", clipData.getItemCount() > 0); 218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return clipData.getItemAt(0).getText().toString(); 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private void assertStringContains(String subString, String superString) { 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assertTrue("String '" + superString + "' does not contain '" + subString + "'", 223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) superString.contains(subString)); 224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 226