15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.chrome.testshell; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.ThreadUtils; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.Feature; 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.ContentView; 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.ContentViewCore; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.ContentViewRenderView; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.concurrent.atomic.AtomicBoolean; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.util.concurrent.atomic.AtomicReference; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class ChromiumTestShellUrlTest extends ChromiumTestShellTestBase { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL used for base tests. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String URL = "data:text"; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @SmallTest 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Feature({"Main"}) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testBaseStartup() throws InterruptedException { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromiumTestShellActivity activity = launchChromiumTestShellWithUrl(URL); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waitForActiveShellToBeDoneLoading(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the activity was created as expected. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertNotNull(activity); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"Main"}) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testChromeWelcomePageLoads() throws InterruptedException { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String welcomeUrl = "chrome://welcome/"; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final ChromiumTestShellActivity activity = launchChromiumTestShellWithUrl(welcomeUrl); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) waitForActiveShellToBeDoneLoading(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the activity was created as expected. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertNotNull(activity); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure we have a ContentView and ContentViewCore. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AtomicReference<ContentView> contentView = new AtomicReference<ContentView>(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AtomicReference<ContentViewCore> contentViewCore = 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new AtomicReference<ContentViewCore>(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ThreadUtils.runOnUiThreadBlocking(new Runnable() { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void run() { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentView activeContentView = activity.getActiveContentView(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentView.set(activeContentView); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (activeContentView != null) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentViewCore.set(activeContentView.getContentViewCore()); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertNotNull(contentView.get()); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertNotNull(contentViewCore.get()); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensure the correct page has been loaded, ie. not interstitial, and title/url should 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be sane. Note, a typical correct title is: "Welcome to Chromium", whereas a wrong one 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // would be on the form "chrome://welcome/ is not available". 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AtomicBoolean isShowingInterstitialPage = new AtomicBoolean(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AtomicReference<String> url = new AtomicReference<String>(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final AtomicReference<String> title = new AtomicReference<String>(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ThreadUtils.runOnUiThreadBlocking(new Runnable() { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void run() { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) isShowingInterstitialPage.set(contentViewCore.get().isShowingInterstitialPage()); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url.set(contentViewCore.get().getUrl()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title.set(contentViewCore.get().getTitle()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse("Showed interstitial page instead of welcome page", 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) isShowingInterstitialPage.get()); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertNotNull("URL was null", url.get()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertTrue("URL did not contain: " + welcomeUrl + ". Was: " + url.get(), 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url.get().contains(welcomeUrl)); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertNotNull("Title was null", title.get()); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assertFalse("Title should not contain: " + welcomeUrl + ". Was: " + title.get(), 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) title.get().toLowerCase().contains(welcomeUrl)); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Tests that creating an extra ContentViewRenderView does not cause an assert because we would 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * initialize the compositor twice http://crbug.com/162312 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @SmallTest 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Feature({"Main"}) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void testCompositorInit() throws InterruptedException { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start the ChromiumTestShell, this loads the native library and create an instance of 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ContentViewRenderView. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) final ChromiumTestShellActivity activity = launchChromiumTestShellWithUrl(URL); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) waitForActiveShellToBeDoneLoading(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now create a new ContentViewRenderView, it should not assert. 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runTestOnUiThread(new Runnable() { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @Override 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void run() { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentViewRenderView contentViewRenderView = 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ContentViewRenderView(getInstrumentation().getTargetContext()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contentViewRenderView.setCurrentContentView(activity.getActiveContentView()); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } catch (Throwable e) { 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fail("Could not create a ContentViewRenderView: " + e); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}