blob: c133ec780b49a1b3deb47cb430b4aebc7f9f40cb [file] [log] [blame]
// Copyright 2014 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.shell;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content.browser.ContentViewRenderView;
import org.chromium.ui.base.WindowAndroid;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/**
* Basic sanity test for loading urls in ChromeShell.
*/
public class ChromeShellUrlTest extends ChromeShellTestBase {
// URL used for base tests.
private static final String URL = "data:text";
@SmallTest
@Feature({"Main"})
public void testBaseStartup() throws InterruptedException {
ChromeShellActivity activity = launchChromeShellWithUrl(URL);
waitForActiveShellToBeDoneLoading();
// Make sure the activity was created as expected.
assertNotNull(activity);
}
@SmallTest
@Feature({"Main"})
public void testChromeWelcomePageLoads() throws InterruptedException {
String welcomeUrl = "chrome://welcome/";
final ChromeShellActivity activity = launchChromeShellWithUrl(welcomeUrl);
waitForActiveShellToBeDoneLoading();
// Make sure the activity was created as expected.
assertNotNull(activity);
// Ensure we have a valid ContentViewCore.
final AtomicReference<ContentViewCore> contentViewCore =
new AtomicReference<ContentViewCore>();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
contentViewCore.set(activity.getActiveContentViewCore());
}
});
assertNotNull(contentViewCore.get());
assertNotNull(contentViewCore.get().getContainerView());
// Ensure the correct page has been loaded, ie. not interstitial, and title/url should
// be sane. Note, a typical correct title is: "Welcome to Chromium", whereas a wrong one
// would be on the form "chrome://welcome/ is not available".
final AtomicBoolean isShowingInterstitialPage = new AtomicBoolean();
final AtomicReference<String> url = new AtomicReference<String>();
final AtomicReference<String> title = new AtomicReference<String>();
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
isShowingInterstitialPage.set(contentViewCore.get().isShowingInterstitialPage());
url.set(contentViewCore.get().getUrl());
title.set(contentViewCore.get().getTitle());
}
});
assertFalse("Showed interstitial page instead of welcome page",
isShowingInterstitialPage.get());
assertNotNull("URL was null", url.get());
assertTrue("URL did not contain: " + welcomeUrl + ". Was: " + url.get(),
url.get().contains(welcomeUrl));
assertNotNull("Title was null", title.get());
assertFalse("Title should not contain: " + welcomeUrl + ". Was: " + title.get(),
title.get().toLowerCase(Locale.US).contains(welcomeUrl));
}
/**
* Tests that creating an extra ContentViewRenderView does not cause an assert because we would
* initialize the compositor twice http://crbug.com/162312
*/
@SmallTest
@Feature({"Main"})
public void testCompositorInit() throws InterruptedException {
// Start the ChromeShell, this loads the native library and create an instance of
// ContentViewRenderView.
final ChromeShellActivity activity = launchChromeShellWithUrl(URL);
waitForActiveShellToBeDoneLoading();
// Now create a new ContentViewRenderView, it should not assert.
try {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
WindowAndroid windowAndroid = new WindowAndroid(
getInstrumentation().getTargetContext().getApplicationContext());
ContentViewRenderView contentViewRenderView =
new ContentViewRenderView(getInstrumentation().getTargetContext(),
windowAndroid);
contentViewRenderView.setCurrentContentViewCore(
activity.getActiveContentViewCore());
}
});
} catch (Throwable e) {
e.printStackTrace();
fail("Could not create a ContentViewRenderView: " + e);
}
}
}