ContextMenuTest.java revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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;
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.chrome.test.util.TabUtils;
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.chrome.test.util.TabUtils.TestCallbackHelperContainerForTab;
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.test.util.TestHttpServerClient;
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils;
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.Criteria;
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.CriteriaHelper;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.KeyUtils;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.content.browser.test.util.TestTouchUtils;
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.concurrent.TimeoutException;
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.concurrent.atomic.AtomicReference;
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public class ContextMenuTest extends ChromeShellTestBase {
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void setUp() throws Exception {
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        super.setUp();
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        launchChromeShellWithUrl(TestHttpServerClient.getUrl(
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                "chrome/test/data/android/contextmenu/context_menu_test.html"));
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertWaitForPageScaleFactorMatch(0.5f);
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser", "Main"})
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testCopyLinkURL() throws InterruptedException, TimeoutException {
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab,
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testLink",
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_copy_link_address_text);
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertStringContains("test_link.html", getClipboardText());
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testCopyImageLinkCopiesLinkURL() throws InterruptedException, TimeoutException {
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab,
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testImageLink",
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_copy_link_address_text);
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertStringContains("test_link.html", getClipboardText());
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testCopyLinkTextSimple() throws InterruptedException, TimeoutException {
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab,
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testLink",
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_copy_link_text);
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertEquals("Clipboard text was not what was expected", "Test Link",
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                getClipboardText());
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testCopyLinkTextComplex() throws InterruptedException, TimeoutException {
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab,
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "copyLinkTextComplex",
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_copy_link_text);
92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertEquals("Clipboard text was not what was expected",
94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                "This is pretty   extreme \n(newline). ", getClipboardText());
95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testCopyImageToClipboard() throws InterruptedException, TimeoutException {
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) return;
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab,
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testImage",
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_copy_image);
108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        String expectedUrl = TestHttpServerClient.getUrl(
110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                "chrome/test/data/android/contextmenu/test_image.png");
111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertEquals("Clipboard text is not correct", expectedUrl, getClipboardText());
113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testLongPressOnImage() throws InterruptedException, TimeoutException {
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        final Tab tab = getActivity().getActiveTab();
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        TestCallbackHelperContainerForTab helper =
123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab);
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        OnPageFinishedHelper callback = helper.getOnPageFinishedHelper();
126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        int callbackCount = callback.getCallCount();
127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab, helper, "testImage",
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_open_image);
130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        callback.waitForCallback(callbackCount);
132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        String expectedUrl = TestHttpServerClient.getUrl(
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                "chrome/test/data/android/contextmenu/test_image.png");
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        final AtomicReference<String> actualUrl = new AtomicReference<String>();
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        getInstrumentation().runOnMainSync(new Runnable() {
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            @Override
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            public void run() {
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                actualUrl.set(tab.getUrl());
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            }
142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        });
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertEquals("Failed to navigate to the image", expectedUrl, actualUrl.get());
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testLongPressOnImageLink() throws InterruptedException, TimeoutException {
152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        final Tab tab = getActivity().getActiveTab();
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        TestCallbackHelperContainerForTab helper =
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab);
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        OnPageFinishedHelper callback = helper.getOnPageFinishedHelper();
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        int callbackCount = callback.getCallCount();
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenuUtils.selectContextMenuItem(this, tab, helper, "testImage",
161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                R.id.contextmenu_open_image);
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        callback.waitForCallback(callbackCount);
164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        final AtomicReference<String> actualTitle = new AtomicReference<String>();
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        getInstrumentation().runOnMainSync(new Runnable() {
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            @Override
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            public void run() {
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                actualTitle.set(tab.getTitle());
170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            }
171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        });
172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertTrue("Navigated to the wrong page.", actualTitle.get().startsWith("test_image.png"));
174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testDismissContextMenuOnBack() throws InterruptedException, TimeoutException {
181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab,
183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testImage");
184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertNotNull("Context menu was not properly created", menu);
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertFalse("Context menu did not have window focus", getActivity().hasWindowFocus());
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        KeyUtils.pressBack(getInstrumentation());
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Assert.assertTrue("Activity did not regain focus.",
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                CriteriaHelper.pollForCriteria(new Criteria() {
191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    @Override
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    public boolean isSatisfied() {
193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        return getActivity().hasWindowFocus();
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    }
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                }));
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // http://crbug.com/326769
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @FlakyTest
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    // @LargeTest
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Feature({"Browser"})
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void testDismissContextMenuOnClick() throws InterruptedException, TimeoutException {
203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Tab tab = getActivity().getActiveTab();
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab,
205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                TabUtils.getTestCallbackHelperContainer(tab), "testImage");
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertNotNull("Context menu was not properly created", menu);
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertFalse("Context menu did not have window focus", getActivity().hasWindowFocus());
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        TestTouchUtils.singleClickView(getInstrumentation(), tab.getPageInfo().getView(), 0, 0);
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        Assert.assertTrue("Activity did not regain focus.",
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                CriteriaHelper.pollForCriteria(new Criteria() {
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    @Override
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    public boolean isSatisfied() {
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        return getActivity().hasWindowFocus();
216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    }
217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                }));
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private String getClipboardText() {
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ClipboardManager clipMgr =
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ClipData clipData = clipMgr.getPrimaryClip();
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertNotNull("Primary clip is null", clipData);
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertTrue("Primary clip contains no items.", clipData.getItemCount() > 0);
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        return clipData.getItemAt(0).getText().toString();
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private void assertStringContains(String subString, String superString) {
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        assertTrue("String '" + superString + "' does not contain '" + subString + "'",
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                superString.contains(subString));
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
234