| Index: chrome/android/testshell/javatests/src/org/chromium/chrome/testshell/ChromiumTestShellTestBase.java
|
| diff --git a/chrome/android/testshell/javatests/src/org/chromium/chrome/testshell/ChromiumTestShellTestBase.java b/chrome/android/testshell/javatests/src/org/chromium/chrome/testshell/ChromiumTestShellTestBase.java
|
| index 4a93fe167e8f92c0b31728eb2138cf0be15dc7d0..cab24fd42840885ac5202de4c621968e1d2fc1a7 100644
|
| --- a/chrome/android/testshell/javatests/src/org/chromium/chrome/testshell/ChromiumTestShellTestBase.java
|
| +++ b/chrome/android/testshell/javatests/src/org/chromium/chrome/testshell/ChromiumTestShellTestBase.java
|
| @@ -8,12 +8,21 @@ import android.content.ComponentName;
|
| import android.content.Intent;
|
| import android.net.Uri;
|
| import android.test.ActivityInstrumentationTestCase2;
|
| +import android.text.TextUtils;
|
| +
|
| +import org.chromium.chrome.browser.TabBase;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +
|
| +import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
| /**
|
| * Base test class for all ChromiumTestShell based tests.
|
| */
|
| public class ChromiumTestShellTestBase extends
|
| ActivityInstrumentationTestCase2<ChromiumTestShellActivity> {
|
| + /** The maximum time the waitForActiveShellToBeDoneLoading method will wait. */
|
| + private static final long WAIT_FOR_ACTIVE_SHELL_LOADING_TIMEOUT = 10000;
|
|
|
| public ChromiumTestShellTestBase() {
|
| super(ChromiumTestShellActivity.class);
|
| @@ -32,4 +41,42 @@ public class ChromiumTestShellTestBase extends
|
| setActivityIntent(intent);
|
| return getActivity();
|
| }
|
| +
|
| + /**
|
| + * Waits for the Active shell to finish loading. This times out after
|
| + * WAIT_FOR_ACTIVE_SHELL_LOADING_TIMEOUT milliseconds and it shouldn't be used for long
|
| + * loading pages. Instead it should be used more for test initialization. The proper way
|
| + * to wait is to use a TestCallbackHelperContainer after the initial load is completed.
|
| + * @return Whether or not the Shell was actually finished loading.
|
| + * @throws Exception
|
| + */
|
| + protected boolean waitForActiveShellToBeDoneLoading() throws Exception {
|
| + final ChromiumTestShellActivity activity = getActivity();
|
| +
|
| + // Wait for the Content Shell to be initialized.
|
| + return CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + try {
|
| + final AtomicBoolean isLoaded = new AtomicBoolean(false);
|
| + runTestOnUiThread(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + TabBase tab = activity.getActiveTab();
|
| + if (tab != null) {
|
| + isLoaded.set(!tab.isLoading()
|
| + && !TextUtils.isEmpty(tab.getContentView().getUrl()));
|
| + } else {
|
| + isLoaded.set(false);
|
| + }
|
| + }
|
| + });
|
| +
|
| + return isLoaded.get();
|
| + } catch (Throwable e) {
|
| + return false;
|
| + }
|
| + }
|
| + }, WAIT_FOR_ACTIVE_SHELL_LOADING_TIMEOUT, CriteriaHelper.DEFAULT_POLLING_INTERVAL);
|
| + }
|
| }
|
|
|