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)}