Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Unified Diff: chrome/test/android/javatests_staging/src/org/chromium/chrome/test/ChromeTabbedActivityTestBase.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/android/javatests_staging/src/org/chromium/chrome/test/ChromeTabbedActivityTestBase.java
diff --git a/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/ChromeTabbedActivityTestBase.java b/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/ChromeTabbedActivityTestBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ada648808cac1dffe152e4057a8d598ebc66819
--- /dev/null
+++ b/chrome/test/android/javatests_staging/src/org/chromium/chrome/test/ChromeTabbedActivityTestBase.java
@@ -0,0 +1,137 @@
+// 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.test;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.EmptyTabObserver;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.tab.ChromeTab;
+import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.TabModelUtils;
+import org.chromium.content.browser.test.util.CallbackHelper;
+import org.chromium.content.browser.test.util.TestTouchUtils;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * The base class of the ChromeTabbedActivity specific tests. It provides the common methods
+ * to access the ChromeTabbedActivity UI.
+ */
+@CommandLineFlags.Add(ChromeSwitches.DISABLE_DOCUMENT_MODE)
+public abstract class ChromeTabbedActivityTestBase extends
+ ChromeActivityTestCaseBase<ChromeTabbedActivity> {
+ private static final String TAG = "ChromeTabbedActivityTestBase";
+
+ public ChromeTabbedActivityTestBase() {
+ super(ChromeTabbedActivity.class);
+ }
+
+ /**
+ * Load a url in multiple new tabs in parallel. Each {@link ChromeTab} will pretend to be
+ * created from a link.
+ *
+ * @param url The url of the page to load.
+ * @param numTabs The number of tabs to open.
+ */
+ public void loadUrlInManyNewTabs(final String url, final int numTabs)
+ throws InterruptedException {
+ final CallbackHelper[] pageLoadedCallbacks = new CallbackHelper[numTabs];
+ final int[] tabIds = new int[numTabs];
+ for (int i = 0; i < numTabs; ++i) {
+ final int index = i;
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ Tab currentTab = getActivity().getCurrentTabCreator().launchUrl(
+ url, TabLaunchType.FROM_LINK);
+ final CallbackHelper pageLoadCallback = new CallbackHelper();
+ pageLoadedCallbacks[index] = pageLoadCallback;
+ currentTab.addObserver(new EmptyTabObserver() {
+ @Override
+ public void onPageLoadFinished(Tab tab) {
+ pageLoadCallback.notifyCalled();
+ tab.removeObserver(this);
+ }
+ });
+ tabIds[index] = currentTab.getId();
+ }
+ });
+ }
+ // When opening many tabs some may be frozen due to memory pressure and won't send
+ // PAGE_LOAD_FINISHED events. Iterate over the newly opened tabs and wait for each to load.
+ for (int i = 0; i < numTabs; ++i) {
+ final TabModel tabModel = getActivity().getCurrentTabModel();
+ final Tab tab = TabModelUtils.getTabById(tabModel, tabIds[i]);
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ TabModelUtils.setIndex(tabModel, tabModel.indexOf(tab));
+ }
+ });
+ try {
+ pageLoadedCallbacks[i].waitForCallback(0);
+ } catch (TimeoutException e) {
+ fail(String.format("PAGE_LOAD_FINISHED was not received for tabId=%d", tabIds[i]));
+ }
+ }
+ }
+
+ @Override
+ protected void startActivityCompletely(Intent intent) {
+ Instrumentation.ActivityMonitor monitor = getInstrumentation().addMonitor(
+ ChromeTabbedActivity.class.getName(), null, false);
+ Activity activity = getInstrumentation().startActivitySync(intent);
+ assertNotNull("Main activity did not start", activity);
+ ChromeTabbedActivity tabbedActivity = (ChromeTabbedActivity)
+ monitor.waitForActivityWithTimeout(ACTIVITY_START_TIMEOUT_MS);
+ assertNotNull("ChromeTabbedActivity did not start", tabbedActivity);
+ setActivity(tabbedActivity);
+ Log.d(TAG, "startActivityCompletely <<");
+ }
+
+ /**
+ * Long presses the view, selects an item from the context menu, and
+ * asserts that a new tab is opened and is incognito iff expectIncognito is true.
+ * @param view The View to long press.
+ * @param contextMenuItemId The context menu item to select on the view.
+ * @param expectIncognito Whether the opened tab is expected to be incognito.
+ * @param expectedUrl The expected url for the new tab.
+ */
+ protected void invokeContextMenuAndOpenInANewTab(View view, int contextMenuItemId,
+ boolean expectIncognito, final String expectedUrl) throws InterruptedException {
+ final CallbackHelper createdCallback = new CallbackHelper();
+ final TabModel tabModel = getActivity().getTabModelSelector().getModel(expectIncognito);
+ tabModel.addObserver(new EmptyTabModelObserver() {
+ @Override
+ public void didAddTab(Tab tab, TabLaunchType type) {
+ if (TextUtils.equals(expectedUrl, tab.getUrl())) {
+ createdCallback.notifyCalled();
+ tabModel.removeObserver(this);
+ }
+ }
+ });
+
+ TestTouchUtils.longClickView(getInstrumentation(), view);
+ assertTrue(getInstrumentation().invokeContextMenuAction(getActivity(),
+ contextMenuItemId, 0));
+
+ try {
+ createdCallback.waitForCallback(0);
+ } catch (TimeoutException e) {
+ fail("Never received tab creation event");
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698